想用 python 做机器学习吗, 是不是在为从哪开始挠头?
这里我假定你是新手, 这篇文章里咱们一起用 Python 完成第一个机器学习项目.
我会手把手教你以下内容:
? 下载 python,numpy,SciPy 之类软件并安装, 这些是 python 里机器学习方面最有用的软件包.
? 加载一个数据集, 通过统计摘要 (statistical summaries) 和数据可视化来了解数据集的结构.
? 创建 6 个机器学习模型, 选择这里边最好的, 然后介绍通过何种方法来确定选出来的模型预测时有稳定的准确率.
如果你是机器学习的初学者, 并且你下定决心用 python 作为开始机器学习的语言的话, 这篇文章应该会比较适合你.
刚开始的时候, Python 看起来有点吓人
Python 是一种很流行, 很强大的解释型语言. 跟 R 不一样, 对于研究, 开发以及完成生产系统来说, python 是一个完整的开发语言, 一个完整的平台.
Python 中也有许多可供选择的模块和库, 对于上面说的研究, 开发和完成生产系统提供了多种实现的路径. 给人的感觉是 python 的前景势不可挡.
再次重申, 用 Python 学习机器学习的最好方法是完成一个完整的项目.
? 这样做强制你安装 Python, 并且启动 python 的解释器(最少会这样).
? 这样做能给你一个整体审视的机会, 体验如何一步步完成一个小项目.
? 这样做能给你自信, 让你有信心启动自己的小项目.
初学者需要一个从头到尾完成的项目
相关的书和这方面的课程很多, 但是往往会让人产生挫折感. 它们会给你很多的问题解决方法和代码片段, 但是你很难体会到它们是如何被整合到一起的.
当你把机器学习算法应用到自己的数据集的时候, 你就是在进行一个完整的项目.
一个机器学习项目可能不是像下面介绍的那样一步步按顺序完成, 但是机器学习项目确实有着一些众所周知的步骤:
? 定义问题
? 准备数据
? 评估算法
? 改进结果
? 提交结果
熟悉一个新的平台或者一个新的工具最好的方式就是从头到尾踏实的完成一个机器学习项目, 实践上述的所有关键步骤. 也就是说, 实际动手加载数据, 统计数据, 评估算法, 然后做一些预测.
如果你这么做了, 你就有了一个模板, 这个模板是可以很容易应用到一个又一个数据集上的. 一旦你建立了自信, 你就可以进一步完善上述关键步骤, 比如说进行进一步的数据准备和结果改善.
机器学习的 Hello World
使用 python 开始机器学习最好的小项目是鸢尾花 (yuan wei hua, 英文 iris, 别跟虹膜弄混) 的分类问题.(下载链接在此)
这个项目是个好项目, 最好就在于它简单易懂.
? 鸢尾花的属性都是数值类型, 让我们很容易想到怎么来加载数据, 处理数据.
? 这是个分类问题, 让我们能实践机器学习中一种相对简单的算法 -- 监督学习算法.
? 这是个多分类问题(不是只分成两类也就是不是二分类), 要求有特殊的处理.
? 这个数据集只有 4 个属性, 150 行数据, 意味着数据集极小, 用内存就能轻松搞定(也便于用屏幕显示或者直接用 A4 纸打印)
? 所有的数值属性都是相同单位, 相同尺度, 不需要任何的缩放和转换就能直接着手开始.
python 机器学习手把手教程(这回是真开始)
这一节中, 我们开始介绍怎样从头到尾完成一个小项目.
说一下我们要完成的各个步骤:
? 安装 python 和 Scipy 平台
? 加载数据集
? 计算数据集中的各种统计量.
? 数据集可视化
? 在数据集上应用一些算法并评估
? 进行预测
要走完每一步, 需要一些时间.
建议自己动手输入涉及到的一些命令, 或者也可以用复制粘贴来加快速度, 总之动手就比只看不做强.
1. 下载安装 python 和 Scipy 平台
如果你事先没有安装过标题中的工具, 请安装. 这里不想非常细致的介绍安装过程, 这种介绍很多. 如果你是开发人员, 安装软件包之类对你而言都很简单.
1.1 安装 SciPy 库
这里预设的 python 版本是 2.7 和 3.5. 这两个版本以上的版本也应该完全没有问题.
需要安装的比较关键的库有 5 个. 下面是本文中安装 Python SciPy 库时需要安装的内容:
- Scipy
- Numpy
- Matplotlib
- Pandas
- Sklearn
安装这些库有很多方法. 我的建议是选择一种方法然后一直坚持这种方法来安装上述的所有软件包.
给安装上述库提供了非常好的指导. 链接里说明了在不同平台 (比如 Linux,Mac OS X 和 Windows) 上如何安装. 如果有任何问题, 那么请参考链接中的做法, 数千人这么有过相同经历.
在 Mac OS X 中, 可以用 macport 来安装 python2.7 和这些库. Macport 的信息, 参见其主页.
Linux 里可以用安装包管理器, 比如 Fedora 的 yum 来安装 RPMs.
如果你用 Windows, 或者你也不是太确定自己的系统, 我推荐安装免费软件 Anaconda. 里边预装了你需要的东西.
注意: 这里要求你安装的 scikit-learn 的版本为 0.18 或者以上版本.
1.2 启动 python, 检查已安装版本
安装完成后最好确认一下你的 python 环境是不是能正常工作.
下面是检测环境用的脚本. 其中 import 我们用到的每个库, 并输出版本号.
打开命令行, 启动 python 解释器
Python
我推荐直接在解释器里输入下面脚本, 或者自己写好版本然后在命令行运行, 而不是在一个大的编辑器或者 IDE 里运行. 尽量让事情简单化, 确保注意力关注在机器学习上而不是各种工具链上.
脚本如下:
- # Checkthe versions of libraries
- #Python versionimport sysprint('Python: {}'.format(sys.version))# scipyimport scipyprint('scipy: {}'.format(scipy.__version__))# numpyimport numpyprint('numpy: {}'.format(numpy.__version__))#matplotlibimport matplotlibprint('matplotlib: {}'.format(matplotlib.__version__))#pandasimport pandasprint('pandas: {}'.format(pandas.__version__))#scikit-learnimport sklearnprint('sklearn: {}'.format(sklearn.__version__))
下面为我本地的输出:
- Python: 2.7.11 (default, Mar 1 2016, 18:40:10)
- [GCC 4.2.1 Compatible Apple LLVM 7.0.2(clang-700.1.81)]
- scipy: 0.17.0
- numpy: 1.10.4
- matplotlib: 1.5.1
- pandas: 0.17.1
- sklearn: 0.18.1
比较一下你的输出. 理想情况下如果你的版本跟上面的相同或者更高, 就没问题. 这些库里的 API 不会频繁变更. 如果你的版本比上面的略高, 这个教程里的东西应该对你仍然适用.
如果出错, 请想办法更正.
如果你不能够清晰的运行以上的脚本, 那么你将无法完成本教程.
建议去 Google 搜索一下你的错误信息, 或者在 Stack Exchange 上提问.
2. 加载数据
我们将用到鸢尾花数据集. 这个数据集很著名, 因为这就是我们机器学习界和统计学界的 "Hello world" 数据集.
数据集中包含对鸢尾花的 150 次观测. 数据集中有 4 列, 都是花的一些尺寸数据, 单位是厘米. 第 5 列是观测结果, 也就是花的种类. 所有观测到的花都属于 3 种鸢尾花中的一种.
下一步我们将从 CSV 文件的 URL 中加载鸢尾花数据.
2.1 Import 库
首先 import 所有在本教程中将要用到的程序模块, 函数和对象.
# Loadlibrariesimport pandasfrom pandas.tools.plottingimport scatter_matriximport matplotlib.pyplotas pltfrom sklearn import model_selectionfrom sklearn.metrics import classification_reportfrom sklearn.metrics import confusion_matrixfrom sklearn.metrics import accuracy_scorefrom sklearn.linear_modelimport LogisticRegressionfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.neighborsimport KNeighborsClassifierfrom sklearn.discriminant_analysisimport LinearDiscriminantAnalysisfrom sklearn.naive_bayesimport GaussianNBfrom sklearn.svm import SVC
每个程序都应该正常 import. 如果出错, 你需要重新安装 python+Scipy 环境.
(看一下上面关于环境安装方面的一些建议)
2.2 加载数据
我们可以直接从 UCI 机器学习资源库 (repository) 加载数据.
我们用 pandas 来加载数据. 我们之后也会用 pandas 来探究描述数据的各种统计值, 以及进行数据可视化.
注意我们加载数据的时候给定了每列的名称. 这一点有助于我们之后探究发掘数据的特点.
- # Loaddataset
- 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)
数据集应该毫无意外的被加载.
如果你的网络有问题, 你可以先下载鸢尾花数据集, 然后把它放在工作路径中. 加载方法跟上面的一样, 只不过需要把 URL 换成本地文件名.
3. 数据集总结
现在是时候看一下我们的数据集了.
当前步骤中我们从不同的角度观察数据.
1. 数据维度
2. 窥视数据本身
3. 所有属性的统计概要
4. 按分类变量细分数据
上边的几种方法貌似深奥, 其实不必担心, 每次观察数据只需要一个命令. 在未来的项目中这些命令可能会被再三的使用.
3.1 数据维度
我们通过查看数据集的模型特征, 就能迅速知道数据集中包含了多少数据实例 (也就是行) 和多少属性(也就是列).
- # shape
- print(dataset.shape)
看到有 150 个实例, 5 个属性:
(150, 5)
3.2 管窥数据
实际地仔细观察数据向来都是好办法.
- # head
- print(dataset.head(20))
可以看到数据的先头 20 行:
- sepal-length sepal-width petal-length petal-width class
- 5.1 3.5 1.4 0.2 Iris-setosa
- 4.9 3.0 1.4 0.2 Iris-setosa
- 4.7 3.2 1.3 0.2 Iris-setosa
- 4.6 3.1 1.5 0.2 Iris-setosa
- 5.0 3.6 1.4 0.2 Iris-setosa
- 5.4 3.9 1.7 0.4 Iris-setosa
- 4.6 3.4 1.4 0.3 Iris-setosa
- 5.0 3.4 1.5 0.2 Iris-setosa
- 4.4 2.9 1.4 0.2 Iris-setosa
- 4.9 3.1 1.5 0.1 Iris-setosa
- 5.4 3.7 1.5 0.2 Iris-setosa
- 4.8 3.4 1.6 0.2 Iris-setosa
- 4.8 3.0 1.4 0.1 Iris-setosa
- 4.3 3.0 1.1 0.1 Iris-setosa
- 5.8 4.0 1.2 0.2 Iris-setosa
- 5.7 4.4 1.5 0.4 Iris-setosa
- 5.4 3.9 1.3 0.4 Iris-setosa
- 5.1 3.5 1.4 0.3 Iris-setosa
- 5.7 3.8 1.7 0.3 Iris-setosa
- 5.1 3.8 1.5 0.3 Iris-setosa
3.3 所有属性的统计概要
现在我们可以看一下每个属性的统计概要.
这里包括总数, 均值, 最小值, 最大值以及一些百分比.
- # descriptions
- print(dataset.describe())
我们能看到所有的数值量都有相同的尺度(厘米), 相似的区间, 也就是 0~8 厘米之间.
- sepal-length sepal-width petal-length petal-width
- count 150.000000 150.000000 150.000000 150.000000
- mean 5.843333 3.054000 3.758667 1.198667
- std 0.828066 0.433594 1.764420 0.763161
- min 4.300000 2.000000 1.000000 0.100000
- 25% 5.100000 2.800000 1.600000 0.300000
- 50% 5.800000 3.000000 4.350000 1.300000
- 75% 6.400000 3.300000 5.100000 1.800000
- max 7.900000 4.400000 6.900000 2.500000
3.4 类别分布
让我们观察一下属于每一类的实例 (行) 的个数. 我们把这个个数看成一个绝对数.
- # classdistribution
- print(dataset.groupby('class').size())
我们能看到每个种类包含相同数目的实例(50 个, 或者说每个占总数的 33%)
- class
- Iris-setosa 50
- Iris-versicolor 50
- Iris-virginica 50
4. 数据可视化
现在我们对数据有了一个基本认识. 我们需要在此基础上用可视化的方法, 进一步加深我们的认识.
我们将介绍两种绘图方法:
1. 单变量绘图, 用来更好的理解每个属性.
2. 多变量绘图, 用来更好的理解属性之间的关系.
4.1 单变量绘图
我们先了解一下单变量的绘图, 也就是用每个单独变量来绘图.
如果输入变量是数值型的, 我们可以绘制每一个输入变量的箱线图(box and whisker plots).
- # boxand whisker plots
- dataset.plot(kind='box',subplots=True,layout=(2,2), sharex=False, sharey=False)
- plt.show()
这能让我们更清晰的了解输入属性的分布情况.
来源: http://www.bubuko.com/infodetail-3384470.html