1. 程式人生 > 其它 >Scikit-learn實戰之 SVM迴歸分析、密度估計、異常點檢測

Scikit-learn實戰之 SVM迴歸分析、密度估計、異常點檢測

Scikit-learn實戰之

SVM迴歸分析、密度估計

異常點檢測

1. SVM迴歸

SVM的支援向量的方法能夠被擴充套件以解決迴歸問題。這種方法被稱之為SVR(Support Vector Regression 支援向量迴歸)。該模型是由SVC(支援向量分類)演化而來,它依然依賴於訓練資料的子集。因為構建Model的損失函式並不關心位於邊緣上的訓練點(樣本)集。類似的,由支援向量迴歸(SVR)生成的模型僅僅依賴於訓練資料的某個子集,因為構建模型的損失函式忽略了所有的接近模型預測的訓練資料。

Scikit-learn提供了三種不同的支援向量迴歸的實現:SVR, NuSVR 和 LinearSVR。LinearSVR提供了最快的實現,但是它僅僅實現了線性核函式。如果想搞清楚它們三者的具體實現細節,請參考:

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

作為迴歸分析的引數,y必須是浮點數型:

程式碼

>>> from sklearn import svm
>>> X = [ [0, 0], [2, 2] ]
>>> y = [0.5, 2.5]
>>> clf = svm.SVR()
>>> clf.fit(X, y)
>>> clf.predict( [ [1, 1] ] )
array( [ 1.5] )

2. 密度估計、異常點檢測

One-class SVM用於異常點檢測。也就是說,給一個樣本集合,它將檢測該點集的軟邊緣以對將來的新的檢測點是否屬於該集合加以判斷。該類的實現是OneClassSVM。檢測結果為1表示內部點,-1表示離群點。

程式碼

>>> from sklearn import svm
>>> X = [ [0, 0], [1, 1], [2, 0], [0, 3], [-3, 0],
                [-1, -1], [-2, -2], [-2, 2], [2, -2] ]
>>> Y = [ [0.5, 0.5], [-2.5, 0], [9, 9], [5, -2] ]
>>> estimate = svm.OneClassSVM()
>>> estimate.fit(X)
>>> results = estimate.predict(Y)
>>> print(results)
 [ 1.  1. -1. -1.]

3. 複雜性分析

SVM是一個強大的工具,但是它對計算和儲存需求隨著訓練樣本的增加而急劇增長。

SVM的核心是一個二次規劃問題,計算的複雜度在:

之間。

作者:章華燕

小編:趙一帆