sklearn学习(2)使用scikit-learn进行机器学习的介绍

翻译自http://scikit-learn.org/stable/tutorial/basic/tutorial.html,内容有删改

章节内容

在本节中介绍在scikit-learn中使用的机器学习词汇,并给出一个简单的学习示例。

机器学习:问题设置

一般来说,学习问题考虑一组n个数据样本,然后尝试预测未知数据的属性。如果每个样本不仅仅是单个数字,并且有例如多维条目(也称为多变量数据),则称其具有若干属性或特征。
我们可以把学习问题划分为几个大的种类:

监督学习:数据带有我们想要预测的附加属性,监督学习包含:

分类:样本属于两个或更多个类,并且我们想从已经标记的数据中学习如何预测未标记数据的类。分类问题的一个例子是手写数字的识别,其中目的是将每个输入向量分配给数量有限的离散类别中的一个。另一种理解分类的方式是将其作为监督学习的离散(而不是连续)形式,一个是让提供的每一个n样本具有有限数量的类别,一个是尝试用正确的类别或分组来标记它们 。

回归:如果期望的输出由一个或多个连续变量组成,则任务称为回归。回归问题的一个例子是鲑鱼的长度作为函数预测年龄和体重。

无监督学习:训练数据由一组没有任何相应目标值的输入向量x组成。问题的目标可以是将数据中发现相似的分组,称为聚类;或者确定在输入空间内的数据的分布,称为密度估计;或者将数据从高维空间下降到2维或3维以便于可视化。

训练集和测试集

机器学习是关于学习已知数据集的一些属性并将它们应用到新数据。这就是为什么在机器学习评估算法的常见做法是将手头的数据分成两组,一组我们称为训练集,我们在其上学习数据属性,一组我们称为测试集,我们测试这些属性。

加载示例数据集

scikit-learn附带了一些标准数据集,例如用于分类的iris数据集和digit数据集以及用于回归的boston house prices数据集。

接下来,使用Python解释器,加载iris和digits数据集:

from sklearn import datasets
iris = datasets.load_iris()
digits = datasets.load_digits()

数据集是一个类似字典的对象,它保存所有数据和一些有关数据的元数据。此数据存储在.data成员中,这是一个n_sample,n_feature(n个样本,n个特征)的数组。在有监督的情况下,一个或多个相应变量存储在.target成员中。例如,在使用digit数据集的情况下,digits.data允许访问可用于对数字样本进行分类的特征,digits.target给出了数字数据集的真实标注(该数据属于哪个类别),即对应于我们试图学习的每个数字图像的数字:

digits.data
digits.target

下图为测试输出digits.data和digits.target

数组的shape(形状)属性

尽管原始数据可能具有不同的形状,数据始终是二维数组,且形状为(n_samples,n_features)。考虑digit数据集,每个原始样本是shape(8,8)的图像,并且可以使用以下访问:

digits.images[0]


这个样例展示了如何从原始问题开始,通过sklearn塑造数据并使用。

学习及预测

使用digit数据集,给定图像,预测其表示哪个数字。我们给出了10个可能的类(数字0到9)中的每一个的样本,调整评估器以能够预测未知样本所属的类。
在scikit-learn中,分类的评估器是实现方法fit(x,y)和predict(T)的Python对象。
评估器的一个示例是实现支持向量机(SVM)分类的类sklearn.svm.SVC。评估器的构造函数采用模型的参数作为参数,但暂时,我们将把评估器视为一个黑盒:

from sklearn import svm
clf = svm.SVC(gamma=0.001, C=100.)

选择模型的参数
在这个例子中,我们手动设置gamma的值。通过使用诸如网格搜索和交叉验证的工具,可以自动地为参数找到好的值。
创建的评估器实例clf,它是一个分类器,必须从模型中学习,这是通过将我们的训练集传递给fit方法来完成。作为训练集,我们使用除了最后一个数据集之外的所有数据集的图像。用[:-1] Python语法选择这个训练集,它产生一个新数组,其中包含digits.data的最后一个条目:

clf.fit(digits.data[:-1], digits.target[:-1])
OUTPUT:
SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape=None, degree=3, gamma=0.001, kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)

现在你可以问分类器在digits数据集中最后一个图像的数字是什么(最后这一项没有用来训练分类器):


可以看到即使图像分辨率很差,但是分类评估器给出的答案还是令人信服的。
模型持久性
在之后的3.4部分仔细学习,略

默认规则

scikit-learn评估器遵循某些规则,使他们的行为更具预测性。
默认数据类型
除非另有说明,否则输入将被转换为float64
修改和更新参数
在通过sklearn.pipeline.Pipeline.set_params方法构造之后,可以更新评估器的参数。多次调用fit()会覆盖任何以前的fit()的内容。
多类与多标签拟合
当使用多类分类器时,执行的学习和预测任务取决于适合的目标数据的格式

发布者

VC-Robot

游戏爱好者,动漫迷,C++修炼中,编程菜鸟,随性

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据