栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

02机器学习:k近邻算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

02机器学习:k近邻算法

0.核心思想

近朱者赤近墨者黑。具有相同标签的往往会聚集到一起,根据与待预测样本最近的k个邻居来进行预测。

  • kNN是有监督学习
  • 分类和回归都可以用kNN
1.算法原理
  1. 从训练集合中获取k个离待预测样本距离最近的样本数据。这个距离是特征属性之间的距离
  2. 根据1中获取得到的k个样本数据来预测当前待预测样本的目标属性值
a.特征空间

如下图是两个特征的特征空间,是一个平面。

三个特征数的特征空间是立体的,4个,5个特征的特征空间没办法想象,但是存在,被称为超空间。

b.距离

闵氏距离

当p=2的时候就是欧氏距离;p=1是曼哈顿距离

c.k的选择

k是kNN算法中的一个超参数。
看下图

k=3,被预测为红色;k=5被预测为蓝色。
k值影响预测结果,因此我们需要通过实验(交叉验证)来选择一个比较合适的最终值。

k的两种特殊情况
  • 当k=1(k小)的时候,能够在训练数据集上获得100的准确率。但是可想而知,过拟合,这也是为什么采用交叉验证的原因。
  • 当k=训练样本数(k大),训练数据集上准确率就是样本数据的比例,容易欠拟合。
d.决策规则
  • 分类模型中,主要使用多数表决法或者加权多数表决法
  • 在回归模型中,主要使用平均值法或者加权平均值法
分类任务:加权多数表决法

每个邻近样本的权重是不一样的,越近权重越大,投票的时候说话分量越大。
一般情况下采用权重和距离成反比的方式来计算。因为每个人都是一票,所以把权重相加,最终预测结果是出现权重最大的那个类别。
比如下图中,假设三个红色点到待预测样本点的距离均为2,权重都是1/2;两个黄色点到待预测样本点距离为1,权重都是1,那么蓝色圆圈的最终类别为黄色(1+1>1/2+1/2+1/2)。

权重归一化

还有一个问题,这五个人的权重之和不是1,而是7/2.最好进行归一化,就是每一个人的投票权再除以7/2.比如,红色样本的投票权就是1/2 除以7/2.
不归一化也可行吧。

回归任务:加权平均值法

每个邻近样本的权重是不一样的,越近权重越大,投票的时候说话分量越大。
一般情况下采用权重和距离成反比的方式来计算。比如下图中,假设三个红色点值是3,到待预测样本点的距离均为2,权重都是1/7(1/2除以7/2);两个黄色点值为2,到待预测样本点距离为1,权重都是2/7(1除以7/2).(添加了归一化)

预测结果:

2.sklearn代码
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier as knn

#00数据加载
X,Y = load_iris(return_X_y=True)
#01数据划分
X_train,X_test,y_train,y_test = train_test_split(X,Y,test_size=0.2,random_state=0)
#02训练
knn_clf = knn(n_neighbors=3,weights='uniform',algorithm='kd_tree')
knn_clf.fit(X_train,y_train)
#03测试
print('the score in train data:',knn_clf.score(X_train,y_train))
print('the score in test data:',knn_clf.score(X_test,y_test))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012710.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号