2010-03-10 125 views
12

我覺得這個問題有點棘手。也許有人知道一個方法來回答這個問題。想象一下,你有一個數據集(訓練數據),你不知道它是什麼。爲了推斷分類算法以對這些數據進行分類,您將查看哪些訓練數據特徵?我們可以說什麼,我們是否應該使用非線性或線性分類算法?選擇正確的分類算法。線性還是非線性?

順便說一下,我使用WEKA來分析數據。

有什麼建議嗎? 謝謝。

+3

[誰向誰開始關閉此帖]:這_is_編程相關! – mjv 2010-03-10 02:02:17

+0

@mjv:你是什麼意思? – 2010-03-10 02:12:36

+0

不用擔心;具有較高聲譽的用戶可以看到關閉問題的投票數,並且我注意到一個投票,原因是「NPR」(不是相關的)。我的評論是支持這個問題的,這表明雖然有些理論和數學聽起來,但這個問題與編程有很大關係。這個問題看起來很安全,沒有其他選票要結束(需要5個)。 – mjv 2010-03-10 02:18:51

回答

15

哇,所以你有一些訓練數據,你不知道你是否在查看錶示文檔中的單詞的特徵,或者是單元中的基因,並且需要調整分類器。那麼,因爲你沒有任何語義信息,你將不得不通過查看數據集的統計特性來做到這一點。

首先,爲了制定問題,這不僅僅是線性與非線性。如果你真的希望對這些數據進行分類,你真正需要做的是爲分類器選擇一個核函數,這個函數可能是線性的,或者是非線性的(高斯,多項式,雙曲線等)。另外,每個核函數都可能採用一個或多個需要設置的參數確定一個給定分類問題的最佳核函數和參數集並不是一個真正解決的問題,只有有用的啓發式算法,並且如果谷歌選擇了「內核函數」或「選擇內核函數「,你會被許多研究論文提出和測試各種方法,雖然有很多方法,但最基本和最好的方法之一是對參數進行梯度下降 - 基本上你可以嘗試一種內核方法和參數集,在一半的數據點上訓練,看看你是怎麼做的,然後你嘗試一組不同的參數,看看你是怎麼做的,你將參數向準確度最好的方向移動,直到你滿意tory結果。

如果您不需要經歷所有這些複雜性以找到一個好的核函數,並且只需要一個線性或非線性的答案。那麼這個問題主要歸結爲兩點:非線性分類器將具有較高的過度擬合風險(不一致),因爲它們具有更多的自由度。他們可能會受到分類器僅僅記住一組好數據點的困擾,而不會提出一個好的概括。另一方面,線性分類器具有較小的擬合自由度,並且在數據不是線性分離的情況下,將無法找到一個好的決策函數並且具有較高的錯誤率。

不幸的是,我不知道一個更好的數學解決方案來回答「這個數據線性分離」這個問題,而不是僅僅嘗試分類器本身,看看它是如何執行的。爲此,你需要比我更聰明的答案。

編輯:本研究論文描述了一種算法,它看起來應該能夠確定一個給定的數據集是如何接近線性分離的。

http://www2.ift.ulaval.ca/~mmarchand/publications/wcnn93aa.pdf

+0

謝謝bdk。不幸的是,我只有實值變量和它們的類(如x,y),這使得不可能對數據做出任何有意義的結論。正如你所說,我唯一能做的就是查看數據的統計屬性。我將會看看這篇論文。謝謝... – 2010-03-10 03:13:35

15

這其實是在一個;-)

  • 特徵選擇
  • 線性問題或不

添加 「算法選擇」,和你可能有三個最基本的分類器設計問題。

請注意,這是一個好東西您沒有任何領域的專業知識,可以讓您指導選擇特徵和/或斷言特徵空間的線性。這就是數據挖掘的樂趣:在沒有先驗知識的情況下推斷這些信息。 (順便說一句,雖然領域專業知識有助於仔細檢查分類器的結果,但過多的先驗知識可能會讓您錯過良好的挖掘機會)。沒有任何這樣的先驗知識,你就不得不建立健全的方法論並對結果進行仔細的審查。

很難提供具體的指導,部分原因是因爲在問題中遺漏了很多細節,並且也因爲我在某種程度上忽略了這一點;-)。從來沒有少,我希望下面的一般建議將有助於

  • 對於每次嘗試(或者更精確地對每一組對於給定的算法參數),您將需要運行許多測試算法。理論可以是非常有用的,但是仍然會有很多「試錯」。你會發現交叉驗證一個有價值的技術。
    簡而言之,[並根據可用訓練數據的大小],將訓練數據隨機分成幾個部分,並在這些部分中的一個[或幾個]部分上訓練分類器,然後評估分類器的性能在另一個[或幾個]部分。對於每一次這樣的運行,您都會測量各種性能指標,例如錯誤分類錯誤(MCE),除了告訴您分類器是如何執行的,這些指標或者它們的可變性將提供關於所選功能的相關性和/或他們缺乏規模或線性。

  • 獨立線性假設,要標準化值的數字特徵是有用的。這有助於具有奇數範圍的特徵等。
    在每個維度內,建立範圍兩邊的2.5個標準差範圍內的範圍,並根據此範圍將特徵值轉換爲百分比。

  • 將標稱屬性轉換爲二進制,創建儘可能多的維度存在標稱屬性的不同值。 (我認爲許多算法優化器會爲你做這個)

  • 一旦你確定了一個或幾個分類器具有相對不錯的表現(比如33%MCE),通過修改這樣的分類器來執行相同的測試序列一次只有一個參數。例如,刪除一些功能,並查看產生的較低維度分類程序是否改進或降級。

  • 損失係數是一個非常敏感的參數。嘗試並堅持一個「合理的」,但對大部分測試來說可能不是最理想的價值,最後微調損失。

  • 學習利用SVM優化器提供的「轉儲」信息。這些結果提供了非常有價值的信息,以什麼優化「認爲」

  • 記住什麼工作非常出色王氏在給定域中的定數據集中可以從另一個域數據很差執行...

  • 咖啡很好,不是太多。當所有失敗,使它愛爾蘭;-)