首页 > 代码库 > scikit-learn机器学习库介绍(翻译tutorial)
scikit-learn机器学习库介绍(翻译tutorial)
章节内容
在这一章中,我们主要介绍关于scikit-learn机器学习库的词汇,并且将给出几个例子
机器学习:问题背景
通常,一个学习问题看重数据的n个样本然后来尝试证明一些未知数据的属性。如果每一个样本超过一个单一的数值,例如多维实体,它不就是有一些属性或者特征吗?
我们能用几个大的分类来分隔学习问题:
监督学习: 在监督学习中,这些数据自带了我们想要预测的额外的属性,这个问题是下面两者中的任何一个:
分类:属于两种或者更多类别的样本,我们想从已经被标记的数据中如何预测还没有被标记的数据。一个分类问题的例子将会是手写体数字识别的样例。这个例子的目的是标记输入向量为其中有限数量的非连续类别。对于分类的另一种想法是作为监督学习的一种分离的表格(不是连续的),在这个表格中,一个是被限制的类别数量,而且对于每个类别都有N个样例被提供;一个是尝试用正确的类别或者类来标记他们。
回归:如果期望的输出是由一个或者更多的连续的变量组成的,那么任务被称作回归。回归问题的例子将通过一条鲑鱼的年龄和重量预测它的长度。
无监督学习:在无监督学习里面,训练数据由一组没有任何一直目标数据的输入向量组成。这个的目的是在这样的问题中可能会在这些数据里发现相似样例的组,这些相似的样例被称作聚类。或者在输入空间里决定数据的分布,这个被成为密度估算;或者为了可视化的目的来保护数据把高维数据降到二维或者三维。
训练集和测试集
机器学习是关于了解一些数据集的属性并且将它们应用到新数据上。这就是为什么在机器学习中通常的惯例是评价一个算法是分割数据为两个相近的数据集,其中一个集合叫做训练集,我们在训练集上了解数据属性;另一个集合被叫做测试集,在测试集上面我们测试那些属性。
载入一个例子数据集
scikit-learn自带一些标准数据集,例如iris和digits数据集为分类,还有boston house price数据集为回归。
在下面,我们启动python IDE,并且载入iris和digits数据集。
一个数据集是一个字典对象,这个对象持有关于这个数据的所有的数据和一些源数据,这个数据被存储在.data成员中,他是一个n_samples,n_features数组,为了防止管理意外,一个或者更多的响应变量会被存储在.target成员中。
例如,就digits数据集来说,digits.data给于了访问特性能被使用在归类digits样例上:
并且digits. target给了digit数据集的背景,也就是对于每一个数字图像的一直性的数量,这是我们正在学习的:
?
?数组的形状
?数据总是一些2D数组,shape(n_samples,n_features),尽管原始数据也许有一个不同的形状,就这个digits而言,每一个原始样例是一个shape(8,8)的图像,并且能被访问使用:
?
学习和预测
?就digits数据集而言,任务是去预测,给一个图像,代表它数字化了。我们被给了10中合理的种类的样例(数字0到9)。在这个样例上面我们安装一个评估器,这个评估器是能预测还没有被发掘的类别的样例的。(翻译的太撇脚了)
?在scikit-learn中,一个类别的评估器是一个实现了fit(x,y)和predict(T)的python对象。
?一个评估器的例子是类别sklearn.svm.SVC,这个类实现了支持向量分类。一个评估器的构造器需要一个模型参数,但是暂时的,我们将只把它当作一个黑盒:
?
?
?选择模型参数
? ?在上面的例子中我们设置了伽马手动值。它可能会自动找到优选值为参数通过使用工具像网格搜索和交叉验证。
?我们作为一个类别调用我们的评估器实例clf,它现在必须适应模型,也就是说,它必须从模型中学习。这是被完成了通过传递我们的训练数据集给这个fit方法。作为一个训练集,让我们使用所有的我们的数据集部分的最后一个图像。我们使用[:-1]python语句选择这个训练集,它会产生一个包含所有的除了最后的digits.data的实体的新数组:
?
?现在你能预测新的值了,通常来说,我们能询问这个类别在digits数据集的我们的最后一个图像的数字是我们还没有使用去训练这个分类器:
?
?像下面的相应图像:
?
?正如你看到的,这是一个具有挑战性的任务:图象有很少的像素,你相信分类器吗?
?一个完整的分类例子是有用的作为一个样例,你能运行并且学习 Recognizing hand-written digits
模型持久化
?通过使用python的built-in持久化模型在scikit中保存一个模型是可能的,命名pickle:
?
?在scikit的特别案例中,它也许使用joblib的pickle的替换(joblib.dump & joblib.load)是更有趣的,在大数据上它是更有效的,但是仅仅能存入磁盘而不是一个字符串。
?
?然后你可以读取上面的文件使用:
?
?主要:joblib.dump返回文件名的列表。被包含在clf对象中的每一个单独的numpy数组是文件系统中被序列化且被分割的文件。当使用joblib.load重新载入模型时,所有的文件要求在同一个文件夹中。
?注意pickle有一些安全和维护方面的问题。请参照章节Model persistence?获取更详细的信息。
?
scikit-learn机器学习库介绍(翻译tutorial)