tft每日頭條

 > 生活

 > 回歸預測的實例

回歸預測的實例

生活 更新时间:2024-09-10 18:13:12

在這篇文章中,我們要講到的是如何解決回歸問題,以及如何通過使用特征轉換、特征工程、聚類、提升算法等概念來提高機器學習模型的準确性。小白必入數據分析群,等你加入哦~

回歸預測的實例(如何提高回歸模型的準确性)1

數據科學是一個疊代過程,隻有經過反複實驗,我們才能得到滿足我們需求的最佳模型/解決方案。

回歸預測的實例(如何提高回歸模型的準确性)2

數據科學過程流 — 作者圖片

讓我們通過一個例子來關注上面的每個階段。我有一個健康保險數據集(CSV 文件),其中包含有關保險費用、年齡、性别、BMI 等的客戶信息。根據數據集中的這些參數來預測保險費用。這是一個回歸問題,我們的目标變量—費用/保險成本—是數字的。

讓我們從加載數據集并探索屬性開始(EDA — 探索性數據分析)

回歸預測的實例(如何提高回歸模型的準确性)3

回歸預測的實例(如何提高回歸模型的準确性)4

健康保險數據框

數據集有 1338 條記錄和 6 個特征。吸煙者、性别和地區是分類變量,而年齡、BMI 和兒童是數字變量。

處理空值/缺失值

讓我們檢查數據集中缺失值的比例:

回歸預測的實例(如何提高回歸模型的準确性)5

年齡和 BMI 有一些少量空值。首先将處理這些缺失的數據,然後開始數據分析。Sklearn 的SimpleImputer允許您根據相應列中的均值/中值/最頻繁值替換缺失值。在這個例子中,我使用中值來填充空值。

回歸預測的實例(如何提高回歸模型的準确性)6

現在我們的數據是幹淨的,我們将通過可視化和地圖來分析數據。一個簡單的seaborn pairplot可以給我們很多見解!

回歸預測的實例(如何提高回歸模型的準确性)7

回歸預測的實例(如何提高回歸模型的準确性)8

Seaborn Pairplot

看到了什麼..?

  1. 收費和兒童是傾斜的。
  2. 年齡與收費呈正相關。
  3. BMI 正态分布!

Seaborn 的箱線圖和計數圖可用于顯示分類變量對費用的影響。

回歸預測的實例(如何提高回歸模型的準确性)9

分類變量的 seaborn 計數圖

回歸預測的實例(如何提高回歸模型的準确性)10

基于上述圖的觀察結果:

  1. 男性和女性的人數幾乎相等,男性和女性的平均收費中位數也相同,但男性的收費範圍更大。
  2. 吸煙者的保險費用相對較高。
  3. 2-3個孩子的人收費最高
  4. 客戶幾乎平均分布在 4 個地區,而且所有地區 費用幾乎相同
  5. 女性吸煙者的百分比低于男性吸煙者的百分比。

我們可以得出,“吸煙者”對保險費用的影響相當大,而性别的影響最小。

創建一個熱圖來了解費用和數字特征(年齡、BMI 和兒童)之間相關性的強度。

回歸預測的實例(如何提高回歸模型的準确性)11

回歸預測的實例(如何提高回歸模型的準确性)12

相關圖

我們看到年齡和 BMI 與費用具有平均 ve 相關性。

我們現在将一一介紹模型準備和模型開發的步驟。

  1. 功能編碼

在這一步中,我們将分類變量(吸煙者、性别和地區)轉換為數字格式(0、1、2、3 等),因為大多數算法無法處理非數字數據。這個過程稱為編碼,有很多方法可以做到這一點:

  1. LabelEncoding — 将分類值表示為數字(例如,具有值意大利、印度、美國、英國的區域等特征可以表示為 1、2、3、4)
  2. OrdinalEncoding — 用于将基于等級的分類數據值表示為數字。(例如将高、中、低分别表示為 1、2、3)
  3. One-hot Encoding — 将分類數據表示為二進制值 — 僅 0,1。如果分類特征中沒有很多唯一值,我更喜歡使用一次性編碼而不是标簽編碼。在這裡,我在 Region 上使用了 pandas 的一個熱編碼函數 ( get_dummies ) 并将其分成 4 别 — location_NE、location_SE、location_NW 和 location_SW。也可以對這一列使用标簽編碼,但是,一種熱門編碼給了我更好的結果。

回歸預測的實例(如何提高回歸模型的準确性)13

2. 特征選擇和縮放

接下來,我們将選擇對“費用”影響最大的特征。我選擇了除性别之外的所有功能,因為它對費用的影響非常小(從上面的可視化圖表中得出結論)。這些特征将形成我們的“X”變量,而費用将成為我們的“y”變量。如果特征比較多,建議使用scikit-learn的SelectKBest進行特征選擇,得到top特征。

回歸預測的實例(如何提高回歸模型的準确性)14

一旦我們選擇了特征,我們需要“标準化”數字——年齡、BMI、兒童。标準化過程将數據轉換為 0 到 1 範圍内的較小值,以便所有這些值都位于相同的範圍内,并且不會壓倒另一個。我在這裡使用了StandardScaler。

回歸預測的實例(如何提高回歸模型的準确性)15

現在,我們都準備好創建第一個基本模型。我們将嘗試線性回歸和決策樹來預測保險費用

回歸預測的實例(如何提高回歸模型的準确性)16

回歸預測的實例(如何提高回歸模型的準确性)17

模型分數

平均絕對誤差 ( MAE ) 和均方根誤差 ( RMSE ) 是用于評估回歸模型的指标。我們的基線模型給出了超過 76% 的分數。在 兩種方法 之間,DecisionTrees 給出了更好的 MAE 為 2780。

讓我們看看如何讓我們的模型更好。

3A。特征工程

我們可以通過操縱數據集中的一些特征來提高我們的模型分數。經過幾次試驗,我發現以下項目可以提高準确性:

  1. 使用 KMeans 将類似客戶分組到集群中。
  2. 在區域列中将東北和西北地區劃分為“北部”,将東南和西南地區劃分為“南部”。
  3. 将 'children' 轉換為名為 'more_than_one_child' 的分類特征,如果孩子的數量 > 1 則為 'Yes'

回歸預測的實例(如何提高回歸模型的準确性)18

回歸預測的實例(如何提高回歸模型的準确性)19

所有功能

3B。特征變換

從我們的 EDA 中,我們知道Y的分布是高度偏斜的,因此我們将應用 scikit-learn 的目标轉換器——QuantileTransformer來規範化這種行為。

回歸預測的實例(如何提高回歸模型的準确性)20

高達 84%……而 MAE 已減少到 2189!

4. Ensemble 和 Boosting 算法的使用

現在我們将在基于集成的 RandomForest、GradientBoosting、LightGBM 和 XGBoost 上使用這些功能。如果您是初學者并且不了解 boosting 和 bagging 方法。

回歸預測的實例(如何提高回歸模型的準确性)21

我們的 RandomForest 模型确實表現良好 — MAE為 2078。現在,我們将嘗試使用一些增強算法,例如 Gradient Boosting、LightGBM 和 XGBoost。

回歸預測的實例(如何提高回歸模型的準确性)22

回歸預測的實例(如何提高回歸模型的準确性)23

模型得分

似乎都表現得很好.

5. 超參數調優

讓我們調整一些算法參數,例如樹深度、估計量、學習率等,并檢查模型的準确性。手動嘗試不同的參數值組合非常耗時。Scikit-learn 的GridSearchCV自動執行此過程并計算這些參數的優化值。我已經将 GridSearch 應用于上述 3 種算法。下面是 XGBoost 的一個:

回歸預測的實例(如何提高回歸模型的準确性)24

回歸預測的實例(如何提高回歸模型的準确性)25

GridSearchCV 中參數的最佳值

一旦我們獲得了參數的最佳值,我們将使用這些值再次運行所有 3 個模型。

回歸預測的實例(如何提高回歸模型的準确性)26

模型得分

我們已經能夠提高我們的準确性——XGBoost 給出了 88.6% 的分數,錯誤相對較少.

回歸預測的實例(如何提高回歸模型的準确性)27

1. 費用預測值與實際值的分布圖;2. 殘差圖 — 作者圖片

分布圖和殘差圖确認預測和實際存在良好的重疊。然而,有一些預測值遠遠超出了 x 軸,這使得我們的RMSE更高。這可以通過增加我們的數據點來減少,即收集更多數據。

我們現在準備将此模型部署到生産中并在未知數據上進行測試.

簡而言之,提高我的模型準确性的點。

☛創建簡單的新功能

☛轉換目标變量

☛聚類公共數據點

☛提升算法的使用

☛Hyperparameter調優

回歸預測的實例(如何提高回歸模型的準确性)28

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved