注:这是一篇翻译文章,来自于
Your First Machine Learning Project in Python Step-By-Step - Machine Learning Mastery**,标题为《Your First Machine Learning Project in PythonStep-By-Step》;即一步步带你入门第一个python机器学习项目;包括的内容有:1、python的机器学习需要哪些准备?2、导入数据3、数据的统计描述4、数据的可视化5、用一些算法进行估计6、进行一些预测。
就像作者在文后说的,通过用python做这个项目,不需要知道关于机器学习的专业性内容,只需要按照python代码把结果做出来,能够分析就行。
但是,我认为以机器学习之博大精深,这个项目只是管中窥豹,之所以把这篇文章拿出来,我认为它帮我们初步感受到了python机器学习的一整套基本流程,以及对机器学习的基本印象。
(一)事前的准备(本教程假定Python版本为2.7或3.5。)
在做机器学习之前,要安装5个库:scipy、numpy、matplotlib、pandas、sklearn
这5个库主要是用来进行数值运算、计算、绘图、数据分析以及数据挖掘的库,具体每个库作用及其安装可以去网上搜索就知道了,这点作者也在文中说了一下。
值得注意的是python3版本在windows系统下安装scipy,需要去网站:
Python Extension Packages for Windows**,下载whl文件,然后再去安装。
但是,在这之前,由于Scipy的安装需要依赖MKL库,官方的Numpy不包含MKL,故从Python Extension Packages for Windows** 下载合适版本的包含MKL库的第三方Numpy+mkl库,然后在cmd下进入到Python安装目录下的scripts文件下使用 pipinstall 路径+whl文件来安装(具体可以去搜索一下)。
对于sklearn库的安装,如果你已经安装了scipy、numpy库,直接在cmd下采用升级的方式安装,这是因为sklearn建立在NumPy,SciPy和matplotlib模块之上:
pip install -U scikit-learn
检查安装的库是否成功及其版本
# Check the versions of libraries
# Python version
import sys
print('Python: {}'.format(sys.version))
# scipy
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
# matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
# pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
# scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__))
(二)导入数据
导入库
# Load libraries
import pandas
from pandas.tools.plotting import scatter_matrix #导入散点图矩阵包
import matplotlib.pyplot as plt
from sklearn import model_selection #模型比较和选择包
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.neighbors import KNeighborsClassifier #导入最近邻算法中的KNN最近邻分类包
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis #判别分析算法中的线性判别分析包
from sklearn.naive_bayes import GaussianNB #朴素贝叶斯中的高斯朴素贝叶斯包
from sklearn.svm import SVC #支持向量机算法中的支持向量分类包
上述导入各种程序包主要来自于sklearn的包,具体可以参见
http://scikit-learn.org/dev/index.html
对python机器学习中sklearn各种包的介绍。
接下来再导入数据.
# Load dataset
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = pandas.read_csv(url, names=names) #读取csv数据
注:这里是从某一网页导入数据,但是如果网页打不开很可能就导入不了,事实上,在python的sklearn数据库中自带鸢尾花数据集,在这里可以通过sklearn导入。
from sklearn import datasets
iris = datasets.load_iris()
(三)数据的描述性统计
这一步主要是对数据的结构、变量等进行初步了解,包括对数据的维度(样本量、变量个数等)进行了解、详细考察数据本身、所有属性的描述性统计、按照不同类别对数据进行细分。
首先是对数据的维度(样本量、变量个数等)进行了解。
# shape
print(dataset.shape)
输出结果为:(150, 5),即该数据有150个样本值以及5个变量(属性)。
其次是详细考察数据本身。
# head
print(dataset.head(20))
你将会看到前20行数据:
通过数据信息简单介绍一下注明的“鸢尾花数据集”:
鸢尾花(iris)是数据挖掘常用到的一个数据集,包含150种鸢尾花的信息,每50种取自三个鸢尾花种之一(setosa,versicolour或virginica)。每个花的特征用下面的5种属性描述萼片长度(Sepal.Length)、萼片宽度(Sepal.Width)、花瓣长度(Petal.Length)、花瓣宽度(Petal.Width)、类(Species)。
第三是,数据所有属性的描述性统计。
# descriptions
print(dataset.describe())
可以看到如下结果,分别表示4个属性的样本值、均值、标准误、最小值、25%分位数、中位数、75%分位数、最大值。
第四是,不同类别的数据细分。
# class distribution
print(dataset.groupby('class').size())
可以看到,Iris-setosa、Iris-versicolor、Iris-virginica三大类样本值均有50个。
(四)数据的可视化
数据可视化可以更好地了解数据。在这里通过两种图形类型:单变量图来更好了解每个属性;多变量图来更好了解每个属性间关系。
4.1 单变量图
首先是盒须图(箱形图)
# box and whisker plots
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
plt.show()
在这里注意各个箱形图的纵坐标(y轴)的刻度是不同的,有明显的区分,因此可以看到,各变量表示的属性是有区分的。
然后是直方图
# histograms
dataset.hist()
plt.show()
在这里横坐标的坐标轴是有区分的。
4.2 多变量图(也就是图矩阵)
散点图矩阵,这有助于发现变量之间的结构化关系,在这里特别要注意观察两变量间(变量对)基于对角线的关系,这表明变量之间的相关性与可预测关系(散点图代表了两变量的相关程度,如果呈现出沿着对角线分布的趋势,说明它们的相关性较高)。
# scatter plot matrix
scatter_matrix(dataset)
plt.show()
![Upload 散点图矩阵.jpg failed. Please try again.]
未完待续。。。
本文完整代码见:https://github.com/zhangjuying20000/iris-machine-learning