熱線電話:13121318867

登錄
首頁精彩閱讀機器學習算法需要注意的一些問題
機器學習算法需要注意的一些問題
2016-05-05
收藏

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

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

1 數據不平衡問題

這個問題是經常遇到的。就拿有監督的學習的二分類問題來說吧,我們需要正例和負例樣本的標注。如果我們拿到的訓練數據正例很少負例很多,那么直接拿來做分類肯定是不行的。通常需要做以下方案處理:

1.1 數據集角度

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

1.1.1 增加正樣本數量

正樣本本來就少,怎么增加呢?方法是直接復制已有的正樣本丟進訓練集。這樣可以稍微緩解正樣本缺失的困境,但是容易帶來一個問題,就是過擬合的潛在危險。因為這樣粗暴的引入正樣本并沒有增加數據集的樣本多樣性。如何設計復制哪些正樣本有一些技巧,比如選擇有特定意義的代表性的那些。

1.1.2 減少負樣本的數量

首先這是一個通用的合理的方法,但是負樣本的減少必然導致數據多樣性的損失。有一種方法可以緩解這個問題,那就是類似于隨機森林方法,每次正樣本數量不變,隨機選擇等量的不同的負樣本進行模型訓練,反復幾次,訓練多個模型,最后所有的模型投票決定最終的分類結果。

1.2 損失函數的角度

可以重新修改模型訓練的損失函數,使得錯分正樣本的損失變大,錯分負樣本的損失變小。這樣訓練出來的模型就會對正負樣本有一個合理的判斷。

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

2 異常值處理問題

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

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

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

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

說得學術一些,我們不妨認為大數據是頻率學派對于貝葉斯學派一次強有力的逆襲。那么既然說到這個份上了,我們不妨思考一下,我們是不是有希望在回歸貝葉斯學派,利用先驗信息+小數據完成對大數據的反擊呢?

某些機器學習算法對異常值很敏感,比如: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 特征選擇

通常遇到的情況是:特征不夠用。。在這種情況下,我們就要在設計算法之前,好好地挖掘一下特征。對于邏輯斯蒂回歸和決策樹,每一維的特征是有確切意義的。我們就要從各個方面,抽取與目標相關的所有可用信息作為特征。這個過程可能會比較痛苦。。

然后,是不是特征越多越好?其實也不是。盜一張圖過來如下:
2015072910234025
可以發現,剛開始模型的準確率隨著特征數量的增加而增加,當增加到一定程度便趨于穩定了。如果還要強行加入如此多的特征,反而畫蛇添足,容易過擬合。然后,如果出現特征過多出現過擬合的情況,就要適當地進行參數縮減。對于邏輯斯蒂回歸,某一維特征對應的參數如果接近為零,說明這個特征影響不大,就可以去掉。因此,我們的特征選擇過程一般如下:

選取盡可能多的特征,必要時先進行降維

特征進行選擇,保留最具有代表性的特征

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

最后,特征選擇有哪些算法呢?
– 過濾方法:將所有特征進行打分評價,選擇最有效的一些特征。比如:卡法檢驗,信息增益,相關系數打分。
– 包裝方法:將特征組合的選擇看做是一個在特征空間中的搜索問題。比如:隨機爬山法,啟發式的搜索方法等。
– 嵌入方法:將特征選擇的過程嵌入到模型訓練的過程中,其實也就是正則化的方法。比如lasso回歸,嶺回歸,彈性網絡(Elastic Net)等。


數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢