本文参考官方网站: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')