搜尋
首頁後端開發Python教學使用Python檢測和處理迴歸中的多重共線性問題

使用Python檢測和處理迴歸中的多重共線性問題

Aug 18, 2023 pm 03:05 PM
python多重共線性迴歸處理

多重共線性是指迴歸模型中的自變數之間存在高度的相互關聯。這可能導致模型的係數不準確,使得難以判斷不同的自變數對因變數的影響。在這種情況下,有必要識別和處理迴歸模型的多重共線性,並結合不同的程序和它們的輸出,我們將逐步解釋。

方法

  • 偵測多重共線性

  • #處理多重共線性

#演算法

步驟 1 − 導入必要的函式庫

第二步 - 將資料載入到pandas Dataframes中

步驟 3 - 使用預測變數建立相關矩陣

第四步 − 建立一個相關矩陣的熱力圖,以視覺化相關性

第5步 - 計算輸出的每個預測變數的變異數膨脹因子

步驟 6 − 確定預測器

第7步 - 預測器應該被移除

步驟8 - 重新執行迴歸模型

第九步 - 再次檢查。

方法一:偵測多重共線性

使用pandas包的corr()函數來決定獨立變數的相關矩陣。使用seaborn庫產生熱力圖來顯示相關矩陣。使用statsmodels套件的variance_inflation_factor()函數來確定每個獨立變數的變異數膨脹因子(VIF)。 VIF大於5或10表示存在高多重共線性。

Example-1

的中文翻譯為:

範例-1

在這段程式碼中,一旦資料載入到Pandas DataFrame中,預測變數X和因變數y就會被分開。為了計算每個預測變數的VIF,我們使用statsmodels套件中的variance_inflation_factor()函數。在流程的最後一步,我們將VIF值以及預測變數的名稱儲存在一個全新的Pandas DataFrame中,然後顯示結果。使用這段程式碼,將產生一個包含每個預測變數的變數名稱和VIF值的表格。當一個變數具有較高的VIF值(高於5或10,取決於情況),進一步分析該變數是很重要的。

import pandas as pd
from statsmodels.stats.outliers_influence import variance_inflation_factor

# Load data into a pandas DataFrame
data = pd.read_csv("mydata.csv")

# Select independent variables
X = data[['independent_var1', 'independent_var2', 'independent_var3']]

# Calculate VIF for each independent variable
vif = pd.DataFrame()
vif["VIF Factor"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
vif["features"] = X.columns

# Print the VIF results
print(vif)

輸出

VIF  Factor      Features 
0    3.068988    Independent_var1
1    3.870567    Independent_var2
2    3.843753    Independent_var3

方法二:處理多重共線性

排除模型中一個或多個強相關的自變數。可以使用主成分分析(PCA)將高度相關的自變數合併為一個變數。可以使用嶺迴歸或套索迴歸等正規化方法來減少強相關自變數對模型係數的影響。使用上述方法,可以使用以下範例程式碼來識別和解決多重共線性問題−

import pandas as pd
import seaborn as sns
from statsmodels.stats.outliers_influence import variance_inflation_factor
from sklearn.decomposition import PCA
from sklearn.linear_model import Ridge

# Load the data into a pandas DataFrame
data = pd.read_csv('data.csv')

# Calculate the correlation matrix
corr_matrix = data.corr()

# Create a heatmap to visualize the correlation matrix
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')

# Check for VIF for each independent variable
for i in range(data.shape[1]-1):
   vif = variance_inflation_factor(data.values, i)
   print('VIF for variable {}: {:.2f}'.format(i, vif))

# Remove highly correlated independent variables
data = data.drop(['var1', 'var2'], axis=1)

# Use PCA to combine highly correlated independent variables
pca = PCA(n_components=1)
data['pca'] = pca.fit_transform(data[['var1', 'var2']])

# Use Ridge regression to reduce the impact of highly correlated independent variables
X = data.drop('dependent_var', axis=1)
y = data['dependent_var']
ridge = Ridge(alpha=0.1)
ridge.fit(X, y)

除了輸出每個獨立變數的VIF值之外,函數不會產生任何其他輸出。執行此程式碼只會輸出每個獨立變數的VIF值;不會列印任何圖形或模型效能。

在這個例子中,資料首先被載入到一個pandas DataFrame中,然後計算相關矩陣,最後建立一個熱力圖來展示相關矩陣。然後,我們在測試每個獨立變數的VIF之後,消除具有高度相關性的獨立因素。我們使用嶺迴歸來減少高度相關的獨立變數對模型係數的影響,並使用主成分分析將高度相關的獨立變數合併為一個變數。

import pandas as pd

#create DataFrame
df = pd.DataFrame({'rating': [90, 85, 82, 18, 14, 90, 16, 75, 87, 86],
         'points': [22, 10, 34, 46, 27, 20, 12, 15, 14, 19],
         'assists': [1, 3, 5, 6, 5, 7, 6, 9, 9, 5],
         'rebounds': [11, 8, 10, 6, 3, 4, 4, 10, 10, 7]})

#view DataFrame
print(df)

輸出

   rating  points  assists  rebounds
0      90      22        1        11
1      85      10        3         8
2      82      34        5        10
3      18      46        6         6
4      14      27        5         3
5      90      20        7         4
6      16      12        6         4
7      75      15        9        10
8      87      14        9        10
9      86      19        5         7

使用Pandas包,可以透過這個Python程式產生一個稱為DataFrame的陣列資料結構。具體的維度包括四個不同的欄位:助攻、籃板、得分和評分。該庫在程式碼的開頭行被導入,並在之後被稱為"pd"以減少複雜性。透過在第二行程式碼中執行pd.DataFrame()方法最終建構了一個DataFrame。

在程式碼的第三行使用print()方法將DataFrame印到控制台。每列的值構成了列表的定義,充當字典輸入函數的鍵和值。每位球員的資料以表格顯示,統計數據包括得分、助攻和籃板,排列在列中,每行代表一個球員。

結論

總之,當模型中的兩個或多個預測變數彼此之間存在強相關性時,這稱為多重共線性。這種情況會使得解釋模型結果變得困難。在這種情況下,很難確定每個獨特的預測變數如何影響結果變數。

以上是使用Python檢測和處理迴歸中的多重共線性問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:tutorialspoint。如有侵權,請聯絡admin@php.cn刪除
什麼是Python Switch語句?什麼是Python Switch語句?Apr 30, 2025 pm 02:08 PM

本文討論了版本3.10中介紹的Python的新“匹配”語句,該語句與其他語言相同。它增強了代碼的可讀性,並為傳統的if-elif-el提供了性能優勢

Python中有什麼例外組?Python中有什麼例外組?Apr 30, 2025 pm 02:07 PM

Python 3.11中的異常組允許同時處理多個異常,從而改善了並發方案和復雜操作中的錯誤管理。

Python中的功能註釋是什麼?Python中的功能註釋是什麼?Apr 30, 2025 pm 02:06 PM

Python中的功能註釋將元數據添加到函數中,以進行類型檢查,文檔和IDE支持。它們增強了代碼的可讀性,維護,並且在API開發,數據科學和圖書館創建中至關重要。

Python的單位測試是什麼?Python的單位測試是什麼?Apr 30, 2025 pm 02:05 PM

本文討論了Python中的單位測試,其好處以及如何有效編寫它們。它突出顯示了諸如UNITSEST和PYTEST之類的工具進行測試。

Python中的訪問說明符是什麼?Python中的訪問說明符是什麼?Apr 30, 2025 pm 02:03 PM

文章討論了Python中的訪問說明符,這些說明符使用命名慣例表明班級成員的可見性,而不是嚴格的執法。

Python中的__Init __()是什麼?自我如何在其中發揮作用?Python中的__Init __()是什麼?自我如何在其中發揮作用?Apr 30, 2025 pm 02:02 PM

文章討論了Python的\ _ \ _ Init \ _ \ _()方法和Self在初始化對象屬性中的作用。還涵蓋了其他類方法和繼承對\ _ \ _ Init \ _ \ _()的影響。

python中的@classmethod,@staticmethod和實例方法有什麼區別?python中的@classmethod,@staticmethod和實例方法有什麼區別?Apr 30, 2025 pm 02:01 PM

本文討論了python中@classmethod,@staticmethod和實例方法之間的差異,詳細介紹了它們的屬性,用例和好處。它說明瞭如何根據所需功能選擇正確的方法類型和DA

您如何將元素附加到Python數組?您如何將元素附加到Python數組?Apr 30, 2025 am 12:19 AM

Inpython,YouAppendElementStoAlistusingTheAppend()方法。 1)useappend()forsingleelements:my_list.append(4).2)useextend()orextend()或= formultiplelements:my_list.extend.extend(emote_list)ormy_list = [4,5,6] .3)useInsert()forspefificpositions:my_list.insert(1,5).beaware

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。