楼主: 于家崎
529 0

[学习笔记] 【学习笔记】数据分析Python机器学习 K近邻算法 K最近邻(kNN,k-Nearest Nei ... [推广有奖]

  • 0关注
  • 0粉丝

硕士生

34%

还不是VIP/贵宾

-

威望
0
论坛币
940 个
通用积分
22.6174
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
700 点
帖子
124
精华
0
在线时间
1 小时
注册时间
2020-6-10
最后登录
2020-8-27

楼主
于家崎 发表于 2020-8-24 21:52:18 来自手机 |只看作者 |坛友微信交流群|倒序 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
数据分析Python机器学习
K近邻算法

K最近邻(kNN,k-Nearest Neighbor):

工作原理:存在一个样本数据集合,也称作为训练样本集,并且样 本集中每个数据都存在标签,即每一个数据与所属分类的一一对应 关系。输入没有标签的新数据后,将新的数据的每个特征与样本集 中数据对应的特征进行比较,然后算法提取样本最相似数据(最近邻) 的分类标签。

一般来说,只选择样本数据集中前k个最相似的数据,这就是k-近邻 算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数 据中出现次数最多的分类,作为新数据的分类。

距离度量:

欧氏距离(最常用),曼哈顿距离,马氏距离,夹角余弦(越接近1,越相似)

k-近邻算法步骤:

计算已知类别数据集中的点与当前点之间的距离;

按照距离递增次序排序;

选取与当前点距离最小的k个点;

确定前k个点所在类别的出现频率;

返回前k个点所出现频率最高的类别作为当前点的预测分类

k-近邻算法实战:数据归一化

如果不同特征变量的量纲级别相差较大且在建模时相互影响,我们通常会对数据进行预处理,该手段称为数据标准化或数据归一化。

常见方法有min—max标准化(也称离差标准化):newValue = (oldValue - min) / (max - min)

Z—score标准化(也称均值归一化)

超参数优化

KNN中的k是一个超参数,需要人为输入。从KNN原理中可知,k值对 算法有极大的影响。

如果选择的k值较小,就相当于较小的邻域中的训练实例进行预测, 这时候只有与输入实例较近的(相似的)训练实例才会对预测结果 起作用,但缺点是预测结果会对近邻的实例点非常敏感。如果邻近 的实例点恰好是噪声,预测就会出错。相反地,如果选择的k值较大, 就相当于较大的邻域中的训练实例进行预测。这时与输入实例较远 的(不相似的)训练实例也会对预测起作用,使预测发生错误。

交叉验证优化超参数

模型每次使用不同的训练集和测试集,有不同的测试结果

机器学习追求的是模型在未知数据集上的效果,通过交叉验证进一 步提高模型的泛化能力

KNN总结:

一种非参数、惰性学习方法,导致预测时速度慢

当训练样本集较大时,会导致其计算开销高

样本不平衡的时候,对稀有类别的预测准确率低

KNN模型的可解释性不强



代码实现:

例子:鸢尾花分类

import numpy as np

from sklearn import datasets

from sklearn.neighbors import KNeighborsClassifier

from sklearn.model_selection import train_test_split

# 导入鸢尾花数据并查看数据特征

iris = datasets.load_iris()

print(\'数据量\',iris.data.shape)

# 拆分属性数据

iris_X = iris.data

# 拆分类别数据

iris_y = iris.target



iris_train_X , iris_test_X, iris_train_y ,iris_test_y = train_test_split(iris_X, iris_y, test_size=0.2,random_state=0)

knn = KNeighborsClassifier(n_neighbors=6)

knn.fit(iris_train_X, iris_train_y)

predict_result=knn.predict(iris_test_X)

print(\'预测结果\',predict_result)

# 计算预测的准确率

print(\'预测准确率\',knn.score(iris_test_X, iris_test_y)) #knn.score()涵义先做预测,再比较



回归

X = [[0], [1], [2], [3]]

y = [0, 0, 1, 1]

from sklearn.neighbors import KNeighborsRegressor

neigh = KNeighborsRegressor(n_neighbors=2)

neigh.fit(X, y)

print(neigh.predict([[1.5]]))

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python Rest 学习笔记 机器学习 near

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 02:04