
線(xiàn)性回歸就是利用數(shù)理統(tǒng)計(jì)中回歸分析,來(lái)確定兩種或兩種以上變量間相互依賴(lài)的定量關(guān)系的一種統(tǒng)計(jì)分析方法,運(yùn)用十分廣泛。我們?cè)?a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)過(guò)程中也經(jīng)常會(huì)遇到構(gòu)建線(xiàn)性回歸模型的場(chǎng)景,對(duì)于初學(xué)者來(lái)說(shuō)還是比較困難的。今天小編就給大家分享一篇關(guān)于python實(shí)戰(zhàn)線(xiàn)性回歸模型的文章,希望對(duì)于大家python的學(xué)習(xí)和使用,以及線(xiàn)性回歸模型的構(gòu)建有所幫助。
文章來(lái)源: 早起Python
作者:蘿卜
「多元線(xiàn)性回歸模型」非常常見(jiàn),是大多數(shù)人入門(mén)機(jī)器學(xué)習(xí)的第一個(gè)案例,盡管如此,里面還是有許多值得學(xué)習(xí)和注意的地方。其中多元共線(xiàn)性這個(gè)問(wèn)題將貫穿所有的機(jī)器學(xué)習(xí)模型,所以本文會(huì)「將原理知識(shí)穿插于代碼段中」,爭(zhēng)取以不一樣的視角來(lái)敘述和講解「如何更好的構(gòu)建和優(yōu)化多元線(xiàn)性回歸模型」。主要將分為兩個(gè)部分:
Python 多元線(xiàn)性回歸的模型的實(shí)戰(zhàn)案例有非常多,這里雖然選用的經(jīng)典的房?jī)r(jià)預(yù)測(cè),但貴在的流程簡(jiǎn)潔完整,其中用到的精度優(yōu)化方法效果拔群,能提供比較好的參考價(jià)值。
本文的數(shù)據(jù)集是經(jīng)過(guò)清洗的美國(guó)某地區(qū)的房?jī)r(jià)數(shù)據(jù)集
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt df = pd.read_csv('house_prices.csv') df.info();df.head()
參數(shù)說(shuō)明:
現(xiàn)在我們直接構(gòu)建多元線(xiàn)性回歸模型
from statsmodels.formula.api import ols # 小寫(xiě)的 ols 函數(shù)才會(huì)自帶截距項(xiàng),OLS 則不會(huì) # 固定格式:因變量 ~ 自變量(+ 號(hào)連接) lm = ols('price ~ area + bedrooms + bathrooms', data=df).fit() lm.summary()
紅框?yàn)槲覀冴P(guān)注的結(jié)果值,其中截距項(xiàng)Intercept的 P 值沒(méi)有意義,可以不用管它
從上圖可以看到,模型的精度較低,因?yàn)檫€有類(lèi)別變量neighborhood和style沒(méi)有完全利用。這里我們先查看一下類(lèi)別變量的類(lèi)別分布情況:
# 類(lèi)別變量,又稱(chēng)為名義變量,nominal variables nominal_vars = ['neighborhood', 'style'] for each in nominal_vars: print(each, ':') print(df[each].agg(['value_counts']).T) # Pandas 騷操作 # 直接 .value_counts().T 無(wú)法實(shí)現(xiàn)下面的效果 ## 必須得 agg,而且里面的中括號(hào) [] 也不能少 print('='*35)
因?yàn)轭?lèi)別變量無(wú)法直接放入模型,這里需要轉(zhuǎn)換一下,而多元線(xiàn)性回歸模型中類(lèi)別變量的轉(zhuǎn)換最常用的方法之一便是將其轉(zhuǎn)化成虛擬變量。原理其實(shí)非常簡(jiǎn)單,將無(wú)法直接用于建模的名義變量轉(zhuǎn)換成可放入模型的虛擬變量的核心就短短八個(gè)字:「四散拆開(kāi),非此即彼」。下面用一個(gè)只有 4 行的微型數(shù)據(jù)集輔以說(shuō)明。
從上表中,不難發(fā)現(xiàn):
接下來(lái)要做的就是將生成的虛擬變量們放入多元線(xiàn)性回歸模型,但要注意的是:「轉(zhuǎn)化后的虛擬變量們需要舍棄一個(gè)」,才能得到滿(mǎn)秩矩陣。具體原因和有關(guān)線(xiàn)性代數(shù)的解釋可以查看筆者打包好的論文,我們可以理解為,當(dāng)該名義變量可劃分為 n 類(lèi)時(shí),只需要 n-1 個(gè)虛擬變量就已足夠獲知所有信息了。該丟棄哪個(gè),可根據(jù)實(shí)際情況來(lái)決定。
因此為原數(shù)據(jù)集的某名義變量添加虛擬變量的步驟為:
注意虛擬變量設(shè)置成功后,需要與原來(lái)的數(shù)據(jù)集拼接,這樣才能將其一起放進(jìn)模型。
再次建模后,發(fā)現(xiàn)模型精度大大提升,但潛在的多元共線(xiàn)性問(wèn)題也隨之顯現(xiàn)出來(lái)
在解釋模型中虛擬變量的系數(shù)之前,我們先消除模型中多元共線(xiàn)性的影響,因?yàn)樵谂懦簿€(xiàn)性后,模型中的各個(gè)自變量的系數(shù)又會(huì)改變,最終的多元線(xiàn)性回歸模型的等式又會(huì)不一樣。多重線(xiàn)性回歸模型的主要假設(shè)之一是我們的預(yù)測(cè)變量(自變量)彼此不相關(guān)。我們希望預(yù)測(cè)變量(自變量)與反應(yīng)變量(因變量)相關(guān),而不是彼此之間具有相關(guān)性。方差膨脹因子(Variance Inflation Factor,以下簡(jiǎn)稱(chēng)VIF),是「指解釋變量之間存在多重共線(xiàn)性時(shí)的方差與不存在多重共線(xiàn)性時(shí)的方差之比」
上圖公式可以看出在方差膨脹因子的檢測(cè)中:
越大,顯示共線(xiàn)性越嚴(yán)重。經(jīng)驗(yàn)判斷方法表明:「當(dāng) ,不存在多重共線(xiàn)性;當(dāng) ,存在較強(qiáng)的多重共線(xiàn)性;當(dāng) ,存在嚴(yán)重多重共線(xiàn)性」。
我們自己來(lái)寫(xiě)一個(gè)方差膨脹因子的檢測(cè)函數(shù)
def vif(df, col_i): """ df: 整份數(shù)據(jù) col_i:被檢測(cè)的列名 """ cols = list(df.columns) cols.remove(col_i) cols_noti = cols formula = col_i + '~' + '+'.join(cols_noti) r2 = ols(formula, df).fit().rsquared return 1. / (1. - r2)
現(xiàn)在進(jìn)行檢測(cè)
test_data = results[['area', 'bedrooms', 'bathrooms', 'A', 'B']] for i in test_data.columns: print(i, '\t', vif(df=test_data, col_i=i))
發(fā)現(xiàn)bedrooms和bathrooms存在強(qiáng)相關(guān)性,可能這兩個(gè)變量是解釋同一個(gè)問(wèn)題,方差膨脹因子較大的自變量通常是成對(duì)出現(xiàn)的。
果然,bedrooms和bathrooms這兩個(gè)變量的方差膨脹因子較高,這里刪除自變量bedrooms再次進(jìn)行建模
lm = ols(formula='price ~ area + bathrooms + A + B', data=results).fit() lm.summary()
模型精度稍降,但消除了多元共線(xiàn)性后能夠使模型的泛化能力提升。再次進(jìn)行多元共線(xiàn)性檢測(cè)
test_data = results[['area', 'bedrooms', 'A', 'B']] for i in test_data.columns: print(i, '\t', vif(df=test_data, col_i=i))
那么多元共線(xiàn)性就「只有通過(guò)方差膨脹因子才能看的出來(lái)嗎?」 其實(shí)并不一定,通過(guò)結(jié)合散點(diǎn)圖或相關(guān)稀疏矩陣和模型中自變量的系數(shù)也能看出端倪。下圖是未處理多元共線(xiàn)性時(shí)的自變量系數(shù)。
可以很明顯的看出,bathrooms的參數(shù)很可能是有問(wèn)題的,怎么可能bathrooms的數(shù)據(jù)量每增加一個(gè),房屋總價(jià)還減少 1.373*10 的四次方美元呢?簡(jiǎn)單的畫(huà)個(gè)散點(diǎn)圖和熱力圖也應(yīng)該知道房屋總價(jià)與bathrooms 個(gè)數(shù)應(yīng)該是成正比例關(guān)系的。
多元線(xiàn)性回歸模型的可解釋性比較強(qiáng),將模型參數(shù)打印出來(lái)即可求出因變量與自變量的關(guān)系
所以最終的建模結(jié)果如下,且該模型的精度為0.916
另外在等式結(jié)果中,截距項(xiàng)Intercept和area,bedrooms等變量的系數(shù)都還好理解;A,B 這兩個(gè)虛擬變量可能相對(duì)困難些。其實(shí)根據(jù)原理部分的表格來(lái)看,如果房屋在 C 區(qū),那等式中 A 和 B 這兩個(gè)字母的值便是 0,所以這便引出了非常重要的一點(diǎn):使用了虛擬變量的多元線(xiàn)性回歸模型結(jié)果中,存在于模型內(nèi)的虛擬變量都是跟被刪除掉的那個(gè)虛擬變量進(jìn)行比較。所以這個(gè)結(jié)果便表示在其他情況完全一樣時(shí)(即除虛擬變量外的項(xiàng))A 區(qū)的房屋比 C 區(qū)低 8707.18 美元,B 區(qū)則比 C 區(qū)貴 449896.73.7 美元。當(dāng)然我們也可以畫(huà)個(gè)箱線(xiàn)圖來(lái)查看與檢驗(yàn),發(fā)現(xiàn)結(jié)果正如模型中 A 與 B 的系數(shù)那般顯示。
本文以多元線(xiàn)性回歸為基礎(chǔ)和前提,在因變量房?jī)r(jià)與多個(gè)自變量的實(shí)際觀測(cè)值建立了多元線(xiàn)性回歸模型;分析并檢驗(yàn)各個(gè)預(yù)測(cè)變量對(duì)因變量的綜合線(xiàn)性影響的顯著性,并盡可能的消除多重共線(xiàn)性的影響,篩選出因變量有顯著線(xiàn)性影響的自變量,對(duì)基準(zhǔn)模型進(jìn)行優(yōu)化,并對(duì)各自變量相對(duì)重要性進(jìn)行評(píng)定,進(jìn)而提升了回歸模型的預(yù)測(cè)精度。
數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢(xún)效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話(huà)題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類(lèi)型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專(zhuān)業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專(zhuān)業(yè)操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶(hù)體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷(xiāo)案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷(xiāo)成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類(lèi)分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類(lèi)分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10