1.获得样例数据
scikit-learn库有一些标准的数据集,例如分类的数字集,波士顿房价回归数据集。
在下面,我们启动Python解释器,然后载入数据集。我们可以认为,美元符号后输入python然后会启动以> > >开头的 Python解释器,提示我们输入python表达语句:
$ python
>>> from sklearn import datasets
>>> iris = datasets.load_iris()
>>> digits = datasets.load_digits()
>>> print(digits.data)
[[ 0. 0. 5. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 10. 0. 0.]
[ 0. 0. 0. ..., 16. 9. 0.]
...,
[ 0. 0. 1. ..., 6. 0. 0.]
[ 0. 0. 2. ..., 12. 0. 0.]
[ 0. 0. 10. ..., 12. 1. 0.]]
而digits.target对于每一个数据集来说就是它们的种类,对应每个数字图像,希望它被划分的具体类别:
>>> digits.target
array([0, 1, 2, ..., 8, 9, 8])
数据集通常是一个二维数组,格式是(n_samples,n_features),尽管原始的数据可能有不一致的维度。在数字化表示下,每个原始为形状(8,8)的图像样本可以表示为:
>>> digits.images[0]
array([[ 0., 0., 5., 13., 9., 1., 0., 0.],
[ 0., 0., 13., 15., 10., 15., 5., 0.],
[ 0., 3., 15., 2., 0., 11., 8., 0.],
[ 0., 4., 12., 0., 0., 8., 8., 0.],
[ 0., 5., 8., 0., 0., 9., 8., 0.],
[ 0., 4., 11., 0., 1., 12., 7., 0.],
[ 0., 2., 14., 5., 10., 12., 0., 0.],
[ 0., 0., 6., 13., 10., 0., 0., 0.]])
在给定数据集的情况下,我们的任务是预测,对于给定图像,其所属的是哪个数字指代的种类。 我们手头有10个可能的类(数字0到9)中的每一个的样本,其中我们拟合预测器经过训练后可以预测未知的样本所属的类。
在scikit-learn中,分类预测器是实现方法fit(X,y)<代表拟合>和predict(T)<代表预测>的Python对象。
预测器的一个示例是实现支持向量机模块的类sklearn.svm.SVC。 预测器的构造函数使用模型的参数作为参数,但暂时,我们将把估计器视为一个黑盒:
(译者注:虽然scikit-learn库拥有诸多预测模型,但接口尤其工整,全部以方法fit(X,y)<代表拟合>和predict(T)<代表预测>命名!)
>>> from sklearn import svm
>>> clf = svm.SVC(gamma=0.001, C=100.)
拟合过程:
>>> clf.fit(digits.data[:-1], digits.target[:-1])
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)
预测模型:
>>> clf.predict(digits.data[-1:])
array([8])
预测结果(分类结果):
3.扩展知识:持久化存储你的预测模型:pickle模块
在scikit的特定实例下,使用joblib的pickle模块(joblib.dump&joblib.load)可能更有趣,这对大数据更有效,但只能转化为pickle存储在磁盘上而不是字符串表达:
存储:
>>> from sklearn.externals import joblib
>>> joblib.dump(clf, 'filename.pkl')
加载:
>>> clf = joblib.load('filename.pkl')