2013-10-17 28 views
6

我有一個數據集進行分類。通過使用KNN算法,我得到了90%的準確度,但通過使用SVM,我只能夠超過70%。 SVM不比KNN好。我知道這可能是愚蠢的問,但是,什麼是SVM的參數,將給出近似的結果作爲KNN算法。我在matlab上使用libsvm包R2008支持向量機vs K最近鄰居

+2

這個問題似乎是題外話題,因爲它是關於機器學習,並且更適合http://stats.stackexchange.com/ – Shai

+0

所以機器學習不是編碼的一部分嗎?這是一個開放的平臺,任何人都可以自由地提出任何問題,只要它與編碼有關,並且需要人們進行頭腦風暴。所以如果你沒有發現它有用,你可以遠離這個討論並讓其他人蔘與。 –

+0

我不認爲它不屬於這裏,我只是想你會在更專門的論壇上找到更多知情的觀衆和更好的答案,例如http://stats.stackexchange.com – Shai

回答

8

kNN和SVM表示不同的學習方法。每種方法都意味着底層數據的模型不同。

支持向量機假定存在一個分離數據點的超平面(相當有限的假設),而kNN試圖以非參數方式近似分析數據的基本分佈(parsen窗估計器的粗略近似)。

您必須查看場景的具體情況,以便更好地決定使用哪種算法和配置。

+2

「支持向量機假定存在一個分離數據點的超平面(相當有限制的假設)」實際上它並不是限制性的,帶有RBF核的SVM可以用任何標籤組合來分散任何數據集。 – Pedrom

+0

@Pedrom的確內核SVM是一個非常強大的工具 – Shai

+1

@ValentinHeinitz你真的不希望在10行中得到準確的解釋嗎? – Shai

6

這實際上取決於您使用的數據集。如果你有像這個圖像的第一行(http://scikit-learn.org/stable/_images/plot_classifier_comparison_1.png)kNN將工作得很好,線性SVM真的很糟糕。

如果您希望SVM執行得更好,您可以使用像圖片中那樣的基於內核的SVM(它使用rbf內核)。

如果您正在使用scikit學習的巨蟒,你可以玩了一下,代碼這裏來看看如何使用內核SVM http://scikit-learn.org/stable/modules/svm.html

5

k近鄰基本上說:「如果你接近座標x,則分類將與x觀察到的結果相似「。在SVM中,一個近似的模擬將使用具有「小」帶寬參數的高維內核,因爲這會導致SVM過度配合。也就是說,SVM將更接近於「如果你接近於座標x,那麼分類將類似於在x處觀察到的分類」。

我建議您從高斯內核開始,並檢查不同參數的結果。根據我自己的經驗(當然,關注於某些類型的數據集,因此您的里程可能會有所不同),調整後的SVM優於調整後的kNN。

對您的問題:

1)您如何選擇kNN?

2)您嘗試過哪些參數用於SVM?

3)您是在測量樣本內還是樣本外的準確性?