最近开始学习使用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)
原文:http://www.cnblogs.com/heyijiang666/p/5020911.html