如何使用sklearn中的SVM(SVC;SVR)
SVM分類演算法我們前面已經講過了,那麼我們平時要用到SVM的時候,除了在MATLAB中呼叫libsvm之外,我們的Python中的sklean也已經集成了SVM演算法。這篇部落格就講一下sklearn中的SVM如何呼叫。
我們先說個例子,看看簡單的使用sklean中的SVC(support vectors classification)怎麼使用。
- from sklearn import svm
- X = [[0, 0], [1, 1], [1, 0]] # training samples
- y = [0, 1, 1] # training target
-
clf = svm.SVC() # class
- clf.fit(X, y) # training the svc model
- result = clf.predict([2, 2]) # predict the target of testing samples
- print result # target
- print clf.support_vectors_ #support vectors
- print clf.support_ # indeices of support vectors
- print clf.n_support_ # number of support vectors for each class
其中有一些註釋幫助理解,其實sklearn中呼叫
關於SVC的一些用法,可以參考下面的連結:
http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC
SVC中也可以實現多類分類問題,而且預設使用的是1 vs. 1的投票機制,這種機制的優缺點我們在前面的博文中已經提到了,需要建立的分類器很多很多。。。
SVC也考慮到了累不平衡問題,處理方式在fit方法下面。如下:
Fit the SVM model according to the given training data.
Parameters: |
X : {array-like, sparse matrix}, shape (n_samples, n_features)
y : array-like, shape (n_samples,)
sample_weight : array-like, shape (n_samples,)
|
---|---|
Returns: |
self : object
|
後面的sample_weight和一般的代價敏感相似,只不過這裡是每個樣本有一個權重。在不平衡學習中,這裡增加誤分類懲罰項的技術是屬於cost sensitive learning 的範疇,其中還有許多更加有效的方式來處理類不平衡問題。
SVM既可以用來分類,就是SVC;又可以用來預測,或者成為迴歸,就是SVR。sklearn中的svm模組中也集成了SVR類。
我們也使用一個小例子說明SVR怎麼用。
- X = [[0, 0], [1, 1]]
- y = [0.5, 1.5]
- clf = svm.SVR()
- clf.fit(X, y)
- result = clf.predict([2, 2])
- 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