簡體   English   中英

在Matlab中使用LibSVM的一類SVM-概念

[英]One Class SVM using LibSVM in Matlab - Conceptual

也許這是一個簡單的問題,但是我想確保我理解一類SVM的LibSVM實現的概念基礎,以及是否允許我做些什么。

在這種情況下,我將使用一類SVM進行異常檢測和刪除。 在更大的時間序列預測模型中將其用作數據預處理步驟。 就是說,我有一個Y向量(這是我們要嘗試預測的數量,並且是連續的,而不是類標簽)和一個X矩陣(用於預測的連續特征)。 由於我想在預處理步驟的早期檢測數據中的異常值,因此我尚未對X矩陣進行規范化或滯后以用於預測,或為此趨勢去趨勢/去除噪聲/或以其他方式處理Y向量(已縮放)到[-1,1]之內)。 我的主要問題是像這樣(使用libSVM)對一類SVM建模是否正確:

svmod = svmtrain(ones(size(Y,1),1),Y,'-s 2 -t 2 -g 0.00001 -n 0.01');
[od,~,~] = svmpredict(ones(size(Y,1),1),Y,svmod);

結果模型確實產生了與我期望的性能相符的性能(99%左右的預測精度,這意味着1%的觀測值是異常值)。 但是我之所以這樣問,是因為在關於一類SVM的其他問題中,人們似乎在使用X矩陣,而我使用Y。感謝您的幫助。

您在這里所做的不過是花哨的范圍檢查。 如果您不願意使用X查找Y離群值 (即使您確實應該這樣做),則只需檢查Y的分布來查找離群值,而不是使用這種即興的SVM解決方案,會更簡單,更好。 Y上下0.5個百分點)。

實際上,這可能甚至與您真正想做的事情還差得很遠。 通過這種設置,您可以將Y值視為異常值,而無需考慮任何上下文(例如X )。 您為什么要使用RBF,又是如何得出gamma特定值的呢? 內核對於一維數據來說是徹底的殺傷力。

其次,您正在訓練和測試相同的數據( Y )。 每次發生這種情況,小貓都會死亡。 一類SVM嘗試建立一個識別訓練數據的模型,不應將其用於生成訓練數據的同一數據。 請想想小貓。


此外,請注意,一類SVM的nu參數控制分類器將接受的異常值數量。 LIBSVM實施文檔 (第4頁)對此進行了解釋: 證明nu是訓練誤差分數的上限,是支持向量分數的下限 換句話說:您的訓練選項明確指出最多可以拒絕1%的數據。 對於一類SVM, 可以should代替can

因此,當您說生成的模型確實產生了與我所期望的一致的性能時 ...當然,按照定義,它確實可以產生。 由於您已設置nu=0.01 ,模型拒絕了1%的數據,因此將其標記為異常值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM