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) #实际标签
#可见只有一个没有预测正确