机器学习算法 --(4)KNN

一、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]
# 复制 x_test
np.tile (x_test, (x_data_size,1))
# 计算 x_test 与每一个样本的差值
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
# 根据 operator.itemgetter (1)- 第 1 个值对 classCount 排序,然后再取倒序
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