1. 程式人生 > >機器學習算法須要註意的一些問題

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

大數據 一段 。。 協方差 去除 點擊 英文 極致 過度擬合

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

1 數據不平衡問題

這個問題是經常遇到的。

就拿有監督的學習的二分類問題來說吧。我們須要正例和負例樣本的標註。假設我們拿到的訓練數據正例非常少負例非常多,那麽直接拿來做分類肯定是不行的。

通常須要做下面方案處理:

1.1 數據集角度

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

1.1.1 添加正樣本數量

正樣本本來就少,怎麽添加呢?方法是直接復制已有的正樣本丟進訓練集。這樣能夠略微緩解正樣本缺失的困境。可是easy帶來一個問題,就是過擬合的潛在危急。由於這樣粗暴的引入正樣本並沒有添加數據集的樣本多樣性。怎樣設計復制哪些正樣本有一些技巧,比方選擇有特定意義的代表性的那些。

1.1.2 降低負樣本的數量

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

1.2 損失函數的角度

能夠又一次改動模型訓練的損失函數,使得錯分正樣本的損失變大。錯分負樣本的損失變小。

這樣訓練出來的模型就會對正負樣本有一個合理的推斷。

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

2 異常值處理問題

說到異常值。首先得說一下數據量的問題。異常值不是缺失值,更不是錯誤值,相同是真實情況的表現,之所以覺得一個數據異常,是由於我們能夠用到的數據量不夠大,無法準確地代表整個此類數據的分布。假設把異常值放在海量數據的大背景下,那麽這個異常值也就不那麽異常了。

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

異常值並不是錯誤值,而相同是真實情況的表現,我們之所以覺得異常。僅僅是由於我們的數據量不足夠大而已。可是從實際的工業界來看。考慮到實際的計算能力以及效果,大多數公司都會對大數據做“去噪”,那麽在去噪的過程中去除的不僅僅是噪音,也包含“異常點”,而這些“異常點”,恰恰把大數據的廣覆蓋度給降低了,於是利用大數據反而比小數據更easy產生趨同的現象。尤其對於推薦系統來說,這些“異常點”的觀察事實上才是“個性化”的極致。

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

說得學術一些,我們最好還是覺得大數據是頻率學派對於貝葉斯學派一次強有力的逆襲。

那麽既然講到這個份上了,我們最好還是思考一下,我們是不是有希望在回歸貝葉斯學派。利用先驗信息+小數據完畢對大數據的反擊呢?

某些機器學習算法對異常值非常敏感,比方:K-means聚類。AdaBoost。使用此類算法必須處理異常值。


某些算法擁有對異常值不敏感的特性,比方:KNN,隨機森林。

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

3 過擬合問題

過擬合可要命了。好不easy訓練一個模型。來一些測試數據,分類結果非常的差。過擬合產生的原因:

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

差點兒全部的機器學習算法都會easy遇到過擬合的問題。

所以先說一些解決過擬合的通用辦法。當然,首先得保證訓練數據不要太少。

3.1 正則化

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

  • 線性回歸正則化就是嶺回歸和lasso回歸,分別相應L2,L1罰項。

  • 決策樹正則化就是剪枝。通常把子節點個數作為罰項。

3.2 交叉驗證

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

其他具體研究請點擊:
機器學習過度擬合問題一些原因

4 特征project問題

有句話必須得放在前面:數據和特征決定了機器學習的上限,而模型和算法僅僅是逼近這個上限而已。

由此可見,特征project尤其是特征選擇在機器學習中占有相當重要的地位。

4.1 什麽是特征project

首先拽一段英文定義:

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. 特征維數越高。模型越easy過擬合。此時更復雜的模型就不好用。
2. 相互獨立的特征維數越高,在模型不變的情況下。在測試集上達到相同的效果表現所須要的訓練樣本的數目就越大。
3. 特征數量添加帶來的訓練、測試以及存儲的開銷都會增大。
4. 在某些模型中。比如基於距離計算的模型KMeans,KNN等模型。在進行距離計算時。維度過高會影響精度和性能。
5. 可視化分析的須要。

在低維的情況下,比如二維,三維,我們能夠把數據繪制出來,可視化地看到數據。當維度增高時,就難以繪制出來了。

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

正是由於高維特征有如上描寫敘述的各種各樣的問題,所以我們須要進行特征降維和特征選擇等工作。

4.3 特征提取

對於高維特征(成百上千維)。比方圖像,文本,聲音的特征,特征的每一維沒有顯著意義的,最好要對特征先進行降維。也就是從初始數據中提取實用的信息。通過降維。將高維空間中的數據集映射到低維空間數據。同一時候盡可能少地丟失信息。或者降維後的數據點盡可能地easy被區分。

這樣,能夠提取出顯著特征。避免維度災難,還能夠避免特征之間的線性相關性。

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

PCA算法通過協方差矩陣的特征值分解能夠得到數據的主成分,以二維特征為例。兩個特征之間可能存在線性關系(比如運動的時速和秒速度)。這樣就造成了第二維信息是冗余的。PCA的目標是發現這樣的特征之間的線性關系。並去除。

LDA算法考慮label,降維後的數據點盡可能地easy被區分。

4.4 特征選擇

通常遇到的情況是:特征不夠用。。在這樣的情況下,我們就要在設計算法之前,好好地挖掘一下特征。

對於邏輯斯蒂回歸和決策樹。每一維的特征是有確切意義的。我們就要從各個方面,抽取與目標相關的全部可用信息作為特征。

這個過程可能會比較痛苦。。

然後。是不是特征越多越好?事實上也不是。盜一張圖過來例如以下:
技術分享圖片
能夠發現,剛開始模型的準確率隨著特征數量的添加而添加,當添加到一定程度便趨於穩定了。假設還要強行添加如此多的特征,反而畫蛇添足,easy過擬合。

然後。假設出現特征過多出現過擬合的情況,就要適當地進行參數縮減。

對於邏輯斯蒂回歸。某一維特征相應的參數假設接近為零,說明這個特征影響不大,就能夠去掉。因此,我們的特征選擇過程一般例如以下:

  1. 選取盡可能多的特征,必要時先進行降維
  2. 對特征進行選擇。保留最具有代表性的特征

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

最後,特征選擇有哪些算法呢?
- 過濾方法:將全部特征進行打分評價,選擇最有效的一些特征。比方:卡法檢驗。信息增益,相關系數打分。
- 包裝方法:將特征組合的選擇看做是一個在特征空間中的搜索問題。比方:隨機爬山法。啟示式的搜索方法等。
- 嵌入方法:將特征選擇的過程嵌入到模型訓練的過程中,事實上也就是正則化的方法。

比方lasso回歸。嶺回歸,彈性網絡(Elastic Net)等。

具體其他細節,以後補充。

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

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