机器学习项目1(鸢尾花分类)

目录
0、先对需要安装的库进行版本检测
1、导入数据
1.1 导入需要的库:
1.2 导入数据集
2、概括数据
2.1 查看数据
2.2 查看数据的维度
2.3 统计描述数据
2.4 数据分类分布
3 数据可视化
3.1 单变量图表
3.2 多变量图表
4 评估算法
4.1 分离训练集
4.2 评估模型
4.3 创建模型
5实施预测
0、先对需要安装的库进行版本检测 输入如下命令:

import sys import scipy import numpy import matplotlib import pandas import sklearn import IPython print('python version:{}'.format(sys.version)) print('scipy version:{}'.format(scipy.__version__)) print('numpy version:{}'.format(numpy.__version__)) print('matplotlib version:{}'.format(matplotlib.__version__)) print('pandas version:{}'.format(pandas.__version__)) print('sklearn version:{}'.format(sklearn.__version__)) print('IPython version:{}'.format(IPython.__version__))

测试后输出为:
python version:3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)] scipy version:1.6.2 numpy version:1.20.1 matplotlib version:3.3.4 pandas version:1.2.4 sklearn version:0.24.1 IPython version:7.22.0

只要不报错,正常输出,就代表安装成功。
机器学习数据处理的步骤:
(1)导入数据
(2)概括数据
(3)数据可视化
(4)评估算法
(5)实施预测
1、导入数据 鸢尾花数据集属于有监督数据集,数据包括:花瓣的长度、宽度以及花萼的长度、宽度。所有花隶属于setosa、versicolor和virginica三个品种之一。这是一个典型的三分类问题。
机器学习项目1(鸢尾花分类)
文章图片

鸢尾花(iris)数据集是机器学习和统计学中一个经典的数据集。它包含在scikit-learn的datasets模块中。
导入数据的命令:
# 导入iris数据集 from sklearn.datasets import load_iris iris_dataset=load_iris()

也可以下载数据集然后导入的方式进行。
可以在UCI机器学习仓库下载鸢尾花数据集:
https://archive.ics.uci.edu/ml/datasets/Iris
机器学习项目1(鸢尾花分类)
文章图片

我们通过第二种办法导入数据。下载的数据为iris.data,将data后缀改为CSV格式。名称为iris.data.csv.
1.1 导入需要的库:
#导入需要的类库 #用pandas读取外部文件 from pandas import read_csv #绘制散点图 from pandas.plotting import scatter_matrix #绘图 from matplotlib import pyplot #sklearn分类需要的类 from sklearn.model_selection import train_test_split from sklearn.model_selection import KFold #交叉验证 from sklearn.model_selection import cross_val_score from sklearn.metrics import classification_report from sklearn.metrics import confusion_matrix #打分 from sklearn.metrics import accuracy_score #逻辑回顾算法 from sklearn.linear_model import LogisticRegression #决策树 from sklearn.tree import DecisionTreeClassifier # from sklearn.discriminant_analysis import LinearDiscriminantAnalysis #K近邻算法 from sklearn.neighbors import KNeighborsClassifier #贝叶斯 from sklearn.naive_bayes import GaussianNB #支持向量机SVM from sklearn.svm import SVC

1.2 导入数据集 代码如下:
#导入数据,括号内为数据位置 filename='iris.data.csv' #names是给数据命名 names=['separ-length','separ-width','petal-length','petal-width','class'] #读入csv文件,使用pandas读入数据 dataset=read_csv(filename,names=names)

2、概括数据 数据导入后,我们急需要知道数据的信息。
可以从以下几个角度审查数据:
(1)查看数据;
(2)数据的维度;
(3)统计描述所有的数据特征;
(4)数据分类的分布情况。
2.1 查看数据 代码如下:
#查看数据前五行 dataset.head()

输出为:

机器学习项目1(鸢尾花分类)
文章图片

2.2 查看数据的维度 代码:
#查看数据维度 print('数据维度:行 %s,列 %s' % dataset.shape)

执行结果:
数据维度:行 150,列 5

2.3 统计描述数据 数据特征的统计描述信息包括数据的行数、中位数、最大值、最小值、均值、四分位值等统计数据信息。
代码
#统计描述数据信息 print(dataset.describe())

执行结果:
机器学习项目1(鸢尾花分类)
文章图片

2.4 数据分类分布 查看class数据的分布情况,得到的是数据的绝对数值,从数据可以看出数据分布是否均衡。
代码:
#分类分布情况 print(dataset.groupby('class').size())

执行结果:
机器学习项目1(鸢尾花分类)
文章图片

鸢尾花数据集分布是很平衡的,不需要特殊处理。如果数据分布不平衡时,需要进行处理,常用的调整数据平衡的方法:
  • 扩大数据样本;
  • 数据的重新抽样;当数据超过一万条时,可以考虑测试欠抽样(删除多数类样本),当数据量比较少时可以考虑过抽样(复制少数类样本);
  • 尝试生成人工样本;
  • 异常检测和变化检测。
3 数据可视化 经过第2步数据审查后,对数据有了一个基本的了解,接下来用更直观的图标来进一步查看数据特征的分布情况。
  • 使用单变量图表可以更好地理解买一个特征属性;
  • 多变量图表用于理解不同特征属性之间的关系。
3.1 单变量图表 单变量图表可以显示每一个单独的特征属性,由于特征值都是数字,可以使用箱线图来表示属性与中位值的离散速度。
代码:
#箱线图 dataset.plot(kind='box',subplots=True,layout=(2,2),sharex=False,sharey=False) pyplot.show()

执行结果:
机器学习项目1(鸢尾花分类)
文章图片

也可以绘制直方图。
代码:
#直方图 dataset.hist() pyplot.show()

执行结果:
机器学习项目1(鸢尾花分类)
文章图片

从直方图可以看出,separ-length和separ-width基本符合高斯分布。
3.2 多变量图表 可以通过散点矩阵图来查看每个属性之间的关系。
代码:
#散点矩阵图 scatter_matrix(dataset) pyplot.show()

执行结果:
机器学习项目1(鸢尾花分类)
文章图片

从多变量图大概能看出特征量之间的关系。
4 评估算法 将数据集代入各种算法训练,找出最合适的算法。
步骤如下:
(1)分离训练集;
(2)采用10折交叉验证来评估算法模型;
(3)生成6个不同的模型来预测新数据;
(4)选择最优模型。
4.1 分离训练集 一般分出数据集的80%作为训练集,剩下的20%用来作为测试集。
代码如下:
#分出训练集 array=dataset.values X=array[:,0:4] Y=array[:,4] validation_size=0.2 seed=7 X_train,X_validation,Y_train,Y_validation=train_test_split(X,Y,test_size=validation_size,random_state=seed) X_train.shape

执行结果:
机器学习项目1(鸢尾花分类)
文章图片

【机器学习项目1(鸢尾花分类)】鸢尾花总数150个,训练集120个,测试集30个。分离成功。
4.2 评估模型 用10折交叉验证来分离训练数据集,评估算法的准确度。10折交叉验证是随机地将数据分成10份:9份用来训练模型,1份用来评估算法。
4.3 创建模型 根据散点图可以看出,有些数据符合线性分许,所以可以用线性模型来评估。
用六种算法来评估:
  • 线性回归(LR);
  • 线性判别分析(LDA);
  • K近邻(KNN);
  • 分类与回归树(CART);
  • 贝叶斯分类器(NB);
  • 支持向量机(SVM)。
其中,LR和LDA为线性算法,剩下的都为非线性算法。
#算法审查 models={} models['LR']=LogisticRegression() models['LDA']=LinearDiscriminantAnalysis() models['KNN']=KNeighborsClassifier() models['CART']=DecisionTreeClassifier() models['NB']=GaussianNB() models['SVM']=SVC() #评估算法 results=[] for key in models: kfold=KFold(n_splits=10,random_state=seed,shuffle=True) cv_results=cross_val_score(models[key],X_train,Y_train,cv=kfold,scoring='accuracy') results.append(cv_results)

执行结果:
机器学习项目1(鸢尾花分类)
文章图片

#箱线图比较算法 fig=pyplot.figure() fig.suptitle('Algorithm Comparison') ax=fig.add_subplot(111) pyplot.boxplot(results) ax.set_xticklabels(models.keys()) pyplot.show()

执行结果为:
机器学习项目1(鸢尾花分类)
文章图片

5实施预测 LR、KNN、SVM得分比较高,用这三个分别进行测试。
#使用评估数据集评估算法 svm=SVC() svm.fit(X=X_train,y=Y_train) predictions=svm.predict(X_validation) print(accuracy_score(Y_validation,predictions)) print(confusion_matrix(Y_validation,predictions)) print(classification_report(Y_validation,predictions))

SVM的执行结果:
机器学习项目1(鸢尾花分类)
文章图片

LR的执行结果:
机器学习项目1(鸢尾花分类)
文章图片

KNN的执行结果:
机器学习项目1(鸢尾花分类)
文章图片

从结果可以看出,KNN在测试集中的得分更好一些。

    推荐阅读