機器學習過度擬合問題一些原因
阿新 • • 發佈:2019-01-25
這幾天在訓練一個文字處理的機器學習演算法,使用支援向量機和決策樹演算法在訓練集上的資料的準確度特別高,但是在測試集上的資料的準確度確很低,於是陷入過度擬合的煩惱中,查詢資料發現一些多度擬合的看法。仔細想想確實在訓練時存在一些問題,第一:輸入變數多,由於缺乏對問題的根本認識,使用了很多無關變數,這個問題打算從其它途徑先認識變數和問題的關係;第二:資料的噪聲可能是比較大,沒有考慮到關鍵的特徵和資訊。下面的幾段文字是一些關於多度擬合的認識:
過度擬合(overfitting)是指資料模型在訓練集裡表現非常滿意,但是一旦應用到真實業務實踐時,效果大打折扣;換成學術化語言描述,就是模型對樣本資料擬合非常好,但是對於樣本資料外的應用資料,擬合效果非常差。在我們資料分析挖掘業務實踐中,就是“模型搭建時表現看上去非常好,但是應用到具體業務實踐時,模型效果顯著下降,包括準確率、精度、效果等等顯著下降”。
我自己見識有限,目光短淺,無法窮舉主要的原因和避免的方法,只能班門弄斧,拋磚引玉,說說我自己的一孔之見了,期待各位的指正和增補,我給各位獻醜了。
過擬合的第一個原因,就是建模樣本抽取錯誤,包括(但不限於)樣本數量太少,抽樣方法錯誤,抽樣時沒有足夠正確考慮業務場景或業務特點,等等導致抽出的樣本資料不能有效足夠代表業務邏輯或業務場景;
過擬合的第二個原因,就是樣本里的噪音資料干擾過大,大到模型過分記住了噪音特徵,反而忽略了真實的輸入輸出間的關係;
過擬合的第三個原因,就是在決策樹模型搭建中,如果我們對於決策樹的生長沒有合理的限制和修剪的話,決策樹的自由生長有可能每片葉子裡只包含單純的事件資料(event)或非事件資料(no event),可以想象,這種決策樹當然可以完美匹配(擬合)訓練資料,但是一旦應用到新的業務真實資料時,效果是一塌糊塗。
過擬合的第四個原因,就是建模時的“邏輯假設”到了模型應用時已經不能成立了。任何預測模型都是在假設的基礎上才可以搭建和應用的,常用的假設包括:假設歷史資料可以推測未來,假設業務環節沒有發生顯著變化,假設建模資料與後來的應用資料是相似的,等等。如果上述假設違反了業務場景的話,根據這些假設搭建的模型當然是無法有效應用的。
過擬合的第五個原因,就是建模時使用了太多的輸入變數,這跟上面第二點(噪音資料)有些類似,資料探勘新人常常犯這個錯誤,自己不做分析判斷,把所有的變數交給軟體或者機器去“撞大運”。須知,一個穩定優良的模型一定要遵循建模輸入變數“少而精”的原則的。
上面的原因都是現象,但是其本質只有一個,那就是“業務理解錯誤造成的”,無論是抽樣,還是噪音,還是決策樹,神經網路等等,如果我們對於業務背景和業務知識非常瞭解,非常透徹的話,一定是可以避免絕大多數過擬合現象產生的。因為在模型從確定需求,到思路討論,到搭建,到業務應用驗證,各個環節都是可以用業務敏感來防止過擬合於未然的。
入世,出世,都是一樣的“道”,所謂“道”從來不離開我們半步,只是看我們自身是否足夠清淨,足夠醒悟,足夠真實而已。佛法有八萬四千法門,但是這些林林總總的都是不同的方便路徑,歸根結底,佛法的根本只是“認識我們與生俱來的本來面目,真如自性”而已。
過擬合的產生,原因種種,不一而足,但是這種分類和剖析只是人為的方便而已,防止過擬合的終極思路就是真正透徹理解業務背景和業務邏輯,有了這個根本,我們一定可以正確抽樣,一定可以發現排除噪聲資料,一定可以在決策樹、神經網路等演算法中有效防止過擬合產生的。
當然,除了上面“業務透徹瞭解”這個根本外,也有一些技術層面的方法來防止過擬合的產生,雖然是“術”的層面,但是很多人熱衷於這些技巧,所以,在這裡也順便列舉如下:
最基本的技術手段,就是合理、有效抽樣;包括分層抽樣,過抽樣,等等,用不同的樣本去檢驗模型;
另外,事前準備幾個不同時間視窗,不同範圍的測試資料集、驗證資料集,把模型在不同的資料集裡分別“交叉檢驗”,是目前業界防止過擬合的最常用的手段了;
第三,建模時目標觀測值的數量太少,如何分割訓練集和驗證集的比例,需要建模人員靈活掌握;
第四,如果資料太少的話,謹慎使用神經網路模型,只有足夠多的資料的情況下,神經網路模型才可以有效防止過擬合的產生。並且,使用神經網路時,一定要事先有效篩選輸入變數,千萬不能一股腦把所有變數放進去。
說一千,道一萬,上面的文字都只是文字而已,如何防止過擬合,這個最終只能靠你在實踐中自己去體會,去摸索,去感覺。這個世界上,把佛法,佛學掛在嘴邊的人比比皆是,少有人能真正“信、解、行、證”,所以成佛作祖在我們這個時代實在是太稀有太罕見了。我自己也慚愧至極,羅裡囉嗦,胡說八道總結了這些過擬合的原因和防止對策,但是我自己又對資料探勘實踐應用瞭解多少呢?我又有什麼資格在這裡誇誇其談呢?我這幾天一直在思考“網際網路行業資料化運營的桎梏”,在總結種種資料化運營效果不好的原因時,也忘記了“過擬合”這個技術層面,可見我也只會嘴上誇誇其談,行動上沒有半點功夫,我對自己充滿了鄙視。
過度擬合(overfitting)是指資料模型在訓練集裡表現非常滿意,但是一旦應用到真實業務實踐時,效果大打折扣;換成學術化語言描述,就是模型對樣本資料擬合非常好,但是對於樣本資料外的應用資料,擬合效果非常差。在我們資料分析挖掘業務實踐中,就是“模型搭建時表現看上去非常好,但是應用到具體業務實踐時,模型效果顯著下降,包括準確率、精度、效果等等顯著下降”。
我自己見識有限,目光短淺,無法窮舉主要的原因和避免的方法,只能班門弄斧,拋磚引玉,說說我自己的一孔之見了,期待各位的指正和增補,我給各位獻醜了。
過擬合的第一個原因,就是建模樣本抽取錯誤,包括(但不限於)樣本數量太少,抽樣方法錯誤,抽樣時沒有足夠正確考慮業務場景或業務特點,等等導致抽出的樣本資料不能有效足夠代表業務邏輯或業務場景;
過擬合的第二個原因,就是樣本里的噪音資料干擾過大,大到模型過分記住了噪音特徵,反而忽略了真實的輸入輸出間的關係;
過擬合的第三個原因,就是在決策樹模型搭建中,如果我們對於決策樹的生長沒有合理的限制和修剪的話,決策樹的自由生長有可能每片葉子裡只包含單純的事件資料(event)或非事件資料(no event),可以想象,這種決策樹當然可以完美匹配(擬合)訓練資料,但是一旦應用到新的業務真實資料時,效果是一塌糊塗。
過擬合的第四個原因,就是建模時的“邏輯假設”到了模型應用時已經不能成立了。任何預測模型都是在假設的基礎上才可以搭建和應用的,常用的假設包括:假設歷史資料可以推測未來,假設業務環節沒有發生顯著變化,假設建模資料與後來的應用資料是相似的,等等。如果上述假設違反了業務場景的話,根據這些假設搭建的模型當然是無法有效應用的。
過擬合的第五個原因,就是建模時使用了太多的輸入變數,這跟上面第二點(噪音資料)有些類似,資料探勘新人常常犯這個錯誤,自己不做分析判斷,把所有的變數交給軟體或者機器去“撞大運”。須知,一個穩定優良的模型一定要遵循建模輸入變數“少而精”的原則的。
上面的原因都是現象,但是其本質只有一個,那就是“業務理解錯誤造成的”,無論是抽樣,還是噪音,還是決策樹,神經網路等等,如果我們對於業務背景和業務知識非常瞭解,非常透徹的話,一定是可以避免絕大多數過擬合現象產生的。因為在模型從確定需求,到思路討論,到搭建,到業務應用驗證,各個環節都是可以用業務敏感來防止過擬合於未然的。
入世,出世,都是一樣的“道”,所謂“道”從來不離開我們半步,只是看我們自身是否足夠清淨,足夠醒悟,足夠真實而已。佛法有八萬四千法門,但是這些林林總總的都是不同的方便路徑,歸根結底,佛法的根本只是“認識我們與生俱來的本來面目,真如自性”而已。
過擬合的產生,原因種種,不一而足,但是這種分類和剖析只是人為的方便而已,防止過擬合的終極思路就是真正透徹理解業務背景和業務邏輯,有了這個根本,我們一定可以正確抽樣,一定可以發現排除噪聲資料,一定可以在決策樹、神經網路等演算法中有效防止過擬合產生的。
當然,除了上面“業務透徹瞭解”這個根本外,也有一些技術層面的方法來防止過擬合的產生,雖然是“術”的層面,但是很多人熱衷於這些技巧,所以,在這裡也順便列舉如下:
最基本的技術手段,就是合理、有效抽樣;包括分層抽樣,過抽樣,等等,用不同的樣本去檢驗模型;
另外,事前準備幾個不同時間視窗,不同範圍的測試資料集、驗證資料集,把模型在不同的資料集裡分別“交叉檢驗”,是目前業界防止過擬合的最常用的手段了;
第三,建模時目標觀測值的數量太少,如何分割訓練集和驗證集的比例,需要建模人員靈活掌握;
第四,如果資料太少的話,謹慎使用神經網路模型,只有足夠多的資料的情況下,神經網路模型才可以有效防止過擬合的產生。並且,使用神經網路時,一定要事先有效篩選輸入變數,千萬不能一股腦把所有變數放進去。
說一千,道一萬,上面的文字都只是文字而已,如何防止過擬合,這個最終只能靠你在實踐中自己去體會,去摸索,去感覺。這個世界上,把佛法,佛學掛在嘴邊的人比比皆是,少有人能真正“信、解、行、證”,所以成佛作祖在我們這個時代實在是太稀有太罕見了。我自己也慚愧至極,羅裡囉嗦,胡說八道總結了這些過擬合的原因和防止對策,但是我自己又對資料探勘實踐應用瞭解多少呢?我又有什麼資格在這裡誇誇其談呢?我這幾天一直在思考“網際網路行業資料化運營的桎梏”,在總結種種資料化運營效果不好的原因時,也忘記了“過擬合”這個技術層面,可見我也只會嘴上誇誇其談,行動上沒有半點功夫,我對自己充滿了鄙視。