K近邻(KNN)

KNN概念

kNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。
kNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。

该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;

算法步骤:

算法步骤:

step.1---初始化距离为最大值

step.2---计算未知样本和每个训练样本的距离dist

step.3---得到目前K个最临近样本中的最大距离maxdist

step.4---如果dist小于maxdist,则将该训练样本作为K-最近邻样本

step.5---重复步骤2、3、4,直到未知样本和所有训练样本的距离都算完

step.6---统计K-最近邻样本中每个类标号出现的次数

step.7---选择出现频率最大的类标号作为未知样本的类标号

KNN的实现

选用“鸢尾”数据集来实现KNN算法

#从sklearn.datasets导入iris导入数据
from sklearn.datasets import load_iris
#使用加载器i读取数据并且存入变量中
iris=load_iris()
#查看数据规模
print(iris.data.shape)
#查看数据说明
print(iris.DESCR)
#数据分割25%用于测试
#导入 train_test_split用于数据分割
from sklearn.cross_validation import train_test_split
#从使用train_test_split,利用随机种子random_state采样25%的数据作为测试集
X_train,X_test,Y_train,Y_test=train_test_split(iris.data,iris.target,test_size=0.25,random_state=33)
from sklearn.preprocessing import StandardScaler
from  sklearn.neighbors import KNeighborsClassifier
#对数据进行标准化处理
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_test)
#使用K近邻分类器对测试数据进行类别预测,预测结果储存在变量y_predict中
knc=KNeighborsClassifier()
knc.fit(X_train,Y_train)
y_predict=knc.predict(X_test)
#使用模型自带的评估函数进行准确性评测
print('The accuracy of K-nearest Neighbor Classifier is ',knc.score(X_test,Y_test))
#对预测结果进行分析
from sklearn.metrics import classification_report
print(classification_report(Y_test,y_predict,target_names=iris.target_names))

数据说明如下:

鸢尾数据说明

结果如下:

预测性能评估

注:部分资料参考自范淼 李超《Python机器学习及实践》清华大学出版社 ,感谢!

推荐阅读更多精彩内容