逐步回歸

Stepwise Regression

逐步回歸算法可以用來篩選以及擬合特征,來實現(xiàn)特征的降維姑食,主要是再Y對應(yīng)多個x_i的情況(即一個因變量對應(yīng)多個自變量的情況拆座,也可稱為多元回歸)

  • 其實可以理解為:

在線性條件下,哪些變量組合能夠解釋更多的因變量變異您市,則將其保留。

 $ Y=W_1 X_1+W_2X_2+......W_iX_i 

逐步回歸算法的主要方法


具體操作方法有三種:

  1. Forward selection: 首先模型中只有一個單獨解釋因變量變異最大的自變量役衡,之后嘗試將加入另一自變量茵休,看加入后整個模型所能解釋的因變量變異是否顯著增加(這里需要進行檢疫,可以用 F-test手蝎, t-test 等等)榕莺;這一過程反復(fù)迭代,直到?jīng)]有自變量再符合加入模型的條件棵介。
  2. Backward elimination: 與 Forward selection 相反钉鸯,此時,所有變量均放入模型邮辽,之后嘗試將其中一個自變量從模型中剔除唠雕,看整個模型解釋因變量的變異是否有顯著變化,之后將使解釋量減少最少的變量剔除吨述;此過程不斷迭代岩睁,直到?jīng)]有自變量符合剔除的條件。
  3. Bidirectional elimination: 這種方法相當(dāng)于將前兩種結(jié)合起來锐极◇狭牛可以想象,如果采用第一種方法灵再,每加入一個自變量肋层,可能會使已存在于模型中的變量單獨對因變量的解釋度減小,當(dāng)其的作用很恤崆ā(不顯著)時栋猖,則可將其從模型中剔除。而第三種方法就做了這么一件事汪榔,不是一味的增加變量蒲拉,而是增加一個后,對整個模型中的所有變量進行檢驗痴腌,剔除作用不顯著的變量雌团。最終盡可能得到一個最優(yōu)的變量組合。

主要操作方法如上面所示士聪,那么如何去評價那個變量是真的有價值的呢锦援,這個時候再公式上可以去看一個指標(biāo),那就是觀察R方的變化剥悟,那么到底什么是R方呢灵寺,一句話描述下它的功能就是

來表示回歸直線對觀測值的擬合程度,其主要的公式如下

R^2=SSR/SST=1-SSE/SST
(其中SSR是組間變異,SST是總變異)
進一步的詳細描述下如下:
R^2=1-\frac{\sum{(y-\hat{y})^2}}{\sum{(y-\bar{y})^2}}=cov(y,y_i)^2

看這個式子式用1減去y對回歸方程的方差(未解釋離差)與y的總方差的比值区岗,y減去 \hat{y}也就是殘差略板,是擬合方程中不能解釋的部分,用1減去不能解釋的部分慈缔,那么剩下的就是解釋的部分叮称,也就是說自變量解釋了因變量變動的百分比的多少,那么r方的值肯定是越大越好藐鹤,意味著該模型把y的變動解釋得好颅拦,R方的范圍顯然是0到1,在預(yù)測實踐中教藻,人們往往采納R方最高的模型,其中cov(y,y_i)是協(xié)方差函數(shù).同時跟R_square相似的指標(biāo)距帅,相關(guān)系數(shù)R

R=\frac{\sum_{i=1}^{n}(x-\bar{x})(y_i-\bar{y})}{\sqrt{\sum_{i=1}^{n}(x-\bar{x})^2 \sum_{i=1}^{n}(y_i-\bar{y})^2}}

還有一個定義就是調(diào)整R方(R_adjusted):當(dāng)給模型增加自變量時,復(fù)決定系數(shù)也隨之逐步增大括堤,然而復(fù)決定系數(shù)的增大代價是殘差自由度的減少碌秸,因為殘差自由度等于樣本個數(shù)與字變量個數(shù)之差。自由度小意味著估計和預(yù)測可靠性低

    R^{2}_{adjusted}=1-\frac{(1-R^2)(n-1)}{n-p-1}

其中,n為樣本容量悄窃,p為自變量的個數(shù)讥电。在實際問題的回歸建模中,自由度調(diào)整負(fù)決定系數(shù)R方越大轧抗,所對應(yīng)的回歸方程越好恩敌。則所有回歸子集中調(diào)整R方最大者對應(yīng)的回歸方程就是最優(yōu)方程。

Python Achievement

下面是基于statsnidels中的回歸函數(shù)實現(xiàn)的代碼

import pandas as pd
import numpy as np
import statsmodels.formula.api as smf
 
 
data_columns=data.columns.tolist()
#此部分剔除掉不需要的變量
need_remove=['value']
for i in need_remove:
    data_columns.remove(i)
 
new_scores={}
best_variable=[]
 
#先一開始設(shè)定一個最初的變量横媚,以此來迭代循環(huán)
best_property='OverallQual'
best_property_1='a'
   
new_data=pd.DataFrame()
best_score=0.0
 
while data_columns:
    if best_property_1 != best_property:
        data_columns.remove(best_property)
        best_variable.append(best_property)
        best_property_1=best_property
        new_data=pd.concat([new_data,x_train[best_property]],axis=1)
        for c in data_columns:
            new_data_1=pd.concat([new_data,x_train[c]],axis=1)
            number_property=len(new_data_1.columns.tolist())
            a=np.array(new_data_1).reshape(-1,number_property)
            b=np.array(y_train).reshape(-1,1)
            regr=smf.OLS(b,a).fit()
            scores=regr.rsquared_adj
            if scores>best_score:
                best_score=scores
                best_property=c
        print(best_variable)
        count=len(best_variable)
    else:
        print('此時得分最高的為 %s纠炮,且變量只有%s個為%s' % (best_score,count,best_variable))
        print(best_variable)
        break

R code

R中的實現(xiàn)相對比較簡單月趟,主要是step函數(shù),主要是先設(shè)置擬合式子恢口,然后用函數(shù)進行逐步回歸孝宗,最終會返回各個變量的貢獻比以及系數(shù)

lmo3.1<-lm(y~1,data=data3.1)
lm3.1.for<-step(lmo3.1,scope=list(upper=~x1+x2+x3+x4+x5+x6+x7+x8+x9,lower=~1),direction="forward")
summary(lm3.1.for)//direction參數(shù)來設(shè)置是前進法還是后退法,summary函數(shù)來返回各個系數(shù)的值
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耕肩,一起剝皮案震驚了整個濱河市因妇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猿诸,老刑警劉巖婚被,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異梳虽,居然都是意外死亡址芯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門怖辆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來是复,“玉大人,你說我怎么就攤上這事竖螃∈缋龋” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵特咆,是天一觀的道長季惩。 經(jīng)常有香客問我,道長腻格,這世上最難降的妖魔是什么画拾? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮菜职,結(jié)果婚禮上青抛,老公的妹妹穿的比我還像新娘。我一直安慰自己酬核,他們只是感情好蜜另,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嫡意,像睡著了一般举瑰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔬螟,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天此迅,我揣著相機與錄音,去河邊找鬼。 笑死耸序,一個胖子當(dāng)著我的面吹牛忍些,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佑吝,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼坐昙,長吁一口氣:“原來是場噩夢啊……” “哼绳匀!你這毒婦竟也來了芋忿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤疾棵,失蹤者是張志新(化名)和其女友劉穎戈钢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體是尔,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡殉了,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拟枚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薪铜。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖恩溅,靈堂內(nèi)的尸體忽然破棺而出隔箍,到底是詐尸還是另有隱情,我是刑警寧澤脚乡,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布蜒滩,位于F島的核電站,受9級特大地震影響奶稠,放射性物質(zhì)發(fā)生泄漏俯艰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一锌订、第九天 我趴在偏房一處隱蔽的房頂上張望竹握。 院中可真熱鬧,春花似錦辆飘、人聲如沸啦辐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昧甘。三九已至,卻和暖如春战得,著一層夾襖步出監(jiān)牢的瞬間充边,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浇冰,地道東北人贬媒。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像肘习,于是被迫代替她去往敵國和親际乘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容