knn算法简介及其简单实现
基本想法:
已知样本的属性以及所属类别。在预测新的数据点类别时,通过计算该预测点到每个样本的距离,选出距离最近的K个点。然后通过这K个点的投票结果
决定被预测的点属于那种类别。
如上图:绿色圆点代表我们需要预测的点。其他点的属性和类别均为已知。要判断绿色点属于那种类别,只需计算绿色点到各个点的距离。我们选出
K个距离最近的点。然后这K个点进行投票,得票的结果即使绿色点所属的类别。
我们用伪代码来表示:
(1)把样本数据抽象为坐标系的点。
(2)通过公式计算绿色点到各个点的距离
(3)K个最近的点进行投票表决。
这里饮用python的机器学习库sklearn,进行训练
import numpy as np
from sklearn import neighbors
knn = neighbors.KNeighborsClassifier() #取得knn分类器
data = np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]]) # <span style="font-family:Arial, Helvetica, sans-serif;">data对应着打斗次数和接吻次数</span>
labels = np.array([1,1,1,2,2,2]) #<span style="font-family:Arial, Helvetica, sans-serif;">labels则是对应Romance和Action</span>
knn.fit(data,labels) #导入数据进行训练'''
knn.predict([18,90])
说明:
首先,用labels数组中的1和2代表Romance和Aciton,因为sklearn不接受字符数组作为标志,只能用1,2这样的int型数据来表示,后面处理可以将1和2映射到Romance和Action上来。fit则是用data和labels进行训练,data对应的是打斗次数和接吻次数构成的向量,称之为特征向量。labels则是这个数据所代表的电影所属的类型。调用predict 进行预测,将未知电影的特征向量代入,则能分析出该未知电影所属的类型。此处计算结果为1,也就是该未知电影属于Romance,和直觉相符。
本文旨在简介常用的数据挖掘算法的及其实现,以简单的编码实现算法入门的讲解。引用了一些常见的网络资料,内侵删。