機器學習算法須要注意的一些問題

原文:http://blog.csdn.net/xmu_jupiter/article/details/47108523html

對於機器學習的實際運用,光停留在知道了解的層面還不夠,咱們須要對實際中容易遇到的一些問題進行深刻的挖掘理解。我打算將一些瑣碎的知識點作一個整理。算法

1 數據不平衡問題

這個問題是常常遇到的。就拿有監督的學習的二分類問題來講吧,咱們須要正例和負例樣本的標註。若是咱們拿到的訓練數據正例不多負例不少,那麼直接拿來作分類確定是不行的。一般須要作如下方案處理:markdown

1.1 數據集角度

經過調整數據集中正負樣本的比例來解決數據不平衡,方法有:網絡

1.1.1 增長正樣本數量

正樣本原本就少,怎麼增長呢?方法是直接複製已有的正樣本丟進訓練集。這樣能夠稍微緩解正樣本缺失的困境,可是容易帶來一個問題,就是過擬合的潛在危險。由於這樣粗暴的引入正樣本並無增長數據集的樣本多樣性。如何設計複製哪些正樣本有一些技巧,好比選擇有特定意義的表明性的那些。數據結構

1.1.2 減小負樣本的數量

首先這是一個通用的合理的方法,可是負樣本的減小必然致使數據多樣性的損失。有一種方法能夠緩解這個問題,那就是相似於隨機森林方法,每次正樣本數量不變,隨機選擇等量的不一樣的負樣本進行模型訓練,反覆幾回,訓練多個模型,最後全部的模型投票決定最終的分類結果。框架

1.2 損失函數的角度

能夠從新修改模型訓練的損失函數,使得錯分正樣本的損失變大,錯分負樣本的損失變小。這樣訓練出來的模型就會對正負樣本有一個合理的判斷。機器學習

更多於此話題相關內容請移步: 
分類中數據不平衡問題的解決經驗 
機器學習中的數據不平衡問題函數

2 異常值處理問題

說到異常值,首先得說一下數據量的問題。異常值不是缺失值,更不是錯誤值,一樣是真實狀況的表現,之因此以爲一個數據異常,是由於咱們可以用到的數據量不夠大,沒法準確地表明整個此類數據的分佈。若是把異常值放在海量數據的大背景下,那麼這個異常值也就不那麼異常了。post

下載摘自某大牛博客一段話:性能

異常值並不是錯誤值,而一樣是真實狀況的表現,咱們之因此認爲異常,只是由於咱們的數據量不足夠大而已。可是從實際的工業界來看,考慮到實際的計算能力以及效果,大多數公司都會對大數據作「去噪」,那麼在去噪的過程當中去除的不只僅是噪音,也包括「異常點」,而這些「異常點」,偏偏把大數據的廣覆蓋度給下降了,因而利用大數據反而比小數據更容易產生趨同的現象。尤爲對於推薦系統來講,這些「異常點」的觀察其實才是「個性化」的極致。

既然說到大數據,一樣是這位大牛的一段話:

說得學術一些,咱們不妨認爲大數據是頻率學派對於貝葉斯學派一次強有力的逆襲。那麼既然說到這個份上了,咱們不妨思考一下,咱們是否是有但願在迴歸貝葉斯學派,利用先驗信息+小數據完成對大數據的反擊呢?

某些機器學習算法對異常值很敏感,好比:K-means聚類,AdaBoost。使用此類算法必須處理異常值。 
某些算法擁有對異常值不敏感的特性,好比:KNN,隨機森林。

如何處理異常值?最簡單的方法就是直接丟掉。其它方法我後面會繼續研究。

3 過擬合問題

過擬合可要命了,好不容易訓練一個模型,來一些測試數據,分類結果很是的差。過擬合產生的緣由:

  • 訓練數據太少
  • 模型太複雜
  • 訓練數據中存在噪聲點(就算訓練數據足夠多)

幾乎全部的機器學習算法都會容易遇到過擬合的問題。因此先說一些解決過擬合的通用辦法。固然,首先得保證訓練數據不要太少。

3.1 正則化

正則化就是在模型的優化目標上再加入一個懲罰因子。這樣模型的優化策略就從經驗風險最小化變爲結構風險最小化。

  • 線性迴歸正則化就是嶺迴歸和lasso迴歸,分別對應L2,L1罰項。
  • 決策樹正則化就是剪枝,一般把子節點個數做爲罰項。

3.2 交叉驗證

在數據量足夠的狀況下,能夠採用交叉驗證的方式避免過擬合,甚至能夠在正則化以後再作一次交叉驗證。

其它詳細研究請點擊: 
機器學習過分擬合問題一些緣由

4 特徵工程問題

有句話必須得放在前面:數據和特徵決定了機器學習的上限,而模型和算法只是逼近這個上限而已。因而可知,特徵工程尤爲是特徵選擇在機器學習中佔有至關重要的地位。

4.1 什麼是特徵工程

首先拽一段英文定義:

Feature engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models, resulting in improved model accuracy on unseen data.

in a word, feature engineering is manually designing what the input x’s should be.

4.2 爲何要進行特徵降維和特徵選擇

主要是出於以下考慮: 
1. 特徵維數越高,模型越容易過擬合,此時更復雜的模型就很差用。 
2. 相互獨立的特徵維數越高,在模型不變的狀況下,在測試集上達到相同的效果表現所須要的訓練樣本的數目就越大。 
3. 特徵數量增長帶來的訓練、測試以及存儲的開銷都會增大。 
4. 在某些模型中,例如基於距離計算的模型KMeans,KNN等模型,在進行距離計算時,維度太高會影響精度和性能。 
5. 可視化分析的須要。在低維的狀況下,例如二維,三維,咱們能夠把數據繪製出來,可視化地看到數據。當維度增高時,就難以繪製出來了。

在機器學習中,有一個很是經典的維度災難的概念。用來描述當空間維度增長時,分析和組織高維空間,因體積指數增長而遇到各類問題場景。例如,100個平均分佈的點能把一個單位區間以每一個點距離不超過0.01採樣;而當維度增長到10後,若是以相鄰點距離不超過0.01小方格採樣單位超一單位超正方體,則須要10^20 個採樣點。

正是因爲高維特徵有如上描述的各類各樣的問題,因此咱們須要進行特徵降維和特徵選擇等工做。

4.3 特徵提取

對於高維特徵(成百上千維),好比圖像,文本,聲音的特徵,特徵的每一維沒有顯著意義的,最好要對特徵先進行降維,也就是從初始數據中提取有用的信息。經過降維,將高維空間中的數據集映射到低維空間數據,同時儘量少地丟失信息,或者降維後的數據點儘量地容易被區分。這樣,能夠提取出顯著特徵,避免維度災難,還能夠避免特徵之間的線性相關性。

特徵降維經常使用的算法有PCA,LDA等。

PCA算法經過協方差矩陣的特徵值分解可以獲得數據的主成分,以二維特徵爲例,兩個特徵之間可能存在線性關係(例如運動的時速和秒速度),這樣就形成了第二維信息是冗餘的。PCA的目標是發現這種特徵之間的線性關係,並去除。

LDA算法考慮label,降維後的數據點儘量地容易被區分。

4.4 特徵選擇

一般遇到的狀況是:特徵不夠用。。在這種狀況下,咱們就要在設計算法以前,好好地挖掘一下特徵。對於邏輯斯蒂迴歸和決策樹,每一維的特徵是有確切意義的。咱們就要從各個方面,抽取與目標相關的全部可用信息做爲特徵。這個過程可能會比較痛苦。。

而後,是否是特徵越多越好?其實也不是。盜一張圖過來以下: 
這裏寫圖片描述 
能夠發現,剛開始模型的準確率隨着特徵數量的增長而增長,當增長到必定程度便趨於穩定了。若是還要強行加入如此多的特徵,反而多此一舉,容易過擬合。而後,若是出現特徵過多出現過擬合的狀況,就要適當地進行參數縮減。對於邏輯斯蒂迴歸,某一維特徵對應的參數若是接近爲零,說明這個特徵影響不大,就能夠去掉。所以,咱們的特徵選擇過程通常以下:

  1. 選取儘量多的特徵,必要時先進行降維
  2. 對特徵進行選擇,保留最具備表明性的特徵

這個過程的進行要同時觀察模型準確率的變化。

最後,特徵選擇有哪些算法呢? 
- 過濾方法:將全部特徵進行打分評價,選擇最有效的一些特徵。好比:卡法檢驗,信息增益,相關係數打分。 
- 包裝方法:將特徵組合的選擇看作是一個在特徵空間中的搜索問題。好比:隨機登山法,啓發式的搜索方法等。 
- 嵌入方法:將特徵選擇的過程嵌入到模型訓練的過程當中,其實也就是正則化的方法。好比lasso迴歸,嶺迴歸,彈性網絡(Elastic Net)等。

具體其它細節,之後補充。

推薦一篇美團網的技術報告: 
機器學習中的數據清洗與特徵處理綜述 
還有一篇參考: 
機器學習中的特徵選擇問題 
最後一篇特徵選擇的好文: 
A introduction on feature seclection

 

機器學習算法須要注意的一些問題(二)

標籤: 機器學習算法特徵
 分類:
 

目錄(?)[+]

 

訓練樣本大小選取的問題

模型學習的準確度與數據樣本大小有關,那麼如何展現更多的樣本與更好的準確度之間的關係呢?

咱們能夠經過不斷增長訓練數據,直到模型準確度趨於穩定。這個過程可以很好讓你瞭解,你的系統對樣本大小及相應調整有多敏感。

因此,訓練樣本首先不能太少,太少的數據不能表明數據的總體分佈狀況,並且容易過擬合。數據固然也不是越多越好,數據多到必定程度效果就不明顯了。不過,這裏假設數據是均勻分佈增長的。

然而這裏有另外一種聲音:

算法使用的數據越多,它的精度會更加準確,因此若是可能要儘可能避免抽樣。機器學習理論在預測偏差上有着很是直觀的描述。簡而言之,在機器學習模型和最優預測(在理論上達到最佳可能的偏差)之間的預測偏差的差距能夠被分解爲三個部分:

因爲沒有找到正確函數形式的模型的偏差
 因爲沒有找到最佳參數的模型的偏差
 因爲沒用使用足夠數據的模型的偏差

若是訓練集有限,它可能沒法支撐解決這個問題所需的模型複雜性。統計學的基本規律告訴咱們,若是咱們能夠的話,應該利用全部的數據而不是抽樣。

其實固然數據越多越好,可是更多的數據意味着獲取的難度以及處理的複雜度等。而且當數據多到必定程度後區別就不那麼明顯了。因此咱們仍是要根據本身狀況科學地使用必定數量的數據。

參考資料: 
機器學習項目中常見的誤區 
開發者成功使用機器學習的十大訣竅

選擇什麼模型算法?

不少像我同樣的機器學習新手在遇到問題的時候,都會對用什麼樣的模型解決問題感到困惑。除了基本的有監督無監督,分類仍是迴歸,二分類多分類等等基本的選擇標準,貌似其餘的都差很少,一般的作法就是每一個模型都試一試,看看哪一個效果好就用哪一個。。顯然這麼作的不夠的。

其實,選擇什麼算法最好,關鍵不在於算法,而在於具體要解決的問題,以及問題所具備的數據和特徵。下面結合本身的經驗和收集的資料,給出幾點選擇算法的tips。

1 特徵角度

特徵層次級別

就像古代把人分爲三六九等,特徵也有層次之分。咱們暫且粗略地分爲高級別特徵和低級別特徵,有的時候高級別的特徵又叫組合特徵。整體上,低級別特徵比較有針對性,單個特徵覆蓋面小(含有這個特徵的數據很少),特徵數量(維度)很大。高級別特徵比較泛化,單個特徵覆蓋面大(含有這個特徵的數據不少),特徵數量(維度)不大。下圖展現了什麼是高級低級特徵:

這裏寫圖片描述

特徵級別與線性模型和非線性模型

特徵的低級和高級帶來模型選擇上的線性模型和非線性模型的考量:

非線性模型的特徵 
1)能夠主要使用High Level特徵,由於計算複雜度大,因此特徵維度不宜過高; 
2)經過High Level非線性映射能夠比較好地擬合目標。

線性模型的特徵 
1)特徵體系要儘量全面,High Level和Low Level都要有; 
2)能夠將High Level轉換Low Level,以提高模型的擬合能力。

  • 線性模型有:邏輯斯蒂迴歸,線性SVM等;
  • 非線性模型有:決策樹,隨機森林,GBDT等。

例子: 邏輯斯蒂迴歸和決策樹用哪一個好?

只用高級或者低級特徵

那日常咱們所糾結的邏輯斯蒂迴歸和決策樹用哪一個好爲例,決策樹是一種非線性模型,所以若是是高級別特徵的話咱們就選擇決策樹;邏輯斯蒂迴歸是一種線性模型,所以若是是低級別特徵的話咱們就選擇邏輯斯蒂迴歸。

然而,在咱們是具體應用中,高級特徵一般難以得到,或者得到的時間和成本很高,然而低級特徵卻很容易拿到。因此,在解決問題的初始階段,咱們最好先普遍收集能夠用的低級別特徵,來一個邏輯斯蒂迴歸,做爲框架的基線系統。

線性模型對非線性關係缺少準確刻畫,高級特徵恰好能夠加入模型的非線性表達,加強模型的表達能力。另外,使用低級特徵能夠認爲是對全局進行建模,而高級特徵更加精細,是個性化建模,這就是爲何

  • 決策樹深刻數據細部,但同時失去了對全局的把握,由於決策樹通常使用高級特徵;
  • 邏輯迴歸始終着眼整個數據的擬合,因此對全局把握較好。但沒法兼顧局部數據,或者說缺少探查局部結構的內在機制,由於邏輯迴歸通常使用低級特徵;
  • 長尾樣本的預測值主要受High Level特徵影響,由於長尾樣本是個性化樣本;
  • 高頻樣本的預測值主要受Low Level特徵影響,由於高頻樣本是大衆化的樣本。

高級特徵和低級特徵都有

當咱們有一些高級特徵的時候,就把高級特徵和低級特徵共同加入到邏輯迴歸中進行訓練,這樣訓練出來的模型兼顧了全局化與個性化,會使模型預測的準確率有所提升。具體到邏輯迴歸和決策樹的使用上,咱們能夠充分利用二者之間的優缺點進行互補。主要思路是利用決策樹對局部數據結構優越的把握能力增長邏輯迴歸的效力。在具體作法上有幾種,一種是從決策樹分析中找出數據局部結構,做爲在邏輯迴歸中構建依變量(interaction)的依據。另外一種是在須要對預測因子進行離散化處理時,利用決策樹分析決定最佳切分點。還有一種是把決策樹分類的最終結果做爲預測變量,和其餘協變量一塊兒代入迴歸模型,又稱爲「嫁接式模型」。從理論上講,嫁接模型綜合了決策樹和邏輯迴歸的優勢。最終節點包含了數據中重要的局部結構,而協變量能夠拾補被決策樹遺漏的數據總體結構。

本部分參考文獻: 
在廣告LR模型中,爲何要作特徵組合? 
邏輯迴歸與決策樹在分類上的一些區別

2 要解決的問題自己

有時候咱們要解決的問題能夠用單個複雜的模型解決,也能夠用多個簡單的模型分別解決各個子問題,再基於各個單模型進行融合解決總問題。融合的方式能夠是簡單的線性融合,也能夠是更加複雜的融合。

不一樣模型有不一樣 優缺點,具體以下: 
這裏寫圖片描述

選擇哪一種模式? 
1)問題可預估的難度,難度大,則考慮用多模型; 
2)問題自己的重要性,問題很重要,則考慮用多模型; 
3)多個模型的關係是否明確,關係明確,則能夠用多模型。

這一部分主要抄襲美團技術報告: 
實例詳解機器學習如何解決問題

3 模型組合

最近模型組合的算法愈來愈流行,當單個分類器的性能不足以解決實際問題的時候,能夠考慮使用模型組合的方法,也就是bagging和boosting的方法。

關於這部分,只知道GBDT在工業界很火,當有了必定了解和實戰經驗後,再來補充。

相關文章
相關標籤/搜索