机器学习——KNN(K近邻)

K近邻(KNN)K Nearest Neighbors

1. 什么是K近邻

思想:只要知道你朋友(邻居)是什么人,就能知道你是什么人
K近邻是一种 懒惰的学习方法:(基于实例学习)

Lazy learners: instance-based learning

新数据来时,才开始学习给出分类
KNN 没有训练模型,训练和预测结合一起

2. K近邻的距离度量公式

距离(distance)--衡量样本之间的相相识度
欧式距离(平面几何之间的距离)
曼哈顿距离(两点之间X的距离+Y的距离:类似楼梯铺红毯,红毯的长度)
闵氏距离(闵可夫斯基距离)

通用距离公式 ( 闵氏距离 )

D ( X , Y ) = i = 1 n | X i Y i | p p

p = 1 为曼哈顿距离: D ( X , Y ) = i = 1 n | X i Y i |
p = 2 为欧式距离: D ( X , Y ) = i = 1 n ( X i Y i ) 2


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编码
导入包-> 导入数据集 -> 标准化 --> 用标准化训练模型 -> 

猜你喜欢

转载自blog.csdn.net/wsp_1138886114/article/details/80470199