视频教程:【莫烦Python】Scikit-learn (sklearn) 优雅地学会机器学习
首先从安装sklearn入手,我用的是python3.7,需要安装numpy和scipy,安装之后,就可以用sklearn自带的数据了,就用它自带的鸢尾花了
程序示例(我是用Pycharm运行的):
import numpy as np
from sklearn import datasets##从sklearn数据库导入数据
from sklearn.model_selection import KFold
from sklearn.model_selection import train_test_split##从sklearn数据库导入函数
from sklearn.neighbors import KNeighborsClassifier##从sklearn数据库导入算法,K邻近分类
iris=datasets.load_iris()##导入鸢尾花数据
iris_X=iris.data##花的属性存在data里面
iris_Y=iris.target##花的分类在target里面
print(iris_X[:2,:]) ##打印出iris的属性,2个
输出结果:
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]]
有花的4种属性,可能是花的大小什么的,不是很懂。
再看看他的分类:
print(iris_Y)##花的分类
输出结果:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
0代表一类,1代表一类,2代表一类
我们要去学习花的四个属性搭配上他的类别,会预测出新的东西
这个函数分出了我们的用于学习的data和测试的data,测试数据比例占30%,训练数据占70%,这些数据被分成两部分的好处是他们不会互相影响
X_train,X_test,Y_train,Y_test=train_test_split(iris_X,iris_Y,test_size=0.3)##train_data:所要划分的样本特征集 train_target:所要划分的样本结果 test_size:样本占比,如果是整数的话就是样本的数量
print(Y_train)#看看他的类别
输出结果:
[2 1 1 1 0 0 1 0 2 1 1 2 0 0 0 1 0 1 0 2 1 1 0 2 2 2 1 0 2 1 1 2 1 1 1 2 0
1 2 0 0 1 1 0 0 2 2 2 1 2 0 2 1 0 1 0 1 0 2 2 1 0 0 1 0 0 0 1 1 0 2 2 0 1
0 2 1 1 2 2 2 2 0 2 1 0 0 0 1 2 0 1 1 2 2 1 2 2 1 2 2 2 0 2 0]
这里的数据是被打乱的,可以在机器学习过程中不会有排列在一起的影响
利用K邻近算法进行机器学习
下面进行分类:
knn=KNeighborsClassifier()##机器学习命令
knn.fit(X_train,Y_train)##这个函数帮助我们完成学习的步骤,所有training在这一步进行
print(knn.predict(X_test))##机器预测测试数据结果,这里的knn已经训练完了
print(Y_test)##之前的真实数据
输出结果:
[2 1 0 0 0 0 2 0 2 1 0 2 2 0 0 1 0 1 2 0 1 2 2 0 0 1 2 0 1 1 2 0 1 2 1 2 0
2 2 0 0 1 0 2 2]
[2 1 0 0 0 0 1 0 2 1 0 2 2 0 0 1 0 1 2 0 1 2 2 0 0 1 2 0 1 1 2 0 1 2 1 2 0
2 2 0 0 1 0 2 2]
结果出现1-2位不同,预测得很好,机器学习只能大概模拟出数据,不能完全还原真实数据