关于机器学习你必须要了解的事情
原文:Pedro?Domingos,?A?Few?Useful?Things?to?Know?about?Machine?Learning
?
?1.?泛化效果是機器學習的唯一目標
訓練集上的效果無關緊要,泛化效果是機器學習的唯一目標。稍極端的例子,如果訓練集準確率為0%,但隨機取的新數據集上準確率為60%。也好過訓練集80%,新數據40%的結果。這點不僅對機器學習重要,即使是人工規則,也要審視選定的規則有沒有泛化意義,僅僅讓標準集效果更好或更差一樣沒有意義。
?
2.?機器學習算法的三維
算法除參數可設外,還有其它維度可改。任何一個機器學習算法都由三維組成:模型假設、誤差評估方法(cost?function)、求解方法。除第一維不可變動外(那就換模型了),后兩維都是可變的。
1)模型假設(Representation)。KNN,SVM中假設特征距離近的instance是一類的;NaiveBayse假設特征條件獨立;Logistic?Regression假設feature對結果貢獻都是線性的;等等。假設如果不對就不該選此模型,或選這些feature。
2)誤差評估方法(cost?function,Evaluation),即使一個模型也可以用多種cost?function,決策樹用熵(信息增益),或用均方差,其實也可以用準確率和錯誤率。哪種效果好呢?也許我們并沒有考慮過,只知道C4.5是用信息增益就以為它就是唯一答案。不同的應用場景可能有不同答案。
3)求解方法(Optimization)。最優化的問題都有多種求解方法:貪心、動態規劃、梯度下降、Quadratic計算。一個模型可以有多個求解方法,例如C4.5用的是貪心,貪心一定是最好的方法嗎?也許出于性能考慮我們最終仍傾向于它,但每到此時不妨問問。
?
3.?No?free?lunch
模型是一個杠桿,人的經驗+data產出任一前者無法達到的能量。如果一個模型不引入任何假設就退化為記憶+統計,全賴data。但哪怕是最簡單的bool型feature,有N個feature就有2^N個要學的feature種類,對應至少這么多的data,20個feature就要1024*1024個data,100個feature呢?實際中uniq的data根本沒有那么多。對于那些沒被data覆蓋的坑,任何模型算法的效果都不會比拋硬幣隨機猜的效果更好(無論在訓練集上擬合好壞,其泛化效果都和拋硬幣一樣)。這就是"no?free?lunch"。
即使一個模型隱含了某個假設,若輸入feature無法和這些假設契合,對模型來說同樣什么都學不到。因此我們必須加入人的經驗,這就體現在我們利用人類知識選取哪些已知有用的feature(而不是羅列所有原始feature讓模型自己挑、自己組合),同時我們知道這些feature能夠直接地滿足我們所選模型的假設。或者反過來,我們選擇模型的一個標準是,我們是否知道該選哪些feature來很好地支持這個模型假設。?
?
4.?過擬合的幫兇
既然泛化能力為唯一目標,過擬合就是最大的罪人。當training和testing的個體(尤指features)很不一樣,或者使用了一些非常靈活的模型(決策樹),或者即便是不太靈活的線性模型但feature個數很大(導致train--test的features的差異更大,泛化能力變弱)時,過擬合非常容易發生,training?set?和?testing?set?必須嚴格隔開。
1)不具代表性的訓練集
不過擬合才怪。訓練集要盡量隨機抽取。
2)模型靈活。
在數據有限的前提下,學習能力強的模型不一定比能力差的模型結果好。決策樹是最強學習能力的模型(它能窮舉所有feature取值組合),樸素貝葉斯則受諸多假設限制。所以只要想學到底,前者訓練可以做到100%準確率0?bais,而后者則只能做到一定準確率,bais始終存在;但在數據不充分的基礎上,強學習模型學得很充分,只能是依靠了很多“隨機巧合”的經驗,沒被數據覆蓋的坑的數量就是過擬合的程度。所以這個時候決策樹反而不如feature符合貝葉斯假設的學習效果好,因為假設的正確性提供了額外的杠桿信息。
3)feature過多
Curse?Of?Dimensionality.?泛化能力會隨著feature的增加而降低(確切的說是降低的可能性在增大)。增加feature能帶來好處,但同時也會帶來壞處。增加無關或過多feature可能讓模型變得更差。因為數據集不足以cover所有feature,罕見的feature導致過擬合更容易產生,過多常見的feature會淹沒真正有用的feature。而人類的直覺也只能理解到3維空間,高維空間的直覺往往是錯誤的。
?
5.?cross-validation的正確用法
cross-validation不是用來train?N個模型然后取平均做最終模型的。(大部分模型也沒法取平均融合)cross-validation是用來調整模型的外部參數的。即CV是一種利用Training?Set?tune外部參數的方法。10-fold?cross-validation實際上使用同一組外部參數train了10個模型實例,得到10個泛化準確率(分別在1/10的切片上test的準確率,而不是9/10上的training準確率),反應了當前參數setting的效果。當然也可以不用cross-validation,直接用一個獨立的test?set來tune參數,但是相對較小的test?set更容易導致tuning的過擬合。
?
原創博文,轉發請注明出處。
蘇冉旭的博客,http://hi.baidu.com/hehehehello/item/99de18188408a8f8dceecaad
下面轉載一篇讀后總結
http://www.cnblogs.com/SnakeHunt2012/archive/2013/02/18/2916232.html
- Learning = Representation + Evaluation + Optimization
- 表示方法確定了你能表示的空間是哪些,取決于你的問題是什么。
- 而評價函數為你的優化過程提供方向,其實就是一種衡量,衡量你現在的狀況:好,有多好;壞,有多壞,而且通常都用你的失真程度來衡量(J(theta) = 預測值 - 實際值)。
- 優化算法進行優化,目前我還只知道梯度下降還有求導這兩種手段,當然優化方法的好壞直接決定了你訓練模型的效率,如果你的損失函數J(theta)不是凸的,那么他也將決定你能不能取到最值或者取哪個極值,例如梯度下降就取不到最值,只能取極值。
- It is Generalization that Counts
- Data Alone is Not Enough
- Overfitting Has Many Faces
????? 跟光電效應一個道理,模型建立需要基本的溢出功。我是這樣理解過擬合的:我們把訓練數據看作是能量。那對于一個10次多項式的模型來說,在訓練的過程中可 以看做其中有10個數據的能量是用來搭建模型的,然后剩余的數據能量是用來調整這個模型使之優良,也就是使之對訓練樣例全體的誤差合最小。然而如果你所擁 有的能量小于十個獨立點的能量,也就是沒有達到建立模型的那個臨界。那么你訓練出來的根本就不是一個模型,用這個東西進行預測得出的結果也許就效果是隨機 的。
如果你的數據針對訓練樣例100%準確,而對于測試樣例只有50%準確,那么你的學習器很有可能過擬合了。正常情況至少應該是對于訓練樣例和測試樣例準確率都75%才對。如果把過擬合的結果畫出來,看上去就好像分界面鼓起了好多氣泡一樣。
????? 總的來說模型太復雜,容易過擬合,即使可以達到過擬合臨界,那么數據不足也會使得偏執比較高,但是如果數據足夠的話,足夠把偏執降下來的話,大模型精度是 很高的,他的方差小。如果你數據不足,你就不敢使用復雜模型,不得不使用簡單模型,而簡單的模型確實不容易過擬合,但他的準確度(精度)就是硬傷,偏執再 底,方差是硬傷。
????? 解決過擬合的辦法很多,其中最長用的就是在J函數后面再加一項專門用來控制參數的“正則項”。
我的理解就是避免你的某個參數或某些參數太大,因為過擬合常常最后的形狀是彎折特別多,如果遏制住參數的大小就可以避免他拐太多彎折,把你的多維曲面鋪平,就好象把氣泡擠了出去一樣。把過擬合的程度壓制在一個我們可以接受的范圍內。
????? 但我也擔心一個問題,就是添加正則項也就降低了模型本身的靈活性,所以我自己的建議是如果你很確定不會發生過擬合,或者你對你的數據非常有信心,那么去掉正則項的話你的模型會擬合的更好,當然這只是個建議。
- Intuition Fails in High Dimensions
????? 當然,計算也是個問題。不過最嚴重的還是高維度下的分布問題,在高維度下,物體的的多元高斯分布的質心離物體的均值通常很遠。看來我還需要補一補代數方面的知識。所以即便你的數據足夠,結果也不一定對。
- More Data Beats a Cleverer Algorithm
????? 時代不同了,80年代的時候缺的是數據,現在缺的是時間,如今我們更在乎算法的速度如何,這本來對復雜模型來講是好事,因為數據足夠就意味著可以選用高級的模型,這是原則上講,但事實上你用低級模型效果卻比高級模型要好。
????? 我自己的理解很淺顯,就是高級模型使用了更多的數據來用于“溢出功”。這就是個追擊問題,跑得快的后跑,跑得慢的先跑,即使你擁有的時間足夠讓跑得快的開始跑,但也不一定能保證結束的時候跑得快的比跑得慢的更遠。
????? 而文章中給出的解釋更有道理一些,他給出了一副圖,他說復雜的模型和簡單的模型,本質上都在做相同的事,就是把類似的數據分為一類,只不過他們對類似的定 義不同,但對于不是很苛刻的測試數據,無論哪種定義都能表現得正常。因為如果測試數據并不苛刻的情況下,分界面本身的形狀并不重要,重要的是他能不能位于 恰當的地方。而如果想讓高級模型體現出高級性,需要的不是大量的數據而是苛刻的數據,需要的是那些貼近分界的數據,這樣才能塑造好分界本身的形狀,使模型 本身的形狀成為優勢。我記得唐都鈺師兄有一次說一個比賽,他們給的標注數據特別苛刻,人都不能標注成那個樣子。為什么數據給的那么苛刻,不就是為了考你用 什么模型么。如果數據不苛刻,什么樣的模型都很不錯。
????? 總的來說,如果你的數據僅僅是多,那么明智的選擇還是低級模型。如果你的數據非常豐富,那么選擇高級模型還是有一定的道理。文章的建議是先用小模型,然后慢慢嘗試大的模型。
- Learn Many Models, Not Just One
????? 所以再后來,人們就開是選擇自己喜歡的算法,然后標榜自己的那個算法是最好的。這有點像今天你用Vim還是Emacs一樣。
????? 但再再后來,人們開始發現,與其選更好的那個,不如把不同的學習器組合起來,因為這樣的效果會比獨立的幾個學習器效果更好。
????? 他們發現學習器之間是可以進行集成的,集成的方法最簡單的有裝帶法[fn:5]其他的還有堆疊法(stacking)等等。話說在一次比賽[fn:6] 中,最終獲勝的兩個團隊的學習器都是組合出來的,他們都合并了100多個學習器,而且如果他們兩個再進行合并的話,效果會更好。
- Simplicity Dose Not Imply Accuracy
- Representable Dose Not Imply Learnable
????? 所以對于一個函數,你應該考慮的不只是他能不能表示出來,還有他能不能進行學習。多嘗試一些學習器總是好的。
- Correlation Does Not Imply Causation
????? 也許相關和因果兩者并沒有本質的區別,因為在物理世界對他們都沒有良好的定義,這是哲學的領域了。但我們要做的是預測什么樣的行為會導致什么樣的后果,這就是我們所在乎的“因果”。
總結
以上是生活随笔為你收集整理的关于机器学习你必须要了解的事情的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “最失败”LOL职业选手 竟是全民TV小
- 下一篇: Sublime优美设置(待续)