K-近邻算法(KNN)\3.14

KNN近邻算法

一.定义

给定某个待分类的测试样本,基于某种距离(如欧氏距离)度量,找到训练集中与测试样本最接近的k个训练样本,然后基于这k个最近的“邻居”(k为正整数,通常较小)进行预测分类。
在这里插入图片描述
图与定义来源于《Python极简讲义》

二、影响算法的因子

在这里插入图片描述

三、影响因子的解释(为什么这些会影响到KNN分类结果)

1)假设k值(训练样本个数)过小,那么对样本数据过于敏感,很可能因为偶然误差导致分类结果的偏离。分类算法的鲁棒性也较差容易发生过拟合。
k值过大则有可能分类错误率也会下降,但是由于噪声的存在,可能把这些噪声的干扰继续放大。离分类标准过远也有被其他类占领的风险。

2)什么是归一化处理?
归一化处理就是把影响分类结果的因变量转化为数字的表示,通过数据的大小表示影响程度的高低。其范围在[0,1]
例如:计算乒乓球在高速运动中,落点是否在台内。分类结果为是或否。
旋转的衡量单位是转速,40转速每秒与50转速每秒转速相差10转每秒,速度40km/h,与50km/h相差10km/h,这两种因素对问题的影响程度不相同,为了尽可能的还原因素对问题的影响,所以使用归一化。

3)邻居距离方法的不同,导致分类结果产生差异,目前一般采用欧式距离 进行单位度量,还有海明距离,马氏距离,切比雪夫距离,曼哈顿距离等。

4)分类原则制定依据比重进行。

k-近邻算法算法如果简单地实施“众(数据)点平等”的“少数服从多数”原则,也可能误判新样本的类别归属。那么,怎样才能缓解这一不利趋势呢?俗话说得好,远亲不如近邻。事实上,我们需要给不同的“投票人”赋予不同的权重,轻重有别,越靠近数据点的投票权重越高,这样才能在投票原则下更为准确地预测数据的类别。

四、代码实现

本代码通过代码实现了knn算法来对鸢尾花数据集进行特征分析并归类来实现对未知数据的分析,推断该数据下对应的花是哪类鸢尾花。

import pandas as pd 
from sklearn.datasets import load_iris
#加载鸢尾花数据集
iris=load_iris()
X=iris.data 
y=iris.target
#分割数据
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=123)
#选择模型
from sklearn.neighbors import KNeighborsClassifier
#生成模型对象
knn=KNeighborsClassifier(n_neighbors=3)
#训练模型(数据拟合)
knn.fit(X,y)
#模型预测
knn.predict([[4,3,5,3]])
y_predict_on_train=knn.predict(X_train)
y_predict_on_test=knn.predict(X_test)

from sklearn.metrics import accuracy_score
print('训练集的准确率为:{:.2f}%'.format(100*accuracy_score(y_train,y_predict_on_train)))
print('训练集的准确率为:{:.2f}%'.format(100*accuracy_score(y_test,y_predict_on_test)))

五、解释

1.sklearn内置许多经典数据集,可以直接加载,无需下载导入
2.函数train_test_split()将特征X和标签y分割成两部分,测试集test_size占30%,每个随机状态random_state代表一批不同的训练集和测试集,数值不同,则得到的集合不同。
3.X代表鸢尾花的除标签外的特殊数据,比如花萼长度,y代表标签数据,指出是哪类鸢尾花,例如山鸢尾,变色鸢尾,还是维吉尼亚鸢尾。
4.KNneihgbor是一个分类器,在此不做多余描述,具体可参考KNeighborsClassifier()函数解析

六、参考文献

1.《Python极简讲义》
2.常见距离参考

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅墨\

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值