knn工作机制简单,其没有训练过程,在训练阶段只是把样本存起来。当有测试输入时,根据选取的距离计算方式,计算与每个样本的距离,然后选取距离最小的前k个样本中类别最多的那个为预测结果。
预测结果与计算距离方法有关,与K的选取有关。
"""KNN from 机器学习实战 19 页"""
import numpy as np
def create_dataset():
group = np.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
labels = ['A', 'A', 'B', 'B']
return group, labels
def classify(inx, data_set, labels, k):
data_set_size = data_set.shape[0]
diff_mat = np.tile(inx, (data_set_size, 1)) - data_set
# np.tile(a,(2,1))第一个参数为Y轴扩大倍数,第二个为X轴扩大倍数.变为与数据集维度相同
sqdiff_mat = diff_mat ** 2
sqdistances = sqdiff_mat.sum(axis=1)
distances = sqdistances ** 0.5
# 以上求出了目标值,与样本各点的欧氏距离
sorted_dis = distances.argsort()
class_count = {}
for i in range(k):
temp_label = labels[sorted_dis[i]]
class_count[tem