内容简介:sklearn 快速入门
简介
sklearn自带了一些标准数据集,用于分类问题的 iris 和 digits 。用于回归问题的 boston房价 数据集。
导入数据集
from sklearn import datasets
自带的数据都放在datasets里面
iris = datasets.load_iris() digits = datasets.load_digits()
datasets 是dict类型的对象,包含数据和元数据信息。数据放在.data里,标签放在.target里。
type(iris.data)
numpy.ndarray
.data里放的是特征的信息
print "iris.data.dtype: ",iris.data.dtype print "iris.data.shape: ",iris.data.shape print "iris.data.ndim: ",iris.data.ndim print "--------------------------------" print iris.data[0:5]
iris.data.dtype: float64 iris.data.shape: (150, 4) iris.data.ndim: 2 -------------------------------- [[ 5.1 3.5 1.4 0.2] [ 4.9 3. 1.4 0.2] [ 4.7 3.2 1.3 0.2] [ 4.6 3.1 1.5 0.2] [ 5. 3.6 1.4 0.2]]
.target里放的是标签信息
print "iris.target.dtype: ",iris.target.dtype print "iris.target.shape: ",iris.target.shape print "iris.target.ndim: ",iris.target.ndim print "--------------------------------" print iris.target[0:5]
iris.target.dtype: int64 iris.target.shape: (150,) iris.target.ndim: 1 -------------------------------- [0 0 0 0 0]
type(digits)
sklearn.datasets.base.Bunch
print "digits.data.dtype: ",digits.data.dtype print "digits.data.shape: ",digits.data.shape print "digits.data.ndim: ",digits.data.ndim print "--------------------------------" print digits.data[0:5]
digits.data.dtype: float64 digits.data.shape: (1797, 64) digits.data.ndim: 2 -------------------------------- [[ 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.] [ 0. 0. 0. 12. 13. 5. 0. 0. 0. 0. 0. 11. 16. 9. 0. 0. 0. 0. 3. 15. 16. 6. 0. 0. 0. 7. 15. 16. 16. 2. 0. 0. 0. 0. 1. 16. 16. 3. 0. 0. 0. 0. 1. 16. 16. 6. 0. 0. 0. 0. 1. 16. 16. 6. 0. 0. 0. 0. 0. 11. 16. 10. 0. 0.] [ 0. 0. 0. 4. 15. 12. 0. 0. 0. 0. 3. 16. 15. 14. 0. 0. 0. 0. 8. 13. 8. 16. 0. 0. 0. 0. 1. 6. 15. 11. 0. 0. 0. 1. 8. 13. 15. 1. 0. 0. 0. 9. 16. 16. 5. 0. 0. 0. 0. 3. 13. 16. 16. 11. 5. 0. 0. 0. 0. 3. 11. 16. 9. 0.] [ 0. 0. 7. 15. 13. 1. 0. 0. 0. 8. 13. 6. 15. 4. 0. 0. 0. 2. 1. 13. 13. 0. 0. 0. 0. 0. 2. 15. 11. 1. 0. 0. 0. 0. 0. 1. 12. 12. 1. 0. 0. 0. 0. 0. 1. 10. 8. 0. 0. 0. 8. 4. 5. 14. 9. 0. 0. 0. 7. 13. 13. 9. 0. 0.] [ 0. 0. 0. 1. 11. 0. 0. 0. 0. 0. 0. 7. 8. 0. 0. 0. 0. 0. 1. 13. 6. 2. 2. 0. 0. 0. 7. 15. 0. 9. 8. 0. 0. 5. 16. 10. 0. 16. 6. 0. 0. 4. 15. 16. 13. 16. 1. 0. 0. 0. 0. 3. 15. 10. 0. 0. 0. 0. 0. 2. 16. 4. 0. 0.]]
print "digits.target.dtype: ",digits.target.dtype print "digits.target.shape: ",digits.target.shape print "digits.target.ndim: ",digits.target.ndim print "--------------------------------" print digits.target[0:5]
digits.target.dtype: int64 digits.target.shape: (1797,) digits.target.ndim: 1 -------------------------------- [0 1 2 3 4]
digits是手写字数据集,可以通过images选择加载8*8的矩阵图片
digits.images[1]
array([[ 0., 0., 0., 12., 13., 5., 0., 0.], [ 0., 0., 0., 11., 16., 9., 0., 0.], [ 0., 0., 3., 15., 16., 6., 0., 0.], [ 0., 7., 15., 16., 16., 2., 0., 0.], [ 0., 0., 1., 16., 16., 3., 0., 0.], [ 0., 0., 1., 16., 16., 6., 0., 0.], [ 0., 0., 1., 16., 16., 6., 0., 0.], [ 0., 0., 0., 11., 16., 10., 0., 0.]])
学习和预测
在scikit-learn里面,一个分类模型有两个主要的方法:fit(X,y)和predict(T)
这里我们用svm做例子,看怎么使用。
from sklearn import svm clf = svm.SVC(gamma=0.001,C=100.)
选择模型的参数在我们这个例子里面,我们使用手工设置参数,此外还可以使用 网格搜索(grid search) 和 交叉验证(cross validation) 来选择参数.
现在我们的模型就是 clf。它是一个分类器。现在让模型可以进行分类任务,先要让模型学习。这里就是把训练数据集放到fit函数里,这么把digits数据集最后一个记录当作test dataset,前面1796个样本当作training dataset
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)
现在用学习好的模型预测最后一个样本的标签
print "prediction: ", clf.predict(digits.data[-1:]) print "actual: ",digits.target[-1:]
prediction: [8] actual: [8]
保存模型
通过pickle来保存模型
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, decision_function_shape=None, degree=3, gamma='auto', kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)
保存上面的模型
import pickle s = pickle.dumps(clf)
读取保存的模型
clf2 = pickle.loads(s) print "prediction: ",clf2.predict(X[0:1]) print "actual: ",y[0:1]
prediction: [0] actual: [0]
此外,可以使用joblib代替pickle(joblib.dump & joblib.load)。joblib对大的数据很有效,但是只能保存的硬盘,而不是一个string对象里。
用joblib保存模型
from sklearn.externals import joblib joblib.dump(clf,"filename.pkl")
['filename.pkl', 'filename.pkl_01.npy', 'filename.pkl_02.npy', 'filename.pkl_03.npy', 'filename.pkl_04.npy', 'filename.pkl_05.npy', 'filename.pkl_06.npy', 'filename.pkl_07.npy', 'filename.pkl_08.npy', 'filename.pkl_09.npy', 'filename.pkl_10.npy', 'filename.pkl_11.npy']
读取joblib保存的模型
clf3 = joblib.load("filename.pkl") print "prediction: ",clf3.predict(X[0:1]) print "actual: ",y[0:1]
prediction: [0] actual: [0]
注意:
joblib返回一系列的文件名,是因为模型里面的每一个numpy矩阵都保存在独立的文件里,并且要在相同的路径下面,再次读取的时候才能成功。
协议
sklearn 有如下几点规则,保证其能正常工作。
类型转换
除非特别指定,否则都会自动转换到 float64
import numpy as np from sklearn import random_projection rng = np.random.RandomState(0) X = rng.rand(10,2000) X = np.array(X,dtype='float32') X.dtype
dtype('float32')
transformer = random_projection.GaussianRandomProjection() X_new = transformer.fit_transform(X) X_new.dtype
dtype('float64')
X本来是float32类型,通过fit_transform(X)转换到float64
回归的结果被转换成float64,分类的数据类型不变。
from sklearn import datasets from sklearn.svm import SVC iris = datasets.load_iris() clf = SVC() # 回归 clf.fit(iris.data, iris.target) print u"回归结果:",list(clf.predict(iris.data[:3])) # 分类 clf.fit(iris.data, iris.target_names[iris.target]) print u"分类结果:",list(clf.predict(iris.data[:3]))
回归结果: [0, 0, 0] 分类结果: ['setosa', 'setosa', 'setosa']
回归用的是iris.target,分类用的是iris.target_names
重新训练和更新超参数
模型的超参数在模型训练完成以后仍然可以更新,通过 sklearn.pipeline.Pipeline.set_params 方法。多次调用fit会覆盖前面训练的模型。
import numpy as np from sklearn.svm import SVC rng = np.random.RandomState(0) X = rng.rand(100, 10) y = rng.binomial(1, 0.5, 100) X_test = rng.rand(5, 10)
clf = SVC() clf.set_params(kernel="linear").fit(X,y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=None, degree=3, gamma='auto', kernel='linear', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)
clf.predict(X_test)
array([1, 0, 1, 1, 0])
clf.set_params(kernel='rbf').fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=None, degree=3, gamma='auto', kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)
clf.predict(X_test)
array([0, 0, 0, 1, 0])
本文永久更新链接地址 : http://www.linuxidc.com/Linux/2017-06/144940.htm
以上所述就是小编给大家介绍的《sklearn 快速入门》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- TiDB入门(四):从入门到“跑路”
- MyBatis从入门到精通(一):MyBatis入门
- MyBatis从入门到精通(一):MyBatis入门
- Docker入门(一)用hello world入门docker
- 赵童鞋带你入门PHP(六) ThinkPHP框架入门
- 初学者入门 Golang 的学习型项目,go入门项目
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。