【机器学习】K邻近算法

 K邻近算法原理(K:近邻的个数)

可用于分类或回归

  •  分类(近朱者赤近墨者黑)

 对于k邻近算法来讲,新数据点离谁最近,就和谁属于同一类。

如果在模型训练的过程中选的最邻近数为1,很可能这个数据恰好是一个错误数据,因此,需要增加最近邻的数量,比如把最邻近数增加到3,如果与新数据点距离最近的这3个点中有两个点是蓝色点,那新数据点也被分到蓝色类别中。

  •  回归

K邻近算法用于回归的原理与分类相同,当我们用K邻近算法回归计算某个数据点的预测值时,模型会选择离该数据点最近的若干个训练数据集中的点,并将它们的y值取平均值,并将该平均值作为新数据点的预测值。

  K邻近算法原理

k近邻法三要素:距离度量k值的选择分类决策规则

  • 距离度量

  • k值的选择 

k值过大,容易欠拟合;k值过小,模型更复杂,容易过拟合。

sklearn.model_selection.cross_val_score()实现交叉验证选取k 值。 

  • 分类决策规则

多数表决:新数据点距离最近的数据点的多数类决定新数据点的类别

sklearn.neighbors.KNeighborsClassifier(n_neighbors = 5,
                       weights='uniform',
                       algorithm = '',
                       leaf_size = '30',
                       p = 2,
                       metric = 'minkowski',
                       metric_params = None,
                       n_jobs = None
                       )

 Sklearn 实践酒的分类

 train_test_split函数会生成一个伪随机数,并根据伪随机数对数据集进行拆分。让多次生成的伪随机数相同,方法是通过固定random_state的数值,相同的random_state会一直生成同样的伪随机数。random_state = 0,或不设置,每次生成的伪随机数不同。

from sklearn.datasets import load_wine
data = load_wine()
print('红酒数据集中的keys:\n{}'.format(data.keys()))
X = data.data
y = data.target
X.shape#(178, 13)
y.shape#(178,)
# print(data['DESCR'])#查看数据集详细信息
print(data.target_names)#['class_0' 'class_1' 'class_2']

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state = 0)
X_train.shape,X_test.shape,X_train.shape,y_test.shape
#((133, 13), (45, 13), (133, 13), (45,))

from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors =100).fit(X_train,y_train)
clf.predict(X_test)
print('模型得分为:{:.2f}'.format(clf.score(X_test,y_test)))

import matplotlib.pyplot as plt
from sklearn.model_selection import cross_val_score
k_range = range(1,31)
k_error = []
for k in k_range:
    clf = KNeighborsClassifier(n_neighbors = k).fit(X_train,y_train)
    score = cross_val_score(clf,X,y,cv = 10).mean()
    error = 1 -  score
    k_error.append(error)
    
plt.plot(k_range,k_error,color = 'red')
plt.show()
#K在23左右,误差最小


clf = KNeighborsClassifier(n_neighbors =24).fit(X_train,y_train)
y_predict = clf.predict(X_test)
print('模型得分为:{:.2f}'.format(clf.score(X_test,y_test)))
from sklearn.metrics import classification_report
print (classification_report(y_test, y_predict))

优点:

  • 简单,易于理解,易于实现,无需估计参数,无需训练
  • 适合对稀有事件进行分类
  • 特别适合于多分类问题(multi-modal,对象具有多个类别标签), kNN比SVM的表现要好缺点:

缺点:

  • 当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,导致输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。 该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果
  • 计算量较大 占内存
  • 可理解性差,无法给出像决策树那样的规则
     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习中的k邻近分析是一种常见的分类算法,它可以根据已有的训练数据对未知数据进行分类。对于天猫数据集来说,k邻近分析可以用来推断和预测天猫平台上商品的分类。 首先,我们需要将天猫的数据集进行预处理。这包括数据清洗、特征选择和数据转换等步骤。通过数据清洗,我们可以去除噪音、处理缺失值和异常值,使数据更加可靠。接着,通过特征选择,我们可以从众多特征中选择出最有价值的特征,以便更好地进行分类。最后,通过数据转换,我们可以将数据转化为适合k邻近算法的数据类型。 接下来,我们可以将数据集划分为训练集和测试集。训练集用来构建k邻近分类器,而测试集用来验证分类器的准确性。对于k邻近算法来说,我们需要选择合适的k值,即代表分类使用的最近邻居的数量。根据测试集的结果,我们可以选择最优的k值。 在进行分类之前,我们还需要对训练集进行归一化处理,以消除不同特征之间的量纲差异。常见的归一化方法包括最大-最小缩放和Z-score归一化。 最后,我们可以利用训练好的k邻近分类器对未知数据进行分类。对于天猫数据集来说,我们可以根据商品的相关特征,如品牌、价格、销量等,将其进行分类。通过对分类结果的评估,我们可以判断分类器的准确性和性能。 总结来说,机器学习中的k邻近分析对于天猫数据集的分类问题提供了一种有效的解决方案。通过预处理数据、构建合适的分类器和评估分类性能,我们可以实现对天猫平台上商品分类的预测和推荐。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值