最近开始学习使用scikit-learn,每天都写一下学到的东西,既能提示自己一天学了什么东西,也方便回顾。
在我的虚拟机Ubuntu上安装了scikit-learn,安装流程很简单 。由于我常用python所以我的Ubuntu虚拟机早就安装了pip、numpy、scipy、matplotlib、Cython依赖库。
源码地址:https://github.com/scikit-learn/scikit-learn
安装完依赖库后,在github上下载scikit-learn源码,cd到源码目录python setup.py install。然后进入python交互界面,import sklearn不报错即安装完成。
先体验一下用scikit-learn做SVM分类,推荐在用scikit-learn之前还是要对机器学习的方法有基本了解,这样才能改变参数来改进训练模型。
1 from sklearn import datasets 2 from sklearn import svm 3 iris=datasets.load_iris() 4 digits=datasets.load_digits() 5 clf=svm.SVC(gamma=0.001,C=100.) #C为惩罚参数的误差项,gamma为学习速率 6 clf.fit(digits.data[:-1],digits.target[:-1]) #训练SVM模型 7 clf.predict(digits.data[:-1]) #使用SVM模型预测
iris与digits为scikit-learn自带的数据集,digits.data是手写数字0-9的图像特征,digits.target是数字0-9,最后训练的SVM模型就是利用手写数字的图像特征来预测所表示的数字。模型训练完可能不只用一次,参数可以用来作多次的预测,所以在训练完模型之后需要记录参数以便以后的预测,记录参数有两种方法,第一种是字符串储存参数:
1 from sklearn import svm 2 from sklearn import datasets 3 clf=svm.SVC() 4 iris=datasets.load_iris() 5 X,y=iris.data,iris.target 6 clf.fit(X,y) 7 import pickle 8 s=pickle.dumps(clf) 9 clf2=pickle.loads(s) 10 clf2.predict(X[0:1]) 11 print y[0]
将clf的参数存入s中,clf2载入s后取得了clf的参数,使用clf2和clf预测的效果是一样的。第二种方法是使用文件储存参数:
1 from sklearn.externals import joblib 2 joblib.dump(clf,‘filename.pkl‘) 3 clf=joblib.load(‘filename.pkl‘)
在scikit-learn中一般输入的数组中的数据都要求是float64位的,如果不是的话应该用如下程序转化成float64
1 import numpy as np 2 from sklearn import random_projection 3 4 rng=np.random.RandomState(0) 5 X=rng.rand(10,2000) 6 X=np.array(X,dtype=‘float32‘) 7 print X.dtype 8 #dtype(‘float32‘) 9 transformer=random_projection.GaussianRandomProject() 10 X_new=transformer.fit_transform(X) 11 print X_new.dtype 12 #dtype(‘float64‘)
改变和更新参数 下面的代码是示范在SVM训练模型中改变核空间,先是从rbf改变成linear再改变回来
1 import numpy as np 2 from sklearn.svm import SVC 3 4 rng=np.random.RandomState(0) 5 X=rng.rand(100,10) 6 y=rng.binomial(1,0.5,100) 7 #binomial生成两项分布,参数分别是n、p、size 8 X_test=rng.rand(5,10) 9 clf=SVC() 10 clf.set_params(kernal=‘linear‘).fit(X,y) 11 clf.predict(X_test) 12 clf.set_params(kernel=‘rbf‘).fit(X,y) 13 clf.predict(X_test)
时间: 2024-10-15 05:25:34