本文参考官方网站:http://scikit-learn.org/stable/tutorial/basic/tutorial.html
scikit-learn工具包自带一些标准数据集(包括iris和digits两个数据集),可以进行测试。
(1)首先导入模块数据集:
from sklearn import datasets
iris = datasets.load_iris()
digits = datasets.load_digits()
导入的一个数据集包含数据和数据集的一些元数据(用于描述数据),数据集中.data成员中保存着一个N个样本,N个特征的2维数据,而需要进行预测的目标变量保存在.target成员中,它是一个一维的变量,每个样本对应个标签。
例如在digits数据中,.data每一行对应一个样本数据,每一列表示一个特征:
>>> 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.]]
.target数据的每个元素对应一个样本数据(个数相等):
>>> digits.target
array([0, 1, 2, ..., 8, 9, 8])
>>> len(digits.target) == len(digits.data)
True
(2)模型学习和预测:
在scikit-learn中,一个分类问题的评估器(estimator)是通过fit(X,y)方法和predict(T)两个方法来实现的。
在下面的示例中estimator是sklearn.svm.SVC,它实现了支持向量机分类器SVC(support vector classification),estimator构造函数的参数是对应模型的相关参数(如下例子中的gamma=0.001, C=100.为svm模型的参数),最开始我们可以把estimator看成一个黑箱。
>>> from sklearn import svm
>>> clf = svm.SVC(gamma=0.001, C=100.)
训练SVC模型如下:
>>> clf.fit(digits.data[:-1], digits.target[:-1])
SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,
gamma=0.001, kernel='rbf', max_iter=-1, probability=False, shrinking=True,
tol=0.001, verbose=False)
用训练好的SVC模型对数据进行预测:
>>> clf.predict(digits.data[-1])
array([8])
(3)模型持久化
我们可以用pickle模块dumps和loads把训练得到的模型数据持久化到字符串中:
>>> from sklearn import svm
>>> from sklearn import datasets
>>> clf = svm.SVC()
>>> iris = datasets.load_iris()
>>> X, y = iris.data, iris.target
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
kernel='rbf', max_iter=-1, probability=False, shrinking=True, tol=0.001,
verbose=False)
>>> import pickle
>>> s = pickle.dumps(clf)
>>> clf2 = pickle.loads(s)
>>> clf2.predict(X[0])
array([0])
>>> y[0]
0
当数据量比较大时,我们更希望把模型持久化的形式保存在磁盘文件中,而不是以字符串(string)的形式保存在内存中:
>>> from sklearn.externals import joblib
>>> joblib.dump(clf, 'filename.pkl')