kaggle數據挖掘和求解的基本步驟
01
—
數據探索(Exploratory Data Analysis)
對數據進行探索性的分析,通常會用 pandas 來載入數據,並做一些簡單的可視化來理解數據。
import pandas as pd
df = pd.DataFrame([[1, 1.5],[2.0,2.8]], columns=["int", "float"])
df
iterrows,按行迭代
02
—
可視化
matplotlib 和 seaborn 提供的繪圖功能可以方便的展示。
比較常用的圖表有:
seaborn熱點圖
多變數圖
散點圖
03
—
數據不均衡問題及部分措施
需要考慮數據不均衡問題
上圖是數據不均衡問題的一個典型例子,可以看到大部分微博的總互動數(被轉發、評論與點贊數量)在0-5之間,交互數多的微博(多於100)非常之少。如果我們去預測一條微博交互數所在檔位,預測器只需要把所有微博預測為第一檔(0-5)就能獲得非常高的準確率,而這樣的預測器沒有任何價值。那如何來解決機器學習中數據不平衡問題呢?通常處理數據的難度如下所示:
大數據+分布均衡 < 大數據+分布不均衡 < 小數據+數據均衡 < 小數據+數據不均衡
1)上採樣和生成新數據點時添加輕微的隨機擾動,經驗表明這種做法非常有效。
2)多次有放回的下採樣,得到多個不同的訓練集,進而訓練多個不同的分類器,通過組合多個分類器的結果得到最終的結果,這種方法稱為EasyEnsemble。第二種BalanceCascade,利用增量訓練的思想(Boosting):先通過一次下採樣產生訓練集,訓練一個分類器,對於那些分類正確的大眾樣本不放回,然後對這個更小的大眾樣本下採樣產生訓練集,訓練第二個分類器,以此類推,最終組合所有分類器的結果得到最終結果。
3)數據合成方法是利用已有樣本生成更多樣本,這類方法在小數據場景下有很多成功案例,比如醫學圖像分析等。
04
—
數據預處理(Data Preprocessing)
在構造 Feature 之前,需要對數據集進行一些處理。通常的步驟有:
說到outlier,不得不提下,bias 和 variance概念上區別,bias是偏差(與預測值之間的偏離程度),variance是誤差(代表點的離散程度,散不散的衡量),最直觀的如下圖所示,相對於第二行,第一行的bias都很小;相對於第二列,第一列的variance都很小。
然後,說下最後一條,即對這一變數創建一組新的偽變數,變數對應的取值為 1,其他都為 0。如下,將原本有 7 種可能取值的變數轉換成 7 個Dummy Variables。為什麼要這樣做,本來周日和周一日期是挨著的,但是轉化為1,和7後,如果畫在x軸上,它們就會離得很遠,這樣給演算法一個錯覺,這個日期的變化會對目標值一個錯誤的影響。
05
—
特徵選取(Feature Selection)
先做一遍 Feature Selection 能帶來一些好處:
特徵選取比較實用的方法是Random Forest訓練完以後得到的特徵的重要性,比如下圖所示:title特徵對泰坦尼克號船員幸運獲救起到最重要的作用。
這裡用一個例子來說明在一些情況下 Raw Feature 可能需要經過一些轉換才能起到比較好的效果。假設有一個 Categorical Variable 一共有幾萬個取值可能,那麼創建 Dummy Variables 的方法就不可行了。
這時一個比較好的方法是根據 Feature Importance 或是這些取值本身在數據中的出現頻率,為最重要(比如說前 95% 的 Importance)那些取值(有很大可能只有幾個或是十幾個)創建 Dummy Variables,而所有其他取值都歸到一個「其他」類裡面。這也是經常用到的一個技術。
06
—
模型選取(Model Selection)
準備好以上的特徵後,就可以開始選用一些常見的模型進行訓練了,一般從BaseLine開始,比如以下基本模型:
以上這些模型在sklearn中都可以直接調包使用。然後,講這些模型,作為集成模型的Base model,那麼常用的集成模型有哪些,最常用的模型基本都是基於決策樹的模型:
當然還有業界優秀的 Xgboost 。
07
—
參數調優(Tuning)
在訓練時,我們主要希望通過調整參數來得到一個性能不錯的模型,一個模型往往會有很多可調節的超參數,比如對 sklearn 的RandomForestClassifier來說,比較重要的就是隨機森林中樹的數量 (n_estimators)以及在訓練每棵樹時最多選擇的特徵數量(max_features)
通常我們會通過一個叫做Grid Search的過程來確定一組最佳的參數,這是一個暴力搜索的過程。
一般的調參步驟是:將訓練數據的一部分划出來作為驗證集,通常先將學習率設得比較高(比如 0.1),用 Grid Search 對其他參數進行搜索,逐步將 學習率降低,找到最佳值。以驗證集為監視表,找到的最佳參數組合。
08
—
總結
總結了數據探索,數據可視化,數據不平衡問題的部分解決措施,數據預處理,數據特徵選取,模型選擇,參數調優的基本過程。
演算法channel會有系統地,認真地推送:機器學習(包含深度學習,強化學習等)的理論,演算法,實踐,源碼實現。期待您的參與!
TAG:全球大搜羅 |