Sklearn机器学习基础
scikit-learn介绍
自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了。
scikit-learn简称sklearn,支持包括分类、回归、降维和聚类四大机器学习算法。还包含了特征提取、数据处理和模型评估三大模块。
sklearn是Scipy的扩展,建立在NumPy和matplotlib库的基础上。利用这几大模块的优势,可以大大提高机器学习的效率。
sklearn拥有着完善的文档,上手容易,具有着丰富的API,在学术界颇受欢迎。
sklearn已经封装了大量的机器学习算法,同时sklearn内置了大量数据集,节省了获取和整理数据集的时间。
以上可知,由于sklearn工具的强大功能,对于想使用(Python+机器学习)模式同学来说,我们总能够从这些方法中挑选出一个方法适合于自己问题的, 然后解决自己的问题。
安装的话,很简单,选择使用 Anaconda 来安装所有 python 的科学计算模块。
使用 scikit-learn 介绍机器学习
机器学习的基本方法为:获取数据 -> 数据预处理 -> 训练建模 -> 模型评估 -> 预测(分类)。
下面我们将通过实例来具体了解如何操作。
不过在这之前,我们需要首先了解,机器学习方法解决的是什么问题?
首先,明确机器学习的问题设置:一般来说,一个学习问题通常会考虑一系列 n 个 样本数据,然后尝试预测未知数据的属性。如果每个样本是多个属性的数据 (比如说是一个多维记录),就说它有许多“属性”,或称 features(特征) 。
综上所言,对于一个机器学习的问题,可分为几大类:
一、监督学习 , 其中数据带有一个附加属性,即我们想要预测的结果值。
这个问题可以是:
1、分类 : 样本属于两个或更多个类,我们想从已经标记的数据中学习如何预测未标记数据的类别。分类问题的一个例子是手写数字识别,其目的是将每个输入向量分配给有限数目的离散类别之一。我们通常把分类视作监督学习的一个离散形式(区别于连续形式),从有限的类别中,给每个样本贴上正确的标签。
2、回归 : 如果期望的输出由一个或多个连续变量组成,则该任务称为回归 。 回归问题的一个例子是预测鲑鱼的长度是其年龄和体重的函数。
二、无监督学习, 其中训练数据由没有任何相应目标值的一组输入向量x组成。这种题的目标可能是在数据中发现彼此类似的示例所聚成的组,这种问题称为聚类;或者,确定输入空间内的数据分布,称为密度估计;又或从高维数据投影数据空间缩小到二维或三维以进行可视化。
此外,机器学习是从数据的属性中学习,并将它们应用到新数据的过程。这就是为什么机器学习中评估算法的普遍实践是把数据分割成训练集(我们从中学习数据的属性)和 测试集(我们测试这些性质)。
1、 获取数据与数据预处理
scikit-learn提供了一些标准数据集,例如用于分类的iris和digits数据集和波士顿房价回归数据集。在下文中,我们从我们的shell启动一个Python解释器,然后加载iris和digits数据集。使用的工具是jupyter,单步调试利器,建议大家练习时优先考虑该工具。
image.png
数据集形式根据问题实际情况,有不同的形式,比如文本挖掘常用.txt格式数据集,图像处理常.png,分类常数字。是一个类似字典的对象,它保存有关数据的所有数据和一些元数据。该数据存储在 .data 成员中,它是n_samples, n_features数组。在监督问题的情况下,一个或多个响应变量存储在 .target 成员中。例如,在数字数据集的情况下,digits.data 使我们能够得到一些用于分类的样本特征,
image.png
而数据的标签(digits.target )表示了数据集内每个数字的真实类别,也就是我们期望从每个手写数字图像中学得的相应的数字标记。
image.png
由于官网示例给的数据,可看出完整性较好,暂不需要数据预处理,在下面课程中会专门讲解各种数据预处理的方法。
2、 训练模型
在数字数据集的情况下,任务是给出图像来预测其表示的数字。我们给出了10个可能类(数字 0 到 9)中的每一个的样本,我们在这些类上拟合一个估计器,以便能够预测未知的样本所属的类。
在scikit-learn中,分类的估计器是一个Python 对象,它实现了fit(X, y)和predict(T) 等方法。
估计器的一个例子类sklearn.svm.SVC ,实现了支持向量分类。估计器的构造函数以相应模型的参数为参数,但目前我们将把估计器视为黑箱即可:
image.png
3、模型预测与评估
通过数据和模型,下面要做的就是使用模型来处理数据。
在下面的代码中,我们把我们的估计器实例命名为clf ,因为它是一个分类器(classifier)。它现在必须拟合模型,也就是说,它必须从模型中 learn(学习)。这是通过将我们的训练集传递给fit方法来完成的。作为一个训练集,让我们使用数据集中除最后一张以外的所有图像。 我们用 [:-1] ,这个Python 语法选择这个训练集,它产生一个包含 digits.data 中除最后一个条目(entry)之外的所有条目的新数组。
image.png
通过学习,得到的最佳模型参数组合为:
image.png
由此可看出,模型的最终参数是有多个参数共同确定,但实际情况往往只关注只要参数,也就是,控制变量法,因为,机器学习学习是一个逼近全局最优过程,性能没有最好,只有更好,所以为节省训练时间,多关注主要参数。
4、预测
现在你可以预测新的值,特别是我们可以向分类器询问 digits 数据集中最后一个图像(没有用来训练的一条实例)的数字是什么:
image.png
相应的图像如下:
image.png
以上过程就是一个简单的机器学习问题解决流程的例子。
总结一下内容:
-
机器学习问题解决心法:获取数据 -> 数据预处理 -> 训练建模 -> 模型评估 -> 预测(分类)。
-
模型学习过程本质:通过不断调整参数来减少系统误差,使性能不断逼近全局最优解。这个过程是反复迭代的。
-
训练集与预测集灵活拆分。