手把手教你K最近邻算法项目实战——酒的分类

K最邻算法的原理:
简单来说就是“近朱者赤,近墨者黑。”
K最近算法也可以用于回归,原理和其用于分类是相同的。当我们使用K最近邻回归计算某的数据点的预测值时,模型会选择离该数据点最近的若干个训练数据集的中的点,并且将它们的y值取平均值,并把该平均值作为新数据点的预测值。
1.对数据集进行分析
在本节中,我们将使用scikit-learn内置的酒数据来进行实验。
首先导入数据集:

from sklearn.datasets import load_wine
wine=load_wine() #实例化对象
print('红酒数据集中的键:\n{}'.format(wine.keys())) #查看数据集中的键
print('数据概况:\n{}'.format(wine['data'].shape)) #查看数据概况

手把手教你K最近邻算法项目实战——酒的分类_第1张图片

2.生成训练数据集和测试数据集:
在sk-learn中,有一个train_test_split函数,它是用来帮助用户把数据集拆分的工具。
默认为百分之75的训练数据集,剩下百分之25的测试数据集。
我们一般用X来表示数据的特征,y来表示数据对应的标签。这是因为X是一个二维数组,也称为矩阵,而y是一个一维数组,或者说是一个向量。

from sklearn.model_selection import train_test_split
X=wine['data']
y=wine['target']
x_train,x_test,y_train,y_test=train_test_split(X,y,random_state=1)
#拆分数据集

同样可以通过shape方法来查看数据集的大概情况。这里就不一一查看了。
3.使用K最近邻算法进行建模。

#导入KNN分类模型
from sklearn.neighbors import KNeighborsClassifier
#指定模型的n_neighbors=1
knn=KNeighborsClassifier(n_neighbors=1)
knn.fit(x_train,y_train)
print('knn在测试集得分:{}'.format(knn.score(x_test,y_test)))

请添加图片描述
测试集上的得分为0,711,满分是1,吻合度越高,得分越高,只能说这个得分差强人意。
4.对新酒做出分类预测

import numpy as np
#输入新的数据点
X_new=np.array([[13.2,2.77,2.51,18.5,86.6,1.04,2.55,0.57,1.47,6.2,1.05,3.33,820]])
#使用.predict进行预测
prediction=knn.predict(X_new)
print('预测的新红酒的分类为:{}'.format(wine['target_names'][prediction]))

请添加图片描述

5.小结
K最近邻算法可以说是一个非常经典而且原理十分容易理解的算法,不过K最近邻算法在实际使用当中会有很多问题,例如它需要对数据集认真地进行预处理,对规模超大的数据集拟合时间较长,对高维数据集拟合欠佳,以及对于稀疏数据集的束手无策等。所以其实在当前的各种常见场景中,KNN算法的使用并不多见。

你可能感兴趣的:(机器学习,算法,sklearn,python,机器学习)