多元線性迴歸模型精度提升的兩種經典方法 -- 虛擬變量&方差膨脹因子

👆 關注一下~,更多商業數據分析案例等你來撩

在這裏插入圖片描述

前言

構建多元線性迴歸模型時,如果能夠充分的使用已有變量,或將其改造成另一種形式的可供使用的變量,將在一定程度上提高模型精度及其泛化能力。因爲數據集中的名義變量(或叫類別變量)是無法直接使用的,所以**虛擬變量(又叫啞元變量)**的設置便是非常經典且必須掌握的一步,原理簡單,實現優雅,效果拔羣。

注:相關數據源和超詳細的代碼(python,Jupyter Notebook 版本 + 詳細註釋)已經整理好,在 “ 數據分析與商業實踐 ” 公衆號後臺回覆 “ 虛擬變量 ” 即可獲取。



原理趣析

至於虛擬變量的官方解釋和值得參考的短小精悍的論文集和虛擬變量的深度應用及拓展,筆者都已經打包放在了後臺,文末查看關鍵字回覆即可。因爲虛擬變量的原理其實非常簡單,所以如何有趣且快速的理解原理並應用於實際的 Python 程序纔是本文的側重點。

在這裏插入圖片描述
將無法直接用於建模的名義變量轉換成可放入模型的虛擬變量的核心就短短八個字:四散拆開,非此即彼。下面用一個只有4行的微型數據集輔以說明。
在這裏插入圖片描述
從上表中,不難發現:

  • 該名義變量有 n 類,就能拆分出 n 個名義變量
  • 巧妙的使用 0 和 1 來達到用虛擬變量列代替原名義變量所在類別

接下來要做的就是將生成的虛擬變量們放入多元線性迴歸模型,但要注意的是:轉化後的虛擬變量們需要捨棄一個,才能得到滿秩矩陣。具體原因和有關線性代數的解釋可以查看筆者打包好的論文,我們可以理解爲,當該名義變量可劃分爲 n 類時,只需要 n-1 個虛擬變量就已足夠獲知所有信息了。該丟棄哪個,可根據實際情況來決定。
在這裏插入圖片描述
而至於使用虛擬變量的建模結果,可繼續往下看。
在這裏插入圖片描述



效果實現

數據讀入
在這裏插入圖片描述

屬性說明

  • neighborhood:所在街區(A,B,C,D)
  • area:房屋面積
  • bedrooms:臥室面積
  • bathrooms:浴室面積
  • style:房屋類型(鄉間小屋/維多利亞/閣樓式)
  • price:房屋價格(美元)

statsmodels 的 ols 函數(最小二乘法)進行多元線性迴歸建模
在這裏插入圖片描述
爲原數據集的某名義變量添加虛擬變量的步驟:

  1. 抽出希望轉換的名義變量(一個或多個)
  2. Python pandas 的 get_dummies 函數
  3. 與原數據集橫向拼接

在這裏插入圖片描述
在這裏插入圖片描述
再次進行建模操作,發現模型精度得到了很大提升

在這裏插入圖片描述
筆者特地沒有將類別變量 style 也轉成虛擬變量,爲的就是合理留白,讓讀者自行嘗試並體會 “驚喜” 結果。



結果說明

在這裏插入圖片描述
所以最終的建模結果爲:房屋價格 price = 344.39×area + bedrooms×5609.34 - bathrooms×4900.94 - A×77.9 + B×524381.71 - 203072.2,模型精度爲 0.919.

等式結果中,截距項 Intercept 和 area,bedrooms,bathrooms 等項都還好理解,A,B 這兩個虛擬變量項可能會給理解帶來困難。其實根據原理趣析部分的表格來看,如果房屋在C區,那等式中 A 和 B 這兩個字母的值便是 0,所以這便引出了非常重要的一點:使用了虛擬變量的多元線性迴歸模型結果中,存在於模型內的虛擬變量都是跟被刪除掉的那個虛擬變量進行比較。所以這個結果便表示在其他情況完全一樣時(即除虛擬變量外的項) A 區的房屋比 C 區低 77.9 美元,B 區則比 C 區貴524381.7 美元。當然我們也可以畫個箱線圖來查看與檢驗,發現結果正如模型中 A 與 B 的係數那般顯示。

在這裏插入圖片描述

注:相關數據源和超詳細的代碼(python,Jupyter Notebook 版本 + 詳細註釋)已經整理好,在 “ 數據分析與商業實踐 ” 公衆號後臺回覆 “ 虛擬變量 ” 即可獲取。

還有,雖然模型精度比較理想,但在使用 ols 進行建模時,結果表格下方其實還顯示瞭如下的 Warnings(警告),表明可能存在比較強的多元共線性問題,這也是提升多元線性迴歸模型精度和泛化性的非常經典且簡單的操作,篇幅原因,就放在文末鏈接了😀
在這裏插入圖片描述

多元共線性檢測 – 方差膨脹因子


精彩回顧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章