Sklearn——用Sklearn实现K近邻分类(KNN)

1.前言

Sklearn 把所有机器学习的模式整合统一起来了,学会了一个模式就可以通吃其他不同类型的学习模式。

例如,分类器,
Sklearn 本身就有很多数据库,可以用来练习。 以 Iris 的数据为例,这种花有四个属性,花瓣的长宽,茎的长宽,根据这些属性把花分为三类。
我们要用分类器去把四种类型的花分开。

KNN classifier,就是选择几个临近点,综合它们做个平均来作为预测值。

2.KNN实战

2.1.导入必要模块

from sklearn import datasets       #导入数据模块
from sklearn.model_selection import train_test_split     #导入切分训练集、测试集模块
from sklearn.neighbors import KNeighborsClassifier

2.2.加载数据

加载 iris 的数据,把属性存在 X,类别标签存在 y:

iris = datasets.load_iris()
iris_x = iris.data
iris_y = iris.target

观察一下数据集,X 有四个属性,y 有 0,1,2 三类:

print(iris_x)
print(iris_y)

把数据集分为训练集和测试集,其中 test_size=0.3,即测试集占总数据的 30%:

x_train, x_test , y_train, y_test = train_test_split(iris_x, iris_y, test_size = 0.3)
print(y_train)
print(y_test)

#输出
[1 0 0 1 1 1 2 2 0 2 1 1 1 1 1 1 2 1 0 0 2 2 0 1 2 2 1 2 0 2 2 0 0 1 1 2 1
 2 0 0 1 0 0 0 2 2 0 0 2 1 0 0 0 1 1 1 0 0 2 0 0 2 2 1 0 2 2 1 2 1 1 0 1 2
 2 2 0 2 1 2 2 0 2 1 2 2 1 2 1 2 0 1 2 2 0 1 2 1 1 0 0 0 2 1 0]
[0 2 0 0 0 0 1 0 1 0 1 2 2 0 1 2 1 2 1 0 1 2 2 0 0 0 2 1 1 1 0 0 2 2 0 2 0
 1 1 2 0 1 1 1 2]

可以看到分开后的数据集,顺序也被打乱,这样更有利于学习模型:

2.3.训练+预测

定义模块方式 KNeighborsClassifier(), 用 fit 来训练 training data,这一步就完成了训练的所有步骤, 后面的 knn 就已经是训练好的模型,可以直接用来 predict 测试集的数据, 对比用模型预测的值与真实的值,可以看到大概模拟出了数据,但是有误差,是不会完完全全预测正确的。

knn = KNeighborsClassifier()    #实例化KNN模型
knn.fit(x_train, y_train)      #放入训练数据进行训练
print(knn.predict(x_test))           #打印预测内容
print(y_test)     #实际标签
#可见只有一个没有预测正确
发布了182 篇原创文章 · 获赞 535 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_37763870/article/details/105160899