線性回歸是最流行和討論最多的模型之一,它無疑是深入機器學習(ML)的入門之路。這種簡單、直接的建模方法值得學習,這是進入ML的第一步。
在繼續討論之前,讓我們回顧一下線性回歸可以大致分為兩類。
簡單線性回歸:當只有一個輸入變量時,它是線性回歸最簡單的形式。
多元線性回歸:這是一種線性回歸的形式,當有兩個或多個預測因子時使用。
我們將看到多個輸入變量如何共同影響輸出變量,同時還將了解計算與簡單LR模型的不同之處。我們還將使用Python構建一個回歸模型。
最後,我們將深入學習線性回歸,學習共線性、假設檢驗、特徵選擇等內容。
現在有人可能會想,我們也可以用簡單的線性回歸來分別研究我們對所有自變量的輸出。
為什麼需要線性回歸
從多個輸入變量預測結果。但是,真的是這樣嗎?
考慮到這一點,假設你要估算你想買的房子的價格。你知道建築面積,房子的年代,離你工作地點的距離,這個地方的犯罪率等等。
現在,這些因素中的一些將會對房價產生積極的影響。例如,面積越大,價格越高。另一方面,工作場所的距離和犯罪率等因素會對你對房子的估計產生負面影響。
簡單線性回歸的缺點:當我們只對一個結果感興趣時,運行單獨的簡單線性回歸會導致不同的結果。除此之外,可能還有一個輸入變量本身與其他一些預測器相關或依賴於其他一些預測器。這可能會導致錯誤的預測和不滿意的結果。
這就是多元線性回歸發揮作用的地方。
數學公式
這裡,Y是輸出變量,X項是相應的輸入變量。注意,這個方程只是簡單線性回歸的延伸,和每個指標都有相應的斜率係數(β)。
β的第一個參數(βo)是攔截常數和Y的值是在缺乏預測(我。e當所有X項都為0時),它在給定的回歸問題中可能有意義,也可能有意義,也可能沒有意義。它通常在回歸的直線/平面上提供一個相關的推動。
可視化數據
我們將使用南加州大學馬歇爾商學院網站上的廣告數據。你可以在這裡下載。
廣告數據集包括產品在200個不同市場的銷售情況,以及三種不同媒體(電視、廣播和報紙)的廣告預算。它是這樣的
第一行數據顯示,電視、廣播和報紙的廣告預算分別為230.1k美元、37.8k美元和69.2k美元,相應的銷售量為22.1k(或22.1萬)。
在簡單的線性回歸中,我們可以看到在不使用其他兩種媒體的情況下,每一種廣告媒體是如何影響銷售的。然而,在實踐中,這三者可能會共同影響淨銷售額。我們沒有考慮這些媒體對銷售的綜合影響。
多元線性回歸通過在一個表達式中考慮所有變量來解決這個問題。因此,我們的線性回歸模型現在可以表示為:
發現這些常數的值(β)是什麼回歸模型通過最小化誤差函數,擬合最好的行或超平面(根據輸入變量的數量)。這是通過最小化殘差平方和( Residual Sum of Squares)來實現的,殘差平方和是通過將實際結果和預測結果之間的差異平方得到的。
普通最小二乘法
因為這種方法求最小平方和,所以也稱為普通最小二乘法(OLS)。在Python中,有兩種主要的方法來實現OLS算法。
SciKit Learn:只需從Sklearn包中導入線性回歸模塊並將模型與數據匹配即可。這個方法非常簡單,您可以在下面看到如何使用它。
from sklearn.linear_model import LinearRegressionmodel = LinearRegression()model.fit(data.drop('sales', axis=1), data.sales)
StatsModels:另一種方法是使用StatsModels包來實現OLS。Statsmodels是一個Python包,允許對數據執行各種統計測試。我們將在這裡使用它,以便您可以了解這個很棒的Python庫,因為它將在後面的部分中對我們有幫助。
建立模型並解釋係數
# Importing required librariesimport pandas as pdimport statsmodels.formula.api as sm# Loading data - You can give the complete path to your data heread = pd.read_csv("Advertising.csv")# Fitting the OLS on datamodel = sm.ols('sales ~ TV + radio + newspaper', ad).fit()print(model.params)
輸出
Intercept 2.938889TV 0.045765radio 0.188530newspaper -0.001037
Scikit Learn運行回歸模型是最簡單的方式,並且可以使用模型找到上面的參數。coef_ & model.intercept_。
現在我們有了這些值,如何解釋它們呢?
如果我們確定電視和報紙的預算,那麼增加1000美元的廣播預算將導致銷售增加189個單位(0.189*1000)。同樣地,通過固定廣播和報紙,我們推斷電視預算每增加1000美元,產品大約增加46個單位。然而,對於報紙預算來說,由於係數幾乎可以忽略不計(接近於零),很明顯報紙並沒有影響銷售。事實上,它在0的負的一邊(-0.001),如果幅度足夠大,可能意味著這個代理是導致銷售下降。但我們不能以如此微不足道的價值做出這種推斷。如果我們僅使用報紙預算與銷售進行簡單的線性回歸,我們將觀察到係數值約為0.055,這與我們上面看到的相比是非常顯著的。為什麼會這樣呢?
共線性
ad.corr()
讓我們用熱圖把這些數字形象化。
這裡黑色的方塊表示相關性很強(接近於1),而較亮的方塊表示相關性較弱(接近於0)。這就是為什麼所有的對角線都是深藍色的,因為一個變量與它自己是完全相關的。
值得注意的是報紙和廣播的相關性是0。35。這表明報紙和廣播預算之間的關係是公平的。因此,可以推斷出→當產品的廣播預算增加時,在報紙上的花費也有增加的趨勢。
這稱為共線性,指的是兩個或多個輸入變量是線性相關的情況。
因此,儘管多元回歸模型對報紙的銷售沒有影響,但是由於這種多重共線性和其他輸入變量的缺失,簡單回歸模型仍然對報紙的銷售有影響。
我們理解了線性回歸,我們建立了模型,甚至解釋了結果。到目前為止我們學的是線性回歸的基礎。然而,在處理實際問題時,我們通常會超越這一點,統計分析我們的模型,並在需要時進行必要的更改。
預測因子的假設檢驗
在運行多元線性回歸時應該回答的一個基本問題是,至少有一個預測器在預測輸出時是否有用。
我們發現,電視、廣播和報紙這三個預測因子與銷售額之間存在不同程度的線性關係。但是,如果這種關係只是偶然發生的,並且沒有因為任何預測因素而對銷售產生實際影響呢?
該模型只能給我們數字,以在響應變量和預測因子之間建立足夠緊密的線性關係。然而,它無法證明這些關係的可信性。
我們從統計數據中獲得幫助,並做一些被稱為假設檢驗的事情。我們首先建立一個零假設和一個相應的備擇假設。
因為我們的目標是找到至少一個預測器在預測輸出時是否有用,所以我們在某種程度上希望至少有一個係數(不是截距)是非零的,這不僅僅是由於隨機的機會,而是由於實際原因。為此,我們首先形成一個零假設:所有係數都等於零。
多元線性回歸的一般零假設
廣告數據的零假設
因此,備擇假設是:至少有一個係數不為零。通過發現有力的統計證據來拒絕原假設,從而證明了這一點
假設檢驗採用F-statistic進行。這個統計數據的公式包含殘差平方和(RSS)和總平方和(TSS),我們不需要擔心這一點,因為Statsmodels包會處理這個問題。我們在上面擬合的OLS模型的總結包含了所有這些統計數據的總結,可以用這行簡單的代碼得到:
print(model.summary2())
如果F-statistic的值等於或非常接近1,那麼結果是支持零假設的,我們不能拒絕它。
但是我們可以看到,F-statistic比1大很多倍,因此為零假設(所有係數都為零)提供了有力的證據。因此,我們拒絕原假設,並相信至少有一個預測器在預測輸出時是有用的。
注意,當預測因子(p)的數量很大,或者p大於數據樣本的數量(n)時,f統計量是不合適的。
因此,我們可以說,在這三家廣告代理商中,至少有一家在預測銷售額方面是有用的。
但是哪一個或哪兩個是重要的呢?它們都重要嗎?為了找到這一點,我們將執行特徵選擇或變量選擇。一種方法是嘗試所有可能的組合。
Only TVOnly radioOnly newspaperTV & radioTV & newspaperradio & newspaperTV, radio & newspaper在這裡,嘗試所有7種組合仍然是可行的,但是如果有更多的預測因子,組合的數量將呈指數增長。例如,通過在我們的案例研究中再增加一個預測因子,總組合數將變為15。想像一下有一打預測器。因此,我們需要更有效的方法來執行特性選擇。
特徵選擇
做特徵選擇的兩種最流行的方法是:
正向選擇:我們從一個沒有任何預測器的模型開始,只使用截距項。然後,我們對每個預測器執行簡單的線性回歸,以找到最佳執行器(最低RSS)。然後我們添加另一個變量,並再次通過計算最低的RSS(殘差平方和)來檢查最佳的2變量組合。然後選擇最佳的3變量組合,以此類推。當滿足某種停止規則時,停止該方法。
逆向選擇:我們從模型中的所有變量開始,然後刪除統計意義最小的變量(更大的p值:檢查上面的模型摘要,找到變量的p值)。重複此操作,直到達到停止規則為止。例如,我們可以在模型分數沒有進一步提高的時候停止。
在這篇文章中,我將介紹向前選擇方法。首先,讓我們了解如何選擇或拒絕添加的變量。
我們要使用2種方法來評估我們的新模型:RSS和R。
我們已經熟悉RSS,它是殘差平方和,通過將實際輸出和預測結果之間的差平方來計算。它應該是模型表現良好的最小值。R方差的程度的測量數據是用模型來解釋。
數學上,它是實際結果和預測結果之間相關性的平方。R接近1表明模型是好的和解釋方差數據。接近於零的值表示模型很差。
# Defining a function to evaluate a modeldef evaluateModel(model):print("RSS = ", ((ad.sales - model.predict())**2).sum()) print("R2 = ", model.rsquared)
讓我們首先使用單個預測器逐個評估模型,從TV開始。
# For TVmodel_TV = sm.ols('sales ~ TV', ad).fit()evaluateModel(model_TV)
RSS = 2102.5305831313512R^2 = 0.611875050850071
# For radiomodel_radio = sm.ols('sales ~ radio', ad).fit()evaluateModel(model_radio)
RSS = 3618.479549025088R^2 = 0.33203245544529525
# For newspapermodel_newspaper = sm.ols('sales ~ newspaper', ad).fit()evaluateModel(model_newspaper)
RSS = 5134.804544111939R^2 = 0.05212044544430516
我們觀察到modelTV, RSS和R最小值是最在所有的模型。因此,我們選擇modelTV作為向前基礎模型。現在,我們將逐個添加廣播和報紙,並檢查新值。
# For TV & radiomodel_TV_radio = sm.ols('sales ~ TV + radio', ad).fit()evaluateModel(model_TV_radio)
RSS = 556.9139800676184R^2 = 0.8971942610828957
正如我們所看到的,我們的價值觀有了巨大的進步。RSS下降和R進一步增加,model_TV相比。這是個好兆頭。現在我們來看看電視和報紙。
# For TV & newspapermodel_TV_radio = sm.ols('sales ~ TV + newspaper', ad).fit()evaluateModel(model_TV_newspaper)
RSS = 1918.5618118968275R^2 = 0.6458354938293271
報紙的加入也提高了報紙的價值,但不如廣播的價值高。因此,在這一步,我們將繼續電視和廣播模型,並將觀察當我們添加報紙到這個模型的差異
# For TV, radio & newspapermodel_all = sm.ols('sales ~ TV + radio + newspaper', ad).fit()evaluateModel(model_all)
RSS = 556.8252629021872R^2 = 0.8972106381789522
這些值沒有任何顯著的改進。因此,有必要不添加報紙,並最終確定模型與電視和廣播作為選定的功能。所以我們最終的模型可以表示為:
在3D圖形中繪製變量TV、radio和sales,我們可以可視化我們的模型如何將回歸平面與數據匹配。
希望看完這篇文章後你會對多元線性回歸有一個新的理解