该篇文章记录的是我对KNN算法的理解,以及知识点体系的总结。
KNN算法的思维导图
-
KNN解决什么问题
-
解决有监督学习的分类和回归问题,根据训练集来预测样本结果。
-
-
KNN算法思想
-
是什么
-
一个样本在训练集中找到最相似(近邻)的K个样本数据,用K个样本数据中大多数归属的类别来预测样本类别。
-
距离度量计算方式
-
欧式距离:
对应位置相减、平方、开根号,值越小越接近。
-
K值选择问题
K 是超参数:指需要人工指定的参数,此处为邻居的个数。
-
1、K值不要过小
数据中可能存在异常值,学到了嘈杂数据过多的特征,导致模型太复杂。
-
2、K值不要过大
样本均衡:指样本中类别个数相同,导致学到的特征较少。
-
3、K值尽量不要选择偶数和类别个数的倍数
-
4、K值举例:5、7、9、11
实际工作中经常使用交叉验证的方式去选取最优的k值,而且一般情况下K值都是比较小的数值。
-
-
KNN流程
-
KNN分类流程:
-
1.计算未知样本到每一个训练样本的距离
-
2.将训练样本根据距离大小升序排列
-
3.取出距离最近的K个训练样本
-
4.进行多数表决,统计 K 个样本中哪个类别的样本个数最多
-
5.将未知的样本归属到出现次数最多的类别
-
KNN回归流程:
-
1.计算未知样本到每一个训练样本的距离
-
2.将训练样本根据距离大小升序排列
-
3.取出距离最近的K个训练样本
-
4.把这个 K个样本的目标值计算其平均值
-
5.平均值作为未知样本预测的值
-
-
-
KNN的API
使用sklearn包
-
分类的API
from sklearn.neighbors import KNeighborsClassifier
-
回归的API
from sklearn.neighbors import KNeighborsRegressor
-
-
KNN算法代码演示
-
回归问题
-
#从sklearn中导入KNN算法工具包 from sklearn.neighbors import KNeighborsClassifier #准备特征数据,特征需传入二维数组 x = [[1],[3],[4],[5],[7]] #准备目标值数据 y = [0,0,0,1,1] #实例化模型,创建KNN对象,指定k的值 knn = KNeighborsClassifier(n_neighbors=3) #用fit方法进行模型训练, 传入特征和目标值 knn.fit(x,y) #对一个样本预测, 自动计算 myret = knn.predict([[6]]) #输出结果为[1] print(myret)
-
线性问题
#从sklearn中导入KNN算法工具包
from sklearn.neighbors import KNeighborsRegressor
#准备特征数据
x = [[1,2],[4,5],[6,7],[10,12],[14,17]]
#准备目标值数据
y = [0.1,0.2,0.3,0.5,0.7]
#实例化模型,创建KNN对象
knn = KNeighborsRegressor(n_neighbors=3)
#fit方法模型训练, 传入特征和目标值
knn.fit(x,y)
#预测, 自动计算
myret = knn.predict([[8,9]])
#输出结果为:[0.33333333]
print(myret)
以上。