概括
理解多重線性回歸的應用 , 潛在問題和評估模型擬合的方法 , 是更復雜機器學習方法的核心
學習了如何在Python中構建多元線性回歸模型,這實際上與您在簡單線性回歸的上一課中所做的非常類似。
學習了如何編碼虛擬變量,并解釋附加到每個變量的系數。
了解了更高階項,以及它如何影響您解釋系數的能力。
學習了如何識別在多元線性回歸模型中需要交互的含義,以及如何識別其他更高階項。但同樣,這些確實使得解釋系數不再是優先考慮的事情,而是將模型轉向一個更傾向于以解釋為代價進行預測的模型。
了解了模型假設,我們仔細研究了多重共線性。您了解了方差膨脹因子,以及多重共線性如何影響模型系數和標準誤差。
1 簡介
上節課你學習了如何在簡單線性回歸中 , 使用單個解釋變量預測反應變量
In this lesson, you will be extending your knowledge of simple linear regression, where you were predicting a quantitative response variable using a quantitative explanatory variable. That is, you were using an equation that looked like this:
在這節課中你將繼續學習這一內容 , 你將學習如何利用多個輸入預測反應變量 , 其中包括定量變量和分類變量
In this lesson, you will learn about multiple linear regression. In these cases, you will be using both quantitative and categorical x-variables to predict a quantitative response. That is, you will be creating equations that like this to predict your response:
此外,您將學習如何評估多元線性回歸中可能發生的問題,如何解決這些問題,以及如何評估模型的執行情況。事實證明,Rsquared可以使用,但可能會產生誤導。并且,遺憾的是,相關系數只是兩個定量變量之間線性關系的度量,因此在多元線性回歸的情況下它不會非常有用。
這里有一個很好的額外資源:統計學習簡介全文。這是一本非常壯觀的機器學習入門書。
具體來說,第3章討論了本課程中的許多想法。文本中執行的編程在R中,但我們將繼續在本課程中使用Python。
2 多元線性回歸
假設你正打算投資買房 , 特別是想購買一棟 , 你認為物超所值的房屋 , 我們收集了近期滿足你需求的在售房屋信息
這是你收集到信息的表格 房屋價格 , 三類社區 A B 和 C , 房屋建筑面積 , 臥室數量 , 衛生間數量和風格 , 包括平房 維多利亞式別墅和林間小屋
在上節課中 , 你學會如何使用 , 其中一項定量內容 預測房屋價格 , 但是如果我們想要使用所有這些內容會如何呢? , 如果是這些列呢? , 使用斜率 7 乘以街區 A , 或者維多利亞風格 這意味著什么?
實際上 我們使用線性代數 , 同時使用所有這些輸入預測 y 值 , 這樣做可以創建一個輸入矩陣
所以利用這里的值我們可以創建想要預測的響應矢量 , 這個矩陣通常用符號表示為大寫 X , 響應矢量用 Y 表示 , 為了區分之前看到的符號 , 這些符號都用黑體表示
為了真正掌握 , 多重線性回歸的所有內容和原理 , 你需要了解這些矢量和矩陣如何共同運行.
如果您需要線性代數復習,請在下面列出另外兩個資源!
可汗學院的線性代數免費課程,以便您需要復習。
本課程中課外教材中的線性代數和NumPy進修課程。
3
實際上你可以熟練進行擬合 , 多重線性回歸模型和解釋這些模型的結果 , 我們來看一個例子 , 這是個類似的數據集 , 上節課你見到的房屋數據集 可以從資源中獲取 , 在接下來的概念中還會繼續使用
現在我已經寫出合適的庫和數據集 , 現在為了擬合線性模型 , 我們首先創建一個截距 , 然后再次使用上節課的 statsmodels , 但是我們需要把所有變量加入的 X 部分列表中 , 所以這里增加截距 , 我們想要預測價格 , 在右側這里 , 我們需要增加所有定量變量 , 如果要增加分類變量 , 你會注意到 , 存儲為 LM 表示線性回歸 , 我們可以擬合模型
如何在多元線性回歸中找到“正確”系數
在簡單線性回歸部分中,了解了我們對如何使每個實際數據點與模型中預測值之間的平方距離進行最小化感興趣。
但在多元線性回歸中,我們實際上所處理的數據點不僅僅是二維空間的點。
For a full derivation of how this works, this article provides a break down of the steps.
5
我們可以將每個系數解釋為解釋變量中每一個單位增加的響應的預測增加,使模型中的所有其他變量保持不變。
但是,通常,系數可能是正數或負數。因此,每個系數是解釋變量中每一個單位增加的響應的預測變化,使模型中的所有其他變量保持不變。
這種解釋非常類似于您在上一課中看到的簡單添加短語“保持所有其他變量不變”,這意味著只有附加到系數的變量會發生變化,而所有其他變量保持不變。
6 虛擬變量
所以你發現把分類解釋變量添加到 X 矩陣 , 無法像添加定量變量一樣順利 , 除了把這樣的列添加到 X 矩陣中 , 這些列包含值 街區 A B C 等 , 我們最后要創建所謂的虛擬變量 , 編碼虛擬變量可以采用多種方式 , 但是最常見的是編碼為 0 和 1
原理:
我們為這一列每個值創建一列 , 對于每一列 , 如果列中存在值 則為 1 否則是 0 , 所以我們可以為 A 值創建這樣一列
然后我們為 B 值創建的一列 , 可以像是這樣 , 最后一列是這樣的 , 你要對添加到數據集中的每個分類變量 , 采用這種方法 , 由于最后一列是根據前兩列推算出來的 , 并且值 1 只存在于 , 列中不包含 1 的行
也就是說其中任意一列與其他兩列有相關性, 可以用其他兩列表示.
我們實際上最終要舍棄這一列 , 舍棄哪一列實際上并沒有太大影響 ,
總結:
我們在多元線性回歸模型中添加分類變量的方法是使用虛擬變量(dummy variable)。添加虛擬變量的最常見方式是通過1,0編碼。在此編碼方法中,您為類別的每個級別(在本例中為A,B或C)創建新列。然后我們的新列保持1或0,具體取決于原始列中是否存在級別。
當我們將這些虛擬變量添加到我們的多元線性回歸模型時,我們總是丟棄其中一列。您刪除的列稱為基線(baseline)。從多元線性回歸模型的輸出中獲得的系數則表明編碼水平與基線水平(水平下降)的比較。
Text: Dummy Variables
The Math Behind Dummy Variables
In the last video, you were introduced to the idea the way that categorical variables will be changed to dummy variables in order to be added to your linear models.
Then, you will need to drop one of the dummy columns in order to make your matrices full rank.
If you do not drop one of the columns when creating the dummy variables, your solution is unstable and results from python are unreliable. You will see an example of what happens if you do not drop one of the dummy columns in the next concept.
The takeaway is...when you create dummy variables using 0, 1 encodings, you always need to drop one of the columns to make sure your matrices are full rank (and that your solutions are reliable from python).
The reason for this is linear algebra. Specifically, in order to invert matrices, a matrix must be full rank (that is all the columns need to be linearly independent). Therefore, you need to drop one of the dummy columns, to create linearly independent columns (and a full rank matrix).
quiz
對于其他變量,您將獲得截距加上4個虛擬變量,總共5個系數。
7
現在我們練習一下把虛擬變量添加到線性模型中
首先我們加載必要的庫和數據 , 為了創建虛擬變量 , Pandas 提供了一種實用方法 叫做 get_dummy
, 通過谷歌快速搜索可以得到這個文檔
如果傳遞街區(neighborhood)一列
你會發現得到 A , B 和 C 其中這里有三個 B , 發現這里有三個 1 然后這有一個 A , 所以我們看到這個 1 表示 A , 其他 0 表示其余這些列 , 我們存儲為輸出結果 A , B C
正如你在之前練習所見 , 只使用線性模型中的分類列無法起作用 , 我們來看一下 , 使用虛擬變量和線性回歸模型能不能更成功 , 這里我已經創建了街區
然后采用相同方式創建風格 , 分類變量總是以字母順序呈現 , 按照字母順序首先出現的 , 也會首先返回到列中 , 所以在你看到這個前 我們不能直接把這些虛擬變量傳遞到線性回歸模型中 , 我們再次嘗試使用這些虛擬變量
記住你總是要舍棄其中一列 , 你舍棄的這列稱為基準類別 , 我們來舍棄維多利亞一列 只使用另外兩列 , 這樣我們舍棄這一列 使用這兩列 , 同樣我們創建基準為 A B 和 C , 添加到線性模型時舍棄其中一個
解釋
You can look at the p-values to compare to neighborhood A. In order to compare neighborhood B to neighborhood C, you can compare the confidence intervals. Since the confidence intervals for B and C do not overlap, we have have evidence they differ as well.
為了創建只使用房屋的線性模型 我們可以這樣做 , 我們將要預測價格 , 增加一個截距 , 然后是在模型中 , 我得到這個截距 , 所以這里你看到我們成功幾率更大 , 這里我們擬合模型 , 最終可以看到包含摘要指令的結果
這個截距表明如果房屋是維多利亞風格 , 預測價格為 1,046,000 美元 , 林間小屋的價格比維多利亞房屋低 741,000 美元
同樣 平房的價格比維多利亞房屋低471,000 美元 , 這些與基準類別形成對比 , 可以得出對基準類別的估算
quiz
解釋
8
不過 還有一種編碼虛擬變量的方法 , 也在編程語言中非常常見 稱為 SAS , 在 SAS 中編碼默認值是 1 0 和 -1 , SAS 是健康等相關領域中非常流行的編程語言 , 值得注意的最大不同點在于 它可以改變 , 你從模型中得到的系數 , 和對這些系數的解釋方式 , 使用 0 和 1 編碼時 , 對比系數和基準分類 進行解釋 , 不過如果使用 0 1 和 -1, 你的系數是與平均數做對比 而不是整體
9
構建多重線性回歸模型時 , 會出現許多問題 , 但是發現哪些方面成為問題 , 取決于你模型的用途
你將要利用模型了解變量 x 和 y 如何具有相關性嗎? , 你將要利用模型較好地預測反應變量嗎? , 還是想要發現 , 哪個變量對預測反應變量有用處呢? , 每個問題都可能存在一些相應的問題 , 根據你最感興趣的方面 , 這有利于決定哪些問題是你想要解決的
在《統計學習導論》中 , 提到了下列問題
- 第一反應變量和預測變量之間可能不存在線性關系
- 第二 可能具有相關性誤差
- 第三 可能不具有誤差的常數方差
- 第四 可能具有破壞模型的離群值或杠桿點
- 最后可能存在更多的線性度
附加材料
模型假設以及如何解決每個問題
以下是在統計學習導論中提到的前一個視頻中提到的五個假設:
- 反應變量 - 預測變量關系的非線性
- 誤差項的相關性
- 非常數方差和正態分布誤差
- 異常值/高杠桿點
- 共線性
本文概述了如何識別這些問題是否存在,以及如何解決這些問題。在即將到來的概念中,我們將更加密切地關注我認為應該得到更多關注的特定點,但在下面您將看到對每個主題的更詳盡的介紹。讓我們仔細看看這些項目。
線性
線性假設是線性模型是您的響應和預測變量之間真正存在的關系。如果不是這樣,那么您的預測將不會非常準確。此外,與系數相關的線性關系實際上也沒有用。
在本頁底部的圖像中,這些被認為是偏向模型。理想情況下,我們希望看到點的隨機散布,如圖像中的左上角殘差圖。
誤差相關性
當我們的數據隨著時間的推移收集時(例如預測股票價格或未來的利率)或數據在空間上相關(如預測洪水或干旱地區),經常會出現誤差相關。我們通常可以通過使用過去數據點(時間)或附近點(空間)的信息來改進我們的預測。
不考慮相關誤差的主要問題是,您通常可以利用此相關性來更好地預測未來事件或事件在空間上彼此接近。
識別是否存在相關誤差的最常用方法之一是基于收集數據的域。如果您不確定,有一項稱為Durbin-Watson測試的測試,通常用于評估誤差的相關性是否是一個問題。然后通常實施ARIMA或ARMA模型以使用該相關性來做出更好的預測。
非常數方差和正態分布誤差
非常數方差是指預測值的差異取決于您嘗試預測的值。就預測而言,這不是一個大問題。但是,它確實會導致置信區間和p值不準確。系數的置信區間對于實際值更接近預測值的區域而言太寬,但對于實際值更接近預測值的區域而言太窄。
通常,日志(或響應變量的一些其他變換)是為了“擺脫”非常數方差。為了選擇轉換,通常使用Box-Cox。
可以使用殘差圖通過預測值再次評估非恒定方差。在頁面底部的圖像中,非常數方差被標記為異方差。理想情況下,我們需要一個具有同方差殘差的無偏模型(在整個值范圍內保持一致)。
雖然文本沒有討論殘差的正態性,但如果您有興趣創建可靠的置信區間,這是回歸的一個重要假設。此處提供了有關此主題的更多信息。
異常值/杠桿點數
異常值和杠桿點是遠離數據常規趨勢的點。這些要點會對您的解決方案產生很大影響。在實踐中,這些點甚至可能是拼寫錯誤。如果要匯總來自多個源的數據,則可能是某些數據值未正確傳輸或未正確聚合。
其他時候異常值是準確和真實的數據點,不一定是測量或數據輸入錯誤。在這些情況下,“固定”更主觀。通常,使用這些要點的策略取決于分析的目標。特別地,使用普通最小二乘的線性模型不是非常穩健。也就是說,大的異常值可能會大大改變我們的結果。有一些技術可以解決這個問題 - 主要稱為正規化技術。這些超出了本課程的范圍,但在機器學習的免費課程中會很快討論它們。
共線性(多重共線性)
多重共線性是指變量之間彼此相關的預測變量。多重共線性的一個主要問題是它可能導致系數從我們期望的簡單線性回歸方向翻轉。
識別多重共線性的最常見方法之一是使用雙變量圖或使用方差膨脹因子(或VIF)。這是我們將在下一個概念中深入探討的主題,因此我們不會在此花費太多時間。
10 多重線性回歸模型與方差膨脹因子(或VIF)
多重線性回歸模型的主要假設之一 , 是我們的預測變量彼此不相關
我們希望預測變量與反應變量相關 , 而不是彼此之間具有相關性
在這個例子中 我們要觀察房屋的特點, 你可以假設房屋大小 , 臥室數量 , 衛生間數量都存在相關性
我們可能認為房屋越大 擁有越多的臥室和衛生間 , 我們使用 seaborn 快速觀察一下 , 每對變量之間的關系 , 這里你可以看到我讀取 seaborn
為 sb
,
Seaborn 包含的 pairplot
, 可以讓我們觀察每個變量之間的關系 , 這里我想要觀察這三個 x 變量之間的關系 , 即面積 臥室和衛生間
可以看到這些關系 , 彼此之間具有極強的正相關 , 所以你可以發現衛生間和 , 面積具有很強的正相關 , 面積和臥室之間 , 臥室和衛生間之間也是如此
現在我們使用者三個系數 , 試著擬合多重線性回歸模型 , 首先我們通常要創建截距 , 我運行 statsmodels
簡寫為 sm
, 那么我將要這樣擬合 sm.OLS
所以我們要預測的內容 , 是“價格” 使用截距 , 和所有這些 x 變量 , 然后我們把它存儲在線性模型中
有意思的是 , 雖然我們希望面積 , 臥室和衛生間與反應變量存在相同的關系 , 即隨著它們增加 反應變量也應該增加 , 但臥室與反應變量存在負系數
如上圖雖然價格和臥室與其他變量存在正相關 , 但是在多重線性回歸模型中 兩者呈現負相關 , 對這一系數的解釋與我們直覺上認為的是相反的, 在雙變量例子中實際上為真 , 這是模型中多重共線性的一個潛在副作用 , 即這與你認為是正確的系數恰好相反
另一個常見的方式是辨別預測值之間是否具有相關性 , 除了我們看到的散點圖 , 還有方差膨脹因子 簡寫為 VIF
這里的dmatrices
矩陣是我們從 patsy
中讀取的 , 可以讓我們創建 x 和 y 的方程式 , 方程式可以得到矩陣
從 statsmodels
中 我們計算得出每個 x 變量的方差膨脹因子 , 然后我們傳遞到方差膨脹因子函數中 , 方差膨脹因子可以寫入 statsmodels , 利用截距得到價格 , 以及面積 臥室和衛生間
我們可以看到每個變量的方差膨脹因子 , 都可以從我創建的方差膨脹因子DataFrame中獲取 , 我們想要刪除兩個變量中的至少一個 , 因為兩者方差膨脹因子都大于 10 , 在接下來將繼續討論這一話題
11 多重共線性和VIF
在前面的例子中你見到 , X 變量之間具有相關性 , 這會導致回歸系數與預期關系的反轉 , 和不準確的假設檢驗結果 , 我們希望 X 變量與 Y 相關
但是 X 變量之間具有相關性時 這些結果具有誤導性
發現多重線性的兩種方式
分別是散點圖矩陣和方差膨脹因子 , 或簡寫為 VIF
快速檢查是否具有較大的方差膨脹因子 , 一般規則是如果方差膨脹因子大于 10** , 那么你的模型就會出現多重線性 ,
特定變量的方差膨脹因子可以通過下面的公式得到
其中 R 的平方通過 , 所有其他 X 變量預測出的 X 變量 R 的平方計算得到 , 所以如果 X 與其他變量高度相關 那么這部分增加 , 就會減少整個分母 增加其方差膨脹因子
你可以認為模型中很少發現只有一個較大的方差膨脹因子 , 因為兩個或以上 X 變量之間彼此相關 , 你會認為這些變量具有較高的方差膨脹因子 , 解決回歸中彼此相關的變量, 最常見的方法是 刪除最小興趣的變量
如果刪除浴室列
R平方值并沒有發生變化
重新計算VIF值后
結論
去除浴室的數量并沒有損害模型的預測能力,并且仍然提高了系數的可解釋性。
總結
我們希望x變量與響應相關,但不要彼此相關。 當我們的x變量彼此相關時,這被稱為多重共線性。多重共線性有兩個潛在的負面影響。
當存在多重共線性時,x變量和響應之間的預期關系可能不成立。也就是說,可能期望解釋變量和響應之間存在正相關關系(基于雙變量關系),但在多元線性回歸情況下,它會將關系視為負數。
我們的假設檢驗結果可能不可靠。事實證明,具有相關的解釋變量意味著我們的系數估計值不太穩定。也就是說,與回歸系數相關的標準偏差(通常稱為標準誤差)非常大。因此,特定變量可能對預測響應很有用,但由于它與其他x變量的關系,將不再看到此關聯。
我們還研究了識別多重共線性的兩種不同方法:
我們可以看一下每個解釋變量與每個其他解釋變量的相關性(用圖或相關系數)。
我們可以查看每個變量的VIF
當VIF大于10
時,這表明多重共線性肯定是模型中的一個問題。一些專家甚至認為大于5
的VIF可能會有問題。在大多數情況下,不僅一個VIF很高,而且很多VIF都很高,因為它們是相關變量如何相互作用的度量。
在多元線性回歸模型中使用相關解釋變量的最常用方法是簡單地刪除與其他變量最相關的變量之一。選擇一個您不感興趣或對您不重要的解釋變量是一種常見的選擇。
12高階項
要想擬合類似于非線性模型的模型 , 可以通過在模型中增加高階項 如交叉項 , 二次式 三次多項式和高階值
雖然這些高階項可以讓你較好地預測反應變量 , 我一般避免使用這類條目 , 除非在數據中明確觀察到存在關系 , 增加這些項會使解釋數據的結果更加復雜 , 對低階項的解釋 , 如建筑面積的斜率 , 或者分類變量水平的斜率 , 如果這些項為高階項時 解釋起來不那么簡單
如何識別高階項?
In a model with no higher order terms, you might have an equation like:
Then we might decide the linear model can be improved with higher order terms. The equation might change to:
In general, these terms can help you fit more complex relationships in your data. However, they also takeaway from the ease of interpreting coefficients, as we have seen so far. You might be wondering: "How do identify if I need one of these higher order terms?"
當創建具有二次,三次或甚至更高階變量的模型時,我們基本上在查看解釋變量和響應變量之間的關系中有多少條曲線。
如果有一條曲線,如下圖所示,那么您將需要添加二次曲線。顯然,我們可以看到一條線不適合這種關系。
然后,如果我們想要添加一個三次關系,那是因為我們在解釋變量和響應變量之間的關系中看到兩條曲線。下圖顯示了這方面的一個例子。
13
我們試著把一些高階項添加到你的模型中 , 現在你可以發現他們如何起作用 以及確定何時使用
有時我們會擬合模型 , 即使反應變量與解釋變量并沒有線性相關性 , 我們可以使用所謂的高階項完成 , 高階項包括二項式 , 三項式 交叉項和其他許多關系 , 為了把這些項添加到線性模型中 , 我們只需要把列乘以另一列
這里我們創建了臥室數量的二次關系 , 通過臥室所有值的平方 , 或列乘以列 , 我們存儲為臥室的平方 , 我們把這些高階項添加到模型中 , 也需要加入低階項, 我們來使用臥室和臥室的平方來預測價格
這里我們可以觀察到結果 , 注意 添加二項式表明我們不會采取之前相同的方式解釋臥室相關的系數 , 即系數并不是隨著臥室增多所預測的價格也發生變化 , 因為改變bedrooms
和這一項, 也表明二項式bedrooms_squared
中發生變化 , 所以價格改變取決于臥室的初始和最終數量 , 臥室數量從 3 個變為 4 個時價格的變化 , 與從 5 個變為 6 個時價格的變化不一樣 , 所以無法簡單解釋這些項
我們也可以向數據集中添加這樣的三項式 , 這里我命名為bedrooms_cubed
臥室的立方 , 然后像這樣添加到模型中, 然后我們得到立方后的結果
然后我們來觀察下結果 , 這里你會發現 R 平方實際上只增加了一點 , 不過加入臥室的立方值并不是很大的數字 , 認為臥室的立方值與價格具有相關性 , 并不恰當
另外下面每個系數都不能很好地得到解釋 , 現在我們來看一下交叉項 , 交叉項是通過兩個變量相乘得到的
我們來創建面積和臥室數量之間的交互項 , 然后把它添加到這個數據集的DataFrame中 , 現在為了把交叉項添加到模型中 , 我們應該再次添加低階項 , 這意味著把面積和臥室數量都添加到線性模型中 , 既然臥室數量已經包含在模型中 , 我這里添加面積和交叉項
14
每次把高階項或交叉項添加到模型中 , 你應該確保添加各自的低階項
在我們觀察反應變量和解釋變量之間關系的曲線時 , 你又如何認識到應該添加交叉項呢? 為什么我們要向模型中添加這樣的內容呢?
添加交叉項 , 就是這些斜率非常接近一致的問題 , 如果斜率接近一致 , 我們不需要添加交叉項 , 不過如果斜率不相同 , 表明我們需要向模型中添加交叉項
交互項
在數學上,通過將兩個變量相互相乘并將該項添加到我們的線性回歸模型來創建交互。
The example from the previous video used area (x1) and the neighborhood (x2) of a home (either A or B) to predict the home price (y).
此示例不涉及交互項,如果變量的關系類似于下圖中的關系,則此模型是合適的。
b1是我們估計面積和價格之間關系的方式,在這個模型中我們認為無論neighborhood
鄰域如何都是相同的。
然后b2是價格的差異取決于你所在的neighborhood社區,這是兩條線之間的垂直距離:
Notice, here the way that area is related to price is the same regardless of neighborhood.
AND
The difference in price for the different neighborhoods is the same regardless of the area.
When these statements are true, we do not need an interaction term in our model. However, we need an interaction when the way that area is related to price is different depending on the neighborhood.
在數學上,當區域與價格相關的方式取決于neighborhood鄰域時,這表明我們應該添加交互。通過添加交互,我們允許每個neighborhood鄰域的線的斜率不同,如下圖所示。在這里,我們添加了交互,你可以看到這允許這兩個斜率的差異。
These lines might even cross or grow apart quickly. Either of these would suggest an interaction is present between area and neighborhood in the way they related to the price.
概括
理解多重線性回歸的應用 , 潛在問題和評估模型擬合的方法 , 是更復雜機器學習方法的核心
學習了如何在Python中構建多元線性回歸模型,這實際上與您在簡單線性回歸的上一課中所做的非常類似。
學習了如何編碼虛擬變量,并解釋附加到每個變量的系數。
了解了更高階項,以及它如何影響您解釋系數的能力。
學習了如何識別在多元線性回歸模型中需要交互的含義,以及如何識別其他更高階項。但同樣,這些確實使得解釋系數不再是優先考慮的事情,而是將模型轉向一個更傾向于以解釋為代價進行預測的模型。
了解了模型假設,我們仔細研究了多重共線性。您了解了方差膨脹因子,以及多重共線性如何影響模型系數和標準誤差。