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

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

02 多元線性回歸

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

二元線性回歸是最簡(jiǎn)單的多元線性回歸。

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

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

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

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

可以使用調(diào)整后的R?(與觀測(cè)個(gè)數(shù)及模型自變量個(gè)數(shù)有關(guān))來(lái)評(píng)價(jià)回歸的優(yōu)劣程度,即評(píng)價(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,說(shuō)明回歸方程是有意義的。

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

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

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

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

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

使用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ù)類型(正無(wú)窮)

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

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

while remaining:

aic_with_candidates = []

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

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

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))
       # 對(duì)解釋力度列表從大到小排序
       aic_with_candidates.sort(reverse=True)

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

best_new_score, best_candidate = aic_with_candidates.pop()

# 1.正無(wú)窮大大于解釋力度最大值 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

# 采用影響較大的自變量列表,對(duì)數(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)建了一下線性回歸模型而已,只能說(shuō)湊合著用。

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

未完待續(xù)...

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

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

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

暫無(wú)評(píng)論

暫無(wú)評(píng)論

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

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