數據挖掘入門指南(白送)



數據分析

探索性數據分析(Exploratory Data Analysis,EDA)是指對已有數據在儘量少的先驗假設下通過作圖、製表、方程擬合、計算特徵量等手段探索數據的結構和規律的一種數據分析方法。


數據挖掘入門指南(白送)


常用的第三方庫

數據科學庫

  • pandas:用於分組、過濾和組合數據,還提供了時間序列功能。
  • numpy:處理大型的多維數組和矩陣
  • scipy:用於解決線性代數、概率論、積分計算等任務

數據可視化庫

  • matplotlib:構建各種圖表,從直方圖和散點圖到非笛卡爾座標圖等
  • seaborn:提供了豐富的可視化圖庫,包括時間序列、聯合圖和小提琴圖等複雜的類型。


常用函數

數據簡略觀測

  • head():觀察數據讀取是否準確,常讀取前5行數據。
  • shape:讀取數據集的維度。

數據總覽

  • describe():包含每列的統計量,個數、平均值、方差、最小值、中位數、最大值等。
  • 數據類型info():瞭解數據每列的type,瞭解是否存在除了nan以外的特殊符號異常。


數據檢測

缺失值檢測

  • 查看每列的存在nan情況
  • 排序函數sort_values():將數據集依照某個字段中的數據進行排序,該函數即可根據指定列數據也可根據指定行的
  • 可視化nan值與缺失值

異常值檢測

  • 3σ原則:拉依達準則,該準則具體來說,就是先假設一組檢測數據只含有隨機誤差,對原始數據進行計算處理得到標準差,然後按一定的概率確定一個區間,認為誤差超過這個區間的就屬於異常值。
  • 箱線圖:依據實際數據繪製,真實、直觀地表現出了數據分佈的本來面貌,且沒有對數據作任何限制性要求(3σ原則要求數據服從正態分佈或近似服從正態分佈),其判斷異常值的標準以四分位數和四分位距為基礎。


預測分佈

總體分佈概況:

  • 無接觸約翰遜分佈:
  • 正態分佈


數據挖掘入門指南(白送)

很多模型假設數據服從正態分佈,數據整體服從正態分佈,樣本均值和方差則相互獨立。當樣本不服從正態分佈時,可以做如下轉換:


  • 線性變化z-scores:基於原始數據的均值(mean)和標準差(standard deviation)進行數據的標準化。將A的原始值x使用z-score標準化到x’
  • Boxcox變換:一種廣義冪變換方法,是統計建模中常用的一種數據變換,用於連續的響應變量不滿足正態分佈的情況。
  • yeo-johnson變換:是冪變換(power transformation)的方法之一,通過構建一組單調函數對隨機變量進行數據變換。


查看skeness 和kurtosis

  • skeness:衡量隨機變量概率分佈的不對稱性,是相對於平均值不對稱程度的度量,通過對偏度係數的測量,我們能夠判定數據分佈的不對稱程度以及方向。
  • kurtosis:研究數據分佈陡峭或平滑的統計量,通過對峰度係數的測量,我們能夠判定數據相對於正態分佈而言是更陡峭/平緩。
數據挖掘入門指南(白送)


預測值的具體頻數

當某範圍預測值很少時,可將其當作異常值處理填充或刪除。若頻數很失常,需對數據進行處理,例如進行log變換,使數據分佈較均勻,可據處理後的數據進行預測,這也是預測問題常用的技巧。


特徵分析

數字特徵

  • 相關性分析:對兩個或多個具備相關性的變量元素進行分析,從而衡量兩個變量因素之間的相關密切程度。
  • 特徵的偏度和峰度
  • 數字特徵分佈可視化
    • pd.melt():處理數據,透視表格,可將寬數據轉化為長數據,以便於後續分析。形成的數據即為,鍵:各特徵名稱,值:特徵對應的值
    • sns.FacetGrid() :先sns.FacetGrid()畫出輪廓,再map()填充內容
    • sns.pairplot():展示變量兩兩之間的關係(線性或非線性,有無較為明顯的相關關係)。

類別特徵

  • unique分佈:對於一維數組或者列表,unique函數去除其中重複的元素,並按元素由大到小返回一個新的無元素重複的元組或者列表。
  • 可視化:
    • 箱型圖可視化:直觀識別數據中的離群點,判斷數據離散分佈情況,瞭解數據分佈狀態。
    • 小提琴圖可視化:用於顯示數據分佈及概率密度,這種圖表結合了箱形圖和密度圖的特徵,主要用來顯示數據的分佈形狀
    • 柱形圖可視化類別
    • 每個類別頻數可視化


數據清洗

數據和特徵決定了機器學習的上限,而模型和算法只是逼近這個上限而已。俗話說:garbage in, garbage out。分析完數據後,特徵工程前,必不可少的步驟是對數據進行清洗。


數據清洗作用是利用有關技術如數理統計、數據挖掘或預定義的清理規則將髒數據轉化為滿足數據質量要求的數據。主要包括缺失值處理、異常值處理、數據分桶、特徵歸一化/標準化等流程。


數據挖掘入門指南(白送)


缺失值處理

關於缺失值處理的方式, 有幾種情況:

  • 不處理:針對xgboost等樹模型,有些模型有處理缺失的機制,所以可以不處理;
  • 如果缺失的太多,可以考慮刪除該列;
  • 插值補全(均值,中位數,眾數,建模預測,多重插補等);
  • 分箱處理,缺失值一個箱。


異常值處理

常用的異常值處理操作包括BOX-COX轉換(處理有偏分佈),箱線圖分析刪除異常值, 長尾截斷等方式, 當然這些操作一般都是處理數值型的數據。

  • BOX-COX轉換:用於連續的變量不滿足正態的時候,在做線性迴歸的過程中,一般需要做線性模型假定。
  • 箱線圖分析:依據實際數據繪製,真實、直觀地表現出了數據分佈的本來面貌,其判斷異常值的標準以四分位數和四分位距為基礎。


數據分桶

連續值經常離散化或者分離成“箱子”進行分析, 為什麼要做數據分桶呢?

  • 離散後稀疏向量內積乘法運算速度更快,計算結果也方便存儲,容易擴展;
  • 離散後的特徵對異常值更具魯棒性,如 age>30 為 1 否則為 0,對於年齡為 200 的也不會對模型造成很大的干擾;
  • LR 屬於廣義線性模型,表達能力有限,經過離散化後,每個變量有單獨的權重,這相當於引入了非線性,能夠提升模型的表達能力,加大擬合;
  • 離散後特徵可以進行特徵交叉,提升表達能力,由 M+N 個變量編程 M*N 個變量,進一步引入非線形,提升了表達能力;
  • 特徵離散後模型更穩定,如用戶年齡區間,不會因為用戶年齡長了一歲就變化


當然還有很多原因,LightGBM 在改進 XGBoost 時就增加了數據分桶,增強了模型的泛化性。現在介紹數據分桶的方式有:

  • 等頻分桶:區間的邊界值要經過選擇,使得每個區間包含大致相等的實例數量。比如說 N=10 ,每個區間應該包含大約10%的實例。
  • 等距分桶:從最小值到最大值之間,均分為 N 等份;
  • Best-KS分桶:類似利用基尼指數進行二分類;
  • 卡方分桶:自底向上的(即基於合併的)數據離散化方法。它依賴於卡方檢驗:具有最小卡方值的相鄰區間合併在一起,直到滿足確定的停止準則。


數據轉換

數據轉換的方式有:

  • 數據歸一化(MinMaxScaler);
  • 標準化(StandardScaler);
  • 對數變換(log1p);
  • 轉換數據類型(astype);
  • 獨熱編碼(OneHotEncoder);
  • 標籤編碼(LabelEncoder);
  • 修復偏斜特徵(boxcox1p)等。


特徵工程

特徵工程指的是把原始數據轉變為模型訓練數據的過程,目的是獲取更好的訓練數據特徵。特徵工程能使得模型的性能得到提升,有時甚至在簡單的模型上也能取得不錯的效果。


數據挖掘入門指南(白送)


特徵構造

特徵構造的時候需要考慮數值特徵,類別特徵,時間特徵。

  • 數值特徵,一般會嘗試一些它們之間的加減組合(當然不要亂來,根據特徵表達的含義)或者提取一些統計特徵
  • 類別特徵,我們一般會嘗試之間的交叉組合,embedding也是一種思路
  • 時間特徵,這一塊又可以作為一個大專題來學習,在時間序列的預測中這一塊非常重要,也會非常複雜,需要就儘可能多的挖掘時間信息,會有不同的方式技巧。


特徵選擇

特徵選擇主要有兩個功能:

  • 減少特徵數量、降維,使模型泛化能力更強,減少過擬合
  • 增強對特徵和特徵值之間的理解


通常來說,從兩個方面考慮來選擇特徵:

  • 特徵是否發散:如果一個特徵不發散,例如方差接近於0,也就是說樣本在這個特徵上基本上沒有差異,這個特徵對於樣本的區分並沒有什麼用。
  • 特徵與目標的相關性:這點比較顯見,與目標相關性高的特徵,應當優選選擇。


根據特徵選擇的形式又可以將特徵選擇方法分為3種:

  • 過濾法(Filter):按照發散性或者相關性對各個特徵進行評分,設定閾值或者待選擇閾值的個數,選擇特徵。
  • 包裝法(Wrapper):根據目標函數(通常是預測效果評分),每次選擇若干特徵,或者排除若干特徵。
  • 嵌入法(Embedded):先使用某些機器學習的算法和模型進行訓練,得到各個特徵的權值係數,根據係數從大到小選擇特徵。


降維

數據特徵維度太高,首先會導致計算很麻煩,其次增加了問題的複雜程度,分析起來也不方便。但盲目減少數據的特徵會損失掉數據包含的關鍵信息,容易產生錯誤的結論,對分析不利。


PCA降維方法,既可以減少需要分析的指標,而且儘可能多的保持了原來數據的信息。


但要注意一點, 特徵選擇是從已存在的特徵中選取攜帶信息最多的,選完之後的特徵依然具有可解釋性,而PCA,將已存在的特徵壓縮,降維完畢後不是原來特徵的任何一個,也就是PCA降維之後的特徵我們根本不知道什麼含義了。


建模調參

特徵工程也好,數據清洗也罷,都是為最終的模型來服務的,模型的建立和調參決定了最終的結果。模型的選擇決定結果的上限, 如何更好的去達到模型上限取決於模型的調參。


建模的過程需要我們對常見的線性模型、非線性模型有基礎的瞭解。模型構建完成後,需要掌握一定的模型性能驗證的方法和技巧。同時,還需要掌握貪心調參、網格調參、貝葉斯調參等調參方法。


數據挖掘入門指南(白送)


迴歸分析

迴歸分析是一種統計學上分析數據的方法,目的在於瞭解兩個或多個變量間是否相關、相關方向與強度,並建立數學模型。以便通過觀察特定變量(自變量),來預測研究者感興趣的變量(因變量)


長尾分佈

這種分佈會使得采樣不準,估值不準,因為尾部佔了很大部分。另一方面,尾部的數據少,人們對它的瞭解就少,那麼如果它是有害的,那麼它的破壞力就非常大,因為人們對它的預防措施和經驗比較少。


欠擬合與過擬合

欠擬合:訓練的模型在訓練集上面的表現很差,在驗證集上面的表現也很差。即訓練誤差和泛化誤差都很大。原因

  • 模型沒有很好或足夠數量的訓練訓練集
  • 模型的訓練特徵過於簡單

過擬合:模型的訓練誤差遠小於它在測試數據集上的誤差。即訓練誤差不錯,但是泛化誤差比訓練誤差相差太多。原因

  • 模型沒有很好或足夠數量的訓練訓練集
  • 訓練數據和測試數據有偏差
  • 模型的訓練過度,過於複雜,沒有學到主要的特徵

由此引出模型複雜度概念模型中的參數,一個簡單的二元線性的函數只有兩個權重,而多元的複雜的函數的權重可能會什麼上百上千個。

數據挖掘入門指南(白送)

模型複雜度太低(參數過少),模型學習得太少,就難以訓練出有效的模型,便會出現欠擬合。模型複雜度太高(參數很多),即模型可訓練空間很大,容易學習過度,甚至於也將噪聲數據學習了,便會出現過擬合。


正則化

損失函數後面會添加一個額外項,稱作 L1正則化 和 L2正則化,或者 L1範數和 L2範數。

L1正則化和L2正則化可以看做是損失函數的懲罰項。所謂『懲罰』是指對損失函數中的某些參數做一些限制。對於線性迴歸模型,使用L1正則化的模型建叫做Lasso迴歸,使用L2正則化的模型叫做Ridge迴歸(嶺迴歸)。

正則化說明

  • L1正則化是指權值向量中各個元素的絕對值之和,通常表示為
  • L2正則化是指權值向量中各個元素的平方和然後再求平方根(可以看到Ridge迴歸的L2正則化項有平方符號)

正則化作用

  • L1正則化可以產生稀疏權值矩陣,即產生一個稀疏模型,可以用於特徵選擇
  • L2正則化可以防止模型過擬合(overfitting)


調參方法

貪心調參 (座標下降)

座標下降法是一類優化算法,其最大的優勢在於不用計算待優化的目標函數的梯度。與座標下降法不同的是,不循環使用各個參數進行調整,而是貪心地選取了對整體模型性能影響最大的參數。參數對整體模型性能的影響力是動態變化的,故每一輪座標選取的過程中,這種方法在對每個座標的下降方向進行一次直線搜索(line search)


網格調參GridSearchCV

作用是在指定的範圍內可以自動調參,只需將參數輸入即可得到最優化的結果和參數。相對於人工調參更省時省力,相對於for循環方法更簡潔靈活,不易出錯。


貝葉斯調參

貝葉斯優化通過基於目標函數的過去評估結果建立替代函數(概率模型),來找到最小化目標函數的值。貝葉斯方法與隨機或網格搜索的不同之處在於,它在嘗試下一組超參數時,會參考之前的評估結果,因此可以省去很多無用功。


超參數的評估代價很大,因為它要求使用待評估的超參數訓練一遍模型,而許多深度學習模型動則幾個小時幾天才能完成訓練,並評估模型,因此耗費巨大。貝葉斯調參發使用不斷更新的概率模型,通過推斷過去的結果來“集中”有希望的超參數。


這裡給出一個模型可調參數及範圍選取的參考:

數據挖掘入門指南(白送)


模型融合

通過融合多個不同的模型,可能提升機器學習的性能。這一方法在各種機器學習比賽中廣泛應用, 也是在比賽的攻堅時刻衝刺Top的關鍵。而融合模型往往又可以從模型結果,模型自身,樣本集等不同的角度進行融合。


數據挖掘入門指南(白送)


模型融合是比賽後期一個重要的環節,大體來說有如下的類型方式

1. 簡單加權融合:

  • 迴歸(分類概率):算術平均融合(Arithmetic mean),幾何平均融合(Geometric mean);
  • 分類:投票(Voting);
  • 綜合:排序融合(Rank averaging),log融合。

2. stacking/blending:

  • 構建多層模型,並利用預測結果再擬合預測。

3. boosting/bagging:

  • 多樹的提升方法,在xgboost,Adaboost,GBDT中已經用到。


簡單算術平均法

Averaging方法就多個模型預測的結果進行平均。這種方法既可以用於迴歸問題,也可以用於對分類問題的概率進行平均。


加權算術平均法

這種方法是平均法的擴展。考慮不同模型的能力不同,對最終結果的貢獻也有差異,需要用權重來表徵不同模型的重要性importance。


投票法

假設對於一個二分類問題,有3個基礎模型,現在我們可以在這些基學習器的基礎上得到一個投票的分類器,把票數最多的類作為我們要預測的類別。

  • 硬投票:對多個模型直接進行投票,不區分模型結果的相對重要度,最終投票數最多的類為最終被預測的類。
    • 絕對多數投票法:最終結果必須在投票中佔一半以上。
    • 相對多數投票法:最終結果在投票中票數最多。
數據挖掘入門指南(白送)


  • 軟投票:增加了設置權重的功能,可以為不同模型設置不同權重,進而區別模型不同的重要度。
數據挖掘入門指南(白送)


堆疊法(Stacking)

stacking 就是當用初始訓練數據學習出若干個基學習器後,將這幾個學習器的預測結果作為新的訓練集,來學習一個新的學習器。對不同模型預測的結果再進行建模。

數據挖掘入門指南(白送)


混合法(Blending)

Blending採用了和stacking同樣的方法,不過只從訓練集中選擇一個fold的結果,再和原始特徵進行concat作為元學習器meta learner的特徵,測試集上進行同樣的操作。


把原始的訓練集先分成兩部分,比如70%的數據作為新的訓練集,剩下30%的數據作為測試集。

  • 第一層,我們在這70%的數據上訓練多個模型,然後去預測那30%數據的label,同時也預測test集的label。
  • 在第二層,我們就直接用這30%數據在第一層預測的結果做為新特徵繼續訓練,然後用test集第一層預測的label做特徵,用第二層訓練的模型做進一步預測。


Bagging

Bagging基於bootstrap(自採樣),也就是有放回的採樣。訓練子集的大小和原始數據集的大小相同。Bagging的技術使用子集來了解整個樣本集的分佈,通過bagging採樣的子集的大小要小於原始集合。


  • 採用bootstrap的方法基於原始數據集產生大量的子集
  • 基於這些子集訓練弱模型base model
  • 模型是並行訓練並且相互獨立的
  • 最終的預測結果取決於多個模型的預測結果


Boosting

Boosting是一種串行的工作機制,即個體學習器的訓練存在依賴關係,必須一步一步序列化進行。Boosting是一個序列化的過程,後續模型會矯正之前模型的預測結果。也就是說,之後的模型依賴於之前的模型。


其基本思想是:增加前一個基學習器在訓練訓練過程中預測錯誤樣本的權重,使得後續基學習器更加關注這些打標錯誤的訓練樣本,儘可能糾正這些錯誤,一直向下串行直至產生需要的T個基學習器,Boosting最終對這T個學習器進行加權結合,產生學習器委員會。


下面給出加州大學歐文分校Alex Ihler教授的兩頁PPT:

數據挖掘入門指南(白送)

數據挖掘入門指南(白送)


數據挖掘入門指南(白送)

<code>往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復“加群”獲取一折本站知識星球優惠券,複製鏈接直接打開:https://t.zsxq.com/yFQV7am喜歡文章,點個在看/<code>


分享到:


相關文章: