一、KNN 概念
1. 选择参数 K
2. 为了判断未知实例的类别,所有已知类别的实例作为参照,计算未知类别和所有已知实例的距离
3. 选择最近 K 个已知实例
4. 根据少数服从多数的投票法则 (majority-voting),让未知实例归类为 K 个最近邻样本中最多数的类别
二、KNN 的算法实践
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| def knn (x_test, x_data, y_data, k): x_data_size = x_data.shape [0] np.tile (x_test, (x_data_size,1)) diffMat = np.tile (x_test, (x_data_size,1)) - x_data sqDiffMat = diffMat**2 sqDistances = sqDiffMat.sum (axis=1) distances = sqDistances**0.5 sortedDistances = distances.argsort () classCount = {} for i in range (k): votelabel = y_data [sortedDistances [i]] classCount [votelabel] = classCount.get (votelabel,0) + 1 sortedClassCount = sorted (classCount.items (),key=operator.itemgetter (1), reverse=True) return sortedClassCount [0][0]
|
三、sklearn 实现 KNN
1 2 3 4 5 6
| model = neighbors.KNeighborsClassifier (n_neighbors=3) model.fit (x_train, y_train) prediction = model.predict (x_test)
print (classification_report (y_test, prediction))
|
机器学习算法系列
机器学习算法 —(1)线性回归和非线性回归
机器学习算法 —(2)逻辑回归
机器学习算法 —(3)神经网络
机器学习算法 —(4)KNN
机器学习算法 —(5)决策树
机器学习算法 —(6)集成学习
机器学习算法 —(7)贝叶斯算法
机器学习算法 —(8)聚类算法
机器学习算法 —(9)主成分分析 PCA
机器学习算法 —(10)支持向量机 SVM