訂閱
糾錯(cuò)
加入自媒體

Python數(shù)據(jù)科學(xué):線性回歸

02 多元線性回歸

多元線性回歸是在簡單線性回歸的基礎(chǔ)上,增加更多的自變量。

二元線性回歸是最簡單的多元線性回歸。

其中一元回歸擬合的是一條回歸線,那么二元回歸擬合的便是一個(gè)回歸平面。

在多元線性回歸中,要求自變量與因變量之間要有線性關(guān)系,且自變量之間的相關(guān)系數(shù)要盡可能的低。

回歸方程中與因變量線性相關(guān)的自變量越多,回歸的解釋力度就越強(qiáng)。

若方程中非線性相關(guān)的自變量越多,那么模型解釋力度就越弱。

可以使用調(diào)整后的R?(與觀測個(gè)數(shù)及模型自變量個(gè)數(shù)有關(guān))來評價(jià)回歸的優(yōu)劣程度,即評價(jià)模型的解釋力度。

下面還是以書中的案例,實(shí)現(xiàn)一個(gè)多元線性回歸。

分析客戶年齡、年收入小區(qū)房屋均價(jià)、當(dāng)?shù)厝司杖?/strong>與信用卡月均支出的關(guān)系。

# 使用多元線性回歸建立模型

lm_m = ols('avg_exp ~ Age + Income + dist_h(yuǎn)ome_val + dist_avg_income', data=exp).fit()

print(lm_m.summary())

多元線性回歸模型信息如下。

輸出R為0.542,調(diào)整R?為0.513。

方程顯著性(回歸系數(shù)不全為0)的檢驗(yàn)P值為1.82e-10,接近于0,說明回歸方程是有意義的。

客戶年齡、小區(qū)房屋均價(jià)的回歸系數(shù)都不顯著。

年收入、當(dāng)?shù)厝司杖?/strong>的回歸系數(shù)顯著。

多元線性回歸可以根據(jù)向前法、向后法、逐步法來對自變量進(jìn)行篩選。

向前法就是不斷加入變量去構(gòu)建回歸方程,向后法則是不斷去除變量去構(gòu)建回歸方程,逐步法是兩者的結(jié)合,又加入又刪除的。

三種方法都是基于AIC準(zhǔn)則(最小信息準(zhǔn)則),其中AIC值越小說明模型效果越好,越簡潔

使用AIC準(zhǔn)則能夠避免變量的增加成為殘差平方和減小的主要原因情況的發(fā)生,防止模型復(fù)雜度的增加。

本次采用向前回歸法,不斷加入變量,得到加入后變量的AIC值,最后找到解釋力度最大的變量。

# 向前回歸法

def forward_select(data, response):

"""data是包含自變量及因變量的數(shù)據(jù),response是因變量"""

# 獲取自變量列表

remaining = set(data.columns)

remaining.remove(response)

selected = []

# 定義數(shù)據(jù)類型(正無窮)

current_score, best_new_score = float('inf'), float('inf')

# 自變量列表含有自變量時(shí)

while remaining:

aic_with_candidates = []

# 對自變量列表進(jìn)行循環(huán)
       for candidates in remaining:

# 構(gòu)建表達(dá)式,自變量會不斷增加

formula = "{} ~ {}".format(response, ' + '.join(selected + [candidates]))

# 生成自變量的AIC解釋力度

aic = ols(formula=formula, data=data).fit().a(chǎn)ic

# 得到自變量的AIC解釋力度列表

aic_with_candidates.a(chǎn)ppend((aic, candidates))
       # 對解釋力度列表從大到小排序
       aic_with_candidates.sort(reverse=True)

# 得到解釋力度最大值(AIC值最。┘白宰兞

best_new_score, best_candidate = aic_with_candidates.pop()

# 1.正無窮大大于解釋力度最大值 2.上一期實(shí)驗(yàn)的AIC值需大于下一期的AIC實(shí)驗(yàn)值,即添加變量越多,AIC值應(yīng)該越小,模型效果越好

if current_score > best_new_score:

# 移除影響最大的自變量

remaining.remove(best_candidate)

# 添加影響較大的自變量

selected.a(chǎn)ppend(best_candidate)

# 賦值本次實(shí)驗(yàn)的AIC值

current_score = best_new_score

print('aic is {},continue。В甪ormat(current_score))

else:

print('forward selection over!')

break

# 采用影響較大的自變量列表,對數(shù)據(jù)做線性回歸

formula = "{} ~ {}".format(response, ' + '.join(selected))

print('final formula is {}'.format(formula))

model = ols(formula=formula, data=data).fit()

return model

# 采用向前回歸法篩選變量,利用篩選的變量構(gòu)建回歸模型

data_for_select = exp[['avg_exp', 'Income', 'Age', 'dist_h(yuǎn)ome_val', 'dist_avg_income']]

lm_m = forward_select(data=data_for_select, response='avg_exp')

print(lm_m.rsquared)

輸出結(jié)果。

發(fā)現(xiàn)客戶年齡(Age)被篩除了,最終得到線性回歸模型。

/ 03 / 總結(jié)

這里只是構(gòu)建了一下線性回歸模型而已,只能說湊合著用。

后面還將對模型進(jìn)行診斷,使得模型更具有參考價(jià)值。

未完待續(xù)...

<上一頁  1  2  
聲明: 本文由入駐維科號的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報(bào)。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個(gè)字

您提交的評論過于頻繁,請輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無評論

暫無評論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號