LINUX教程:sklearn 快速入门

LINUX教程:sklearn 快速入门,第1张

概述介绍《LINUX教程:sklearn 快速入门》开发教程,希望对您有用。

《liNUX教程:sklearn 快速入门》要点:
本文介绍了liNUX教程: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.dtypeprint "iris.data.shape: ",iris.data.shapeprint "iris.data.ndim: ",iris.data.ndimprint "--------------------------------"print iris.data[0:5]

 

iris.data.dtype:  float64iris.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.dtypeprint "iris.target.shape: ",iris.target.shapeprint "iris.target.ndim: ",iris.target.ndimprint "--------------------------------"print iris.target[0:5]

 

iris.target.dtype:  int64iris.target.shape:  (150,)iris.target.ndim:  1--------------------------------[0 0 0 0 0]
type(digits)

 

sklearn.datasets.base.Bunch
print "digits.data.dtype: ",digits.data.dtypeprint "digits.data.shape: ",digits.data.shapeprint "digits.data.ndim: ",digits.data.ndimprint "--------------------------------"print digits.data[0:5]

 

digits.data.dtype:  float64digits.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.dtypeprint "digits.target.shape: ",digits.target.shapeprint "digits.target.ndim: ",digits.target.ndimprint "--------------------------------"print digits.target[0:5]

 

digits.target.dtype:  int64digits.target.shape:  (1797,)digits.target.ndim:  1--------------------------------[0 1 2 3 4]

digits是手写字数据集,可以经由过程images选择加载8*8的矩阵图片

digits.images[1]

 

array([[  0.,0.,12.,13.,5.,0.],[  0.,11.,16.,9.,3.,15.,6.,7.,2.,1.,10.,0.]])
学习和预测

在scikit-learn里面,一个分类模型有两个主要的办法:fit(X,y)和predict(T)

这里我们用svm做例子,看怎么使用.

from sklearn import svmclf = 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 svmfrom sklearn import datasetsclf = svm.SVC()iris = datasets.load_iris()X,y = iris.data,iris.targetclf.fit(X,y)

 

SVC(C=1.0,gamma='auto',verbose=False)

保留上面的模型

import pickles = 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 joblibjoblib.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 npfrom sklearn import random_projectionrng = 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 datasetsfrom sklearn.svm import SVCiris = 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]分类成果: ['setosa','setosa','setosa']

回归用的是iris.target,分类用的是iris.target_names

重新训练和更新超参数

模型的超参数在模型训练完成以后仍然可以更新,通过sklearn.pipeline.Pipeline.set_params办法.多次调用fit会覆盖前面训练的模型.

import numpy as npfrom sklearn.svm import SVCrng = 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,kernel='linear',verbose=False)
clf.predict(X_test)

 

array([1,1,0])
clf.set_params(kernel='rbf').fit(X,verbose=False)
clf.predict(X_test)

 

array([0,0])

本文永远更新链接地址

更多liNUX教程,尽在内存溢出PHP学院专栏。欢迎交流《liNUX教程:sklearn 快速入门》!

总结

以上是内存溢出为你收集整理的LINUX教程:sklearn 快速入门全部内容,希望文章能够帮你解决LINUX教程:sklearn 快速入门所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1041819.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存