于家崎

2020-08-24   阅读量: 741

机器学习

数据分析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]]))












添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
73.4504 2 0 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子