鸢尾花的分类是python机器学习中比较经典的一个入门式教学课程,
属于监督学习算法
包括四个方面,训练,测试,评估,预测
此次记录也适合从这四个方面出发
一:训练
利用已知的鸢尾花数据构建机器学习模型,用于预测新测量的鸢尾花的品种。
鸢尾花的数据哪里来呢?有一个开源项目叫做sciket-learn,里面有鸢尾花的150个数据集。
1.1安装sciket-learn
pip install sciket-learn
1.2安装必要的工具和库文件
pip install numpy scipy matplotlib ipython pandas
直接使用命令安装上述都是默认安装最新版本的软件,我这里安装完之后的版本分别是:
pandas:0.23.4 修改和操作表格的
matplotlib:2.2.3 将数据绘制成图像的
Numpy:1.15.2 用来科学计算的,就是将数据变换成自己想要的格式
SciPy:1.1.0 功能和Numpy差不多
IPython:5.8.0 没什么用
scikit-learn:1.1.0 导入鸢尾花数据的
1.3分配数据
上代码:
#coding=utf-8 import numpy as np from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris #导入三个库 iris_dataset = load_iris() #加载iris_dataset数据集 trainData,testData,trainResult,testResult = train_test_split(iris_dataset["data"],iris_dataset["target"],random_state = 0) #train_test_split函数将iris_dataset数据集中的['data']数据依据['target']标签分类为75%的训练集和25%的测试集。 #iris_dataset是一个字典类型的数据,有用6个key和对应的值,其中key分别为:['target', #'DESCR', 'target_names', 'feature_names', 'data', 'filename'] #可以尝试iris_dataset.keys()和iris_dataset.values()查看相应的数据,比如查看target_names标签对应的值可以写作:iris_dataset['target_names']
1.4构建算法
from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors = 1) knn.fit(trainData,trainResult) #K近邻算法:算法会在训练集中寻找与这个新数据点距离最近的k个邻居,根据他们的类别做出预测。 #这里让knn进行大量的训练,拥有大量数据的累积后,使得knn拥有了一定预测新数据类型的能力。
二:测试与评估
此时的knn今时不同往日了,训练了那么多,是时候试试水了,但是不能贸然拿去用吧,还是先用测试集测试一下,刚刚分配数据集的时候不是还分配了25%的数据用来测试吗。试一试
testPrediction = knn.predict(testData) #testData这些数据的类型是已知的---testResult,里面包含的是testData真实的结果,我们拿预测的结果和真实结果比对一下,就可以知道这个算法的预测准确的能力了吧。试一试 print "Test set score is :{:.2f}".format(np.mean(testPrediction == testResult)) #这样可以打印出testPrediction和testResult之间的差异比例
三:预测
用一组新的数据来试一试
newIRIS = [[5,2.0,1,0.2]] #四个数据分别代表:花萼长度,花萼宽度,花瓣长度,花瓣宽度 #为什么用两个中括号括起来呢?因为knn.predict的数据数据必须是一个二维数组 a = knn.predict(newIRIS) print a