在上一篇博客我们搭起了环境,这篇博客将以最简介的代码快速上手sklearn。

这节笔记摘自官网Quick-Start的教程:An introduction to machine learning with scikit-learn。比起官网教程,这篇博客首先会概述基础概念,帮助快速理解和上手。话不多说,开始吧。

–官网文档– –官网教程–

scikit-learn编程概述

sklearn主要有以下几部分组成:

  • 估计器,可以直接理解成分类器,主要包含两个函数:fit(x,y) 和 predict(x),分别是训练和预测算法。起接受输入格式均为numpy数组或类似格式。
  • 转换器,用于数据预处理和数据转换,transform(),还有fit_transform()将fit()和transform()结合在一起。
  • 流水线,sklearn.pipeline包,入门阶段不做接受
  • 预处理,sklearn.prepressing包,预处理主要分为规范化和编码,规范化主要有:最大最小值规范化(MinMaxScaler)、归一化(Normalize,使特征值和为1)和白化(StandartScaler,使特征值均值为0,方差为1)。编码主要有:LabelEncoder(字符串转化为整型)、OneHotEncoder(特征有一个二进制数字来表示)、Binarizer(特征二值化)和MultiLabelBinarizer(多标签二值化)等
  • 特征,主要包括特征提取和特征选择
  • 降维,主要是PCA
  • 组合,通过聚集多个分类器的预测来提高分类准确率
  • 模型评估(度量),包含评分方法,性能度量,成对度量和距离计算。
  • 交叉验证,sklearn.cross_validation
  • 网格搜索,sklearn.grid_search 网格搜索最佳参数
  • 多标签分类,sklearn.multiclass

通过上面的介绍,应该可以大致了解到sklearn的模块组成,也大致能了解到sklearn的强大和易用了。

这节入门教程的内容也就很清楚了,这篇博客就是简单介绍估计器的使用,后面我们可以看到仅仅需要六行代码就可以实现SVM的训练和预测。

加载数据集

sklearn包中内置了一些常用的数据集,比如下面,我们只需要导入datasets模块,就可以直接加载数据集。下面的代码中,我们导入了iris(安德森鸢尾花卉数据集)和digits(手写字符数据集)。

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

关于安德森鸢尾花卉数据集,我去年caffe回归非图像数据的十堰就是在该数据集上测试的。下面我们需要用到digits,对于sklearn中数据的封装,可以通过 .data 查看用于分类的特征,可以通过 .target 来查看标签

当然,目前我们不会用到的原始数据也可以查看。如下,可以查看原始图像,是一个8×8大小,16位深的灰度图像,看起来像是个0,虽然分辨率很低,不过对于数字来说够了。

训练与预测

下面这段代码,建议在python命令行下一行一行输入。

整个过程写成脚本就是,这样不会像上面那样显示中间结果,如果要显示中间结果,需要在predict的时候打印(print)出结果,否则是不会显示的。下面这段代码就完成了一次SVM训练手写体字符,并进行预测:

  • 1-2行,带入sklearn包
  • 3行,加载手写体数字数据集
  • 4行,这里,我们就创建了一个svm分类器
  • 5行,我们就使用前面的fit方法进行训练,我们没有训练最后一个字符,最后一个字符留给我们做预测用
  • 6行,我们预测最后一个字符,如果我们打印出来,预测结果是8,于是我们查看digits.target([:-1])发现确实是8,我们还可以通过digits.image[:-1]来查看原始图像

这样我们大致能理解sklearn的运行流程了。这里我们还要提到,输入和输出的不论是整数还是float32,最终都会被转化为float64

模型保存

如果我们训练好了一个模型,我们有什么方法可以保存下来呢?当然是用python自带的pickle就可以了

我们训练并保存一个模型clf,这里pickle.dumps(clf)就是序列化的意思,我们当然可以进一步已文件形式来保存经过序列化的s(这是python基础内容,就不介绍),然后加载(反序列化)模型clf2,然后进行预测。

官网上高速我们,如果数据量很大的时候,可以使用joblib包来进行序列化以调高效率。下面的代码就直接序列化并保存成文件了。

多标签预测

上面演示了单类别分类,下面这段代码演示了多类别分类。当使用多类别分类算法时,学习和预测任务将根据target的格式自动适应,比如输入可以是类别标签[0,1,2]这样,也可以是类别向量[1,0,0][0,1,0][0,0,1],而输出则是固定的类别向量形式。正如下面的代码:

好了,简单介绍了sklearn的基本使用方法。

See You Next Chapter!

发表评论

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