01原理
K近邻算法又称KNN算法,是非常经典的机器学习算法,它的原理十分简单:对于一个新样本,计算出它距离其他样本点的距离,然后选取K个数,这K个数大多数属于哪个类别,则新样本也属于这个类别。
如下图,绿色的小球是新样本,当K=3时,样本点有两个三角形和一个正方形,所以我们可以认为新样本属于三角形;当K=5时,样本点有三个正方向和两个三角形,所以我们可以认为新样本属于正方形;同理可得,当K=11时,新样本属于正方形。
计算两点间的距离,可以直接使用两点间距离公式:
n维空间的两点间距离公式为:
02搭建模型
通过搭建一个手写数字识别模型来讲解如何用Python使用K近邻算法。(ps:本章涉及到图像识别部分知识,因为篇幅原因将放到下篇文章进行分享。)
首先读取数据进行查看。
# 1.读取数据 import pandas as pd df = pd.read_excel('手写字体识别.xlsx')
第一列是手写数字,其余每一列则是手写数字的二值化处理后的值。
开始设置特征变量和目标变量。
X = df.drop(columns='对应数字') Y = df['对应数字']
对数据集进行划分,其中20%的数据为测试集,80%的数据为训练集。
from sklearn.model_selection import train_test_split X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_si
现在对已经划分好的数据集进行训练。
from sklearn.neighbors import KNeighborsClassifier as KNN knn = KNN(n_neighbors=5) knn.fit(X_train, Y_train)
对模型用测试集进行测试
Y_pred = knn.predict(X_test)
查看一下预测的准确度。
from sklearn.metrics import accuracy_score score = accuracy_score(Y_pred,Y_test)
预测准确度为:
03模型优化
模型搭建好后,我们还可以对n_neighbors参数进行调优,从而进一步优化模型。
from sklearn.model_selection import GridSearchCV params = {'n_neighbors':[1,2,3,4,5,6,7,8,9]} knn = KNN() grid_search = GridSearchCV(knn,params,cv=5) grid_search.fit(X_train,Y_train) grid_search.best_params_
n_neighbors参数最优值为:
04小结
1. 本文介绍了K近邻算法,并通过识别手写数字模型来看如何用Python实现它。
2. 本文仅供学习,不做它用。