1. 程式人生 > >如何使用sklearn中的SVM(SVC;SVR)

如何使用sklearn中的SVM(SVC;SVR)

    SVM分類演算法我們前面已經講過了,那麼我們平時要用到SVM的時候,除了在MATLAB中呼叫libsvm之外,我們的Python中的sklean也已經集成了SVM演算法。這篇部落格就講一下sklearn中的SVM如何呼叫。

    我們先說個例子,看看簡單的使用sklean中的SVC(support vectors classification)怎麼使用。

  1. from sklearn import svm  
  2. X = [[00], [11], [10]]  # training samples 
  3. y = [011]  # training target
  4. clf = svm.SVC()  # class 
  5. clf.fit(X, y)  # training the svc model
  6. result = clf.predict([22]) # predict the target of testing samples 
  7. print result  # target 
  8. print clf.support_vectors_  #support vectors
  9. print clf.support_  # indeices of support vectors
  10. print clf.n_support_  # number of support vectors for each class 


其中有一些註釋幫助理解,其實sklearn中呼叫

機器學習的方法都是一個道理,演算法就是一個類,其中包含fit(), predict()等等許多方法,我們只要輸入訓練樣本和標記,以及模型的一些可能的引數,自然就直接出分類的結果。

關於SVC的一些用法,可以參考下面的連結:

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC

    SVC中也可以實現多類分類問題,而且預設使用的是1 vs. 1的投票機制,這種機制的優缺點我們在前面的博文中已經提到了,需要建立的分類器很多很多。。。

    SVC也考慮到了累不平衡問題,處理方式在fit方法下面。如下:

fit(Xysample_weight=None)

Fit the SVM model according to the given training data.

Parameters:

X : {array-like, sparse matrix}, shape (n_samples, n_features)

Training vectors, where n_samples is the number of samples and n_features is the number of features.

y : array-like, shape (n_samples,)

Target values (class labels in classification, real numbers in regression)

sample_weight : array-like, shape (n_samples,)

Per-sample weights. Rescale C per sample. Higher weights force the classifier to put more emphasis on these points.

Returns:

self : object

Returns self.


後面的sample_weight和一般的代價敏感相似,只不過這裡是每個樣本有一個權重。在不平衡學習中,這裡增加誤分類懲罰項的技術是屬於cost sensitive learning 的範疇,其中還有許多更加有效的方式來處理類不平衡問題。

    SVM既可以用來分類,就是SVC;又可以用來預測,或者成為迴歸,就是SVR。sklearn中的svm模組中也集成了SVR類。

    我們也使用一個小例子說明SVR怎麼用。

  1. X = [[00], [11]]  
  2. y = [0.51.5]   
  3. clf = svm.SVR()   
  4. clf.fit(X, y)  
  5. result = clf.predict([22])   
  6. print result   

關於SVR的詳細說明文件見下面的連結:

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html#sklearn.svm.SVR

參考連結:

http://www.csie.ntu.edu.tw/~cjlin/libsvm/

http://scikit-learn.org/stable/modules/svm.html

http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf