1. 机器学习基础知识
传统的数据分析旨在回答关于过去的事实,机器学习的目的是回答关于未来事件的可能性的问题。
- 基于过去的事实和数据,用来发现趋势和模式
- 机器学习模型提供了对于结果的洞察力,机器学习帮助揭示未来的一个结果的概率而不仅仅是过去发生的事情
- 历史的数据和统计建模被用于概率进行预测
1.1 机器学习的方式
-
有监督学习(分类、回归) 同时将数据样本和标签输入给模型,模型学习到数据和标签的映射关系,从而对新数据进行预测。
-
无监督学习(聚类) 只有数据,没有标签,模型通过总结规律,从数据中挖掘出信息。
-
强化学习 强化学习会在没有任何标签的情况下,通过先尝试做出一些行为得到一个结果,通过这个结果是对还是错的反馈,调整之前的行为,就这样不断的调整,算法能够学习到在什么样的情况下选择什么样的行为可以得到最好的结果。
1.2 机器学习的方法及流程
- 选择输入特征:基于什么进行预测?
- 确定目标:预测什么?
- 分析预测功能:回归、聚类、降维…
机器学习的流程如下图所示,包括将数据集随机按比例分割为训练数据集(train set)、验证数据集(validation set)和测试数据集(test set)。通过交叉验证(cross-validation)方法,即在多个训练数据集上训练模型,而且在多个验证集上验证该模型,从而得到多个模型;而后用判定条件选择折中的一个模型,该模型即为最终预测模型。最终模型应用于测试数据集上,该模型在从未遇到的测试数据集即可作为今后该模型可能会遇到的一部分样本,观察该模型真正的预测能力,即泛化能力。
1.3 常见的机器学习算法
- 线性回归
- 逻辑回归
- 决策树
- SVM
- 朴素贝叶斯
- K最近邻算法
- K均值算法
- 随机森林算法
- 降维算法
- Gradient Boost 和 Adaboost 算法
2 机器学习前的准备工作
本文仍然以著名的鸢尾花iris数据为例展开机器学习的示例。在建立机器学习的模型前,通常需要对数据进行准备工作。对数据的准备工作包括但不限于:
- 数据基本情况分析
- 数据可视化
- 数据标准化
- 根据数据选择可能合适的模型
2.1 数据基本情况分析
首先读入iris.csv文件中的数据并保存在DataFrame数据框中,然后我们可以通过DataFrame的shape属性查看读入数据的行数和列数;head()函数看一下数据前面几行;describe()函数查看每列的基本统计数据。
import pandas as pd
X=pd.read_csv("D:\\iris.csv")
X.shape
X.head()
X.describe()
输出结果包括显示(150, 5),表示150行,5列数据;
数据前面几行的展示,可以看到每列的名称;
还可以看到对连续型数据的基本统计结果,包括每列中包含数据个数,平均值(mean)和方差(sd),最大值(max)和最小值(min)以及处于25%、50%和75%位置的数据。
2.2 数据可视化
这部分在另一个博文中做了简要介绍。请参看Python数据可视化-matplotlib and seaborn
2.3 数据的拆分
- 输入、输出数据拆分
- 训练集、测试集数据拆分
(1)要把读入的数据X分成输入数据和输出数据两个部分。后面的机器学习模型我们会分为分类输出的模型和连续型输出的模型两个类别介绍,因此,这里的输入输出分割也稍微有所不同。
如果我们把iris数据集中的"cllass label"拆分出来作为输出y,剩下的作为输入X,那么我们将建立的就是分类输出模型;
y=X.pop("class label")
而如果我们把iris数据集中的"petal width" 拆分出来作为输出y,剩下的iris数据集中鸢尾花的3个参数作为输入X,那么我们将建立的就是连续型输出的模型。
X.pop("class label")
y=X.pop("petal width")
(2)为了交叉验证算法的需要,对输入数据按比例随机拆分为训练集(train set)和测试集(test set)这两部分数据,相应的输出数据也会被拆分到训练集(train set)和测试集(test set)中。这里我们需要应用sklearn库model_selection的train_test_split函数完成。
需要非常注意的是,通过sklearn库中train_test_split函割获得的训练集(train set)实际是总训练集,已经包括了交叉验证(cross validation)中的训练集(train set)和验证集(validation set)两个部分。意思就是指在交叉验证过程中将总训练集(train set)数据集通常分成 10 部分,轮流将其中 9 份作为训练数据(train set),1份作为验证集(validation set)。训练10个模型并最后折中选择1个作为最终模型的过程。
在许多介绍性文章中,训练集、验证集和测试集概念经常混淆,要注意区分。
#from sklearn import cross_validation #老版本的sklearn
from sklearn import model_selection #新版本的sklearn
#拆分数据为train set训练集和test set测试集
#X:要划分的样本特征集(输入的信息)
#y:需要划分的样本结果(输出结果)
#test_size:样本占比,测试集在总数中的百分比(小数表示)
#random_state:随机数种子,对于模型分割,必须用同一随机数种子,保证每次随机分割后数据集不变。
x_train,x_test,y_train,y_test=model_selection.train_test_split(X,y,test_size=0.2,random_state=10)
2.4 输入连续型数据的标准化
读入数据后对数据做标准化,标准化的意义在于使得数据为近似正态分布,这样符合后续