K近邻(KNN)K Nearest Neighbors
1. 什么是K近邻
思想:只要知道你朋友(邻居)是什么人,就能知道你是什么人 K近邻是一种 懒惰的学习方法:(基于实例学习) Lazy learners: instance-based learning 新数据来时,才开始学习给出分类 KNN 没有训练模型,训练和预测结合一起
2. K近邻的距离度量公式
距离(distance)--衡量样本之间的相相识度 欧式距离(平面几何之间的距离) 曼哈顿距离(两点之间X的距离+Y的距离:类似楼梯铺红毯,红毯的长度) 闵氏距离(闵可夫斯基距离)
通用距离公式 ( 闵氏距离 )
当 为曼哈顿距离:
当 为欧式距离:
3. K近邻算法基本原理
K近邻算法基本流程
开始 指定K值 计算输入样本与训练样本之间的距离 按距离排序 筛选K个最近邻居 投票判断分类 结束
4. K近邻算法代码
sklearn.neighbors KNeighborsClassifier from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier( n_neighbors = 5, weights = 'uniform', algorithm = 'auto', leaf_size = 30, p = 2, metric = 'minkowski', metric_param = None, n_jobs = 1 ) 一些重要的参数: n_neighbors --K值 weights --邻居权重,uniform邻居一样大/distance距离小权重大 metric_param--距离计算公式 minkowski闵氏距离 p ---闵氏距离参数 p = 1(曼哈顿距离) p = 2(欧式距离)
5. K近邻模型优化
5.1 K值
K过小(理论最小=1)也就是邻居数为1,会受到噪声数据影响,降低分类精度 K过大(理论=训练样本数)会受到不相关数据影响,降低分类精度 使用交叉验证寻找最好的K值 经验值 k = sqr(n)/2, n时训练样本数
5.2 选择距离格式:
5.3 K 近邻投票加权方法
平均加权 uniform 与邻居一样大 距离加权 distance 距离小权重大 用强大的 Gridsearch(网格搜索)寻找最优参数 parameters = { 'n_neighbors':[5,10,15,20,30], 'weights':['uniform','distance'], 'p':[1,2] } knn = KNeighborsClassifier() grid_search = GridSearchCV(lnn,parameters,scoring = 'accuracy',cv = 5) grid_search.fit(x,y)
6. 特征标准化和替换
距离与变量量纲的关系 变量标准化方法:0-1标准化 区间缩放法 分类变量的转化:onehot编码 导入包-> 导入数据集 -> 标准化 --> 用标准化训练模型 ->