您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何在Python中編程線性回歸模型”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何在Python中編程線性回歸模型”吧!
可解釋性是機器學習中最大的挑戰之一。如果一個模型的決策更容易讓人理解,那么它的解釋性就會比另一個模型高。有些模型是如此復雜,并且內部結構如此復雜,以至于幾乎無法理解它們是如何達到最終結果的。這些黑匣子似乎打破了原始數據和最終輸出之間的關聯,因為它們之間發生了多個過程。
但是在機器學習算法領域,某些模型比其他模型更透明。 決策樹 絕對是其中之一,而線性回歸模型又是其中之一。它們的簡單和直接的方法使它們成為解決不同問題的理想工具。讓我們看看如何。
您可以使用線性回歸模型來分析給定地點的薪水如何取決于經驗,學歷,職位,所工作的城市等特征。同樣,您可以分析房地產價格是否取決于面積,臥室數量或距市中心的距離等因素。
當輸出變量(目標)只有一個輸入變量(預測變量)時,這是最簡單的線性回歸形式:
輸入 或 預測變量 是變量,可幫助預測輸出變量的值。它通常被稱為 X。
輸出 或 目標變量 是我們要預測的變量。通常稱為 y。
β0的值( 也稱為截距)顯示估算的回歸線與y 軸交叉的點 ,而β1 的值 確定 估算的回歸線的斜率。的 隨機誤差 描述因變量和自變量(該模型的擾動,部分之間的線性關系的隨機分量 ? 該 X 無法解釋)。真正的回歸模型通常是未知的(因為我們無法捕獲影響因變量的所有影響),因此與觀察到的數據點相對應的隨機誤差項的值仍然未知。但是,可以通過為觀察到的數據集計算模型的參數來估計回歸模型。
回歸背后的想法是 從樣本中估計參數 β0 和 β1。如果我們能夠確定這兩個參數的最佳值,則在給定X的值的情況下,我們將具有 最佳擬合線, 可用于預測 y的值 。換句話說,我們嘗試擬合一條線以觀察輸入變量和輸出變量之間的關系,然后進一步使用它來預測未見輸入的輸出。
我們如何估計 β0 和 β1?我們可以使用一種稱為 普通最小二乘(OLS)的方法。 這樣做的目的是使黑點到紅線的距離盡可能接近零,這是通過最小化實際結果與預測結果之間的平方差來實現的。
實際值和預測值之間的差異稱為 殘差(e) ,取決于模型是高估還是低估了結果,可以是負值或正值。因此,為了計算凈誤差,直接將所有殘差相加會導致項的抵消和凈效應的減小。為了避免這種情況,我們采用這些誤差項的平方和,稱為 殘差平方和(RSS)。
普通最小二乘法(OLS)方法最小化的平方的總和殘留,其目的在于以適合的回歸直線,將最小化來自觀測值的距離(以二次值測量)到預測者(回歸線)。
是 存在兩個或多個預測變量或輸入變量時使用的線性回歸形式。與之前描述的SLR模型類似,它包含其他預測變量:
注意,該方程只是簡單線性回歸方程的一種擴展,其中每個輸入/預測變量都有其對應的斜率系數 (β )。第一個 β 項 (β0) 是截距常數,是 在沒有所有預測變量的情況下(即,當所有 X 項均為0時)的y值 。
隨著功能部件數量的增加,我們模型的復雜性也隨之增加,并且更加難以可視化甚至理解我們的數據。由于與SLR相比,這些模型中的參數更多,因此需要更多注意。與他們一起工作時。添加更多術語會從本質上改善數據的擬合度,但是新術語可能沒有任何實際意義。這很危險,因為它可能會導致模型適合該數據,但實際上并不意味著有用。
廣告數據集包括產品在200個不同市場中的銷售以及三種不同媒體(電視,廣播和報紙)的廣告預算。我們將使用數據集根據電視,廣播和報紙的廣告預算(自變量)來預測銷售量(自變量)。
在數學上,我們將嘗試解決的公式是:
通過最小化誤差函數并擬合最佳直線或超平面(取決于輸入變量的數量),回歸模型可以找到這些常數(β)的值 。讓我們編碼。
在加載數據之前,我們將導入必要的庫:
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn import metrics from sklearn.metrics import r2_score import statsmodels.api as sm
現在我們加載數據集:
df = pd.read_csv(“Advertising.csv”)
讓我們了解數據集并對其進行描述:
df.head()
由于不需要它,我們將刪除第一列(“未命名”):
df = df.drop([‘Unnamed: 0’], axis=1) df.info()
現在,我們的數據集包含4列(包括目標變量“ sales”),200個寄存器,并且沒有缺失值。讓我們可視化自變量和目標變量之間的關系。
sns.pairplot(df)
電視與銷售之間的關系似乎很牢固,雖然廣播與銷售之間似乎存在某種趨勢,但報紙與銷售之間的關系似乎不存在。我們也可以通過相關圖來數值驗證:
mask = np.tril(df.corr()) sns.heatmap(df.corr(), fmt=’.1g’, annot=True, cmap= ‘cool’, mask=mask)
正如我們預期的那樣,最強的正相關關系發生在銷售和電視之間,而銷售和報紙之間的關系則接近于0。
接下來,我們將變量分為兩組:因變量(或目標變量“ y”)和獨立變量(或特征變量“ X”)
X = df.drop([‘sales’], axis=1) y = df[‘sales’]
為了了解模型的性能,將數據集分為訓練集和測試集是一個很好的策略。通過將數據集分為兩個單獨的集合,我們可以使用一個集合進行訓練,而使用另一集合中的看不見的數據來測試模型的性能。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
我們將數據集分為70%訓練和30%測試。random_state參數用于初始化內部隨機數生成器,它將根據您的情況決定將數據拆分為訓練索引和測試索引。我將隨機狀態設置為0,以便您可以使用同一參數在多個代碼運行中比較輸出。
print(X_train.shape,y_train.shape,X_test.shape,y_test.shape)
通過打印分割集的形狀,我們看到我們創建了:
2個數據集,每個140個寄存器(占總寄存器的70%),一個包含3個獨立變量,一個僅包含目標變量的數據集,將用于 訓練 和生成線性回歸模型。
2個數據集,每個數據集60個寄存器(占總寄存器的30%),一個數據集包含3個獨立變量,一個僅包含目標變量,這些數據集將用于 測試 線性回歸模型的性能。
建立模型非常簡單:
mlr = LinearRegression()
使模型適合訓練數據代表了建模過程中的訓練部分。訓練后,可以使用預測方法調用該模型來進行預測:
mlr.fit(X_train, y_train)coeff_df = pd.DataFrame(mlr.coef_, X.columns, columns =[‘Coefficient’]) coeff_df
讓我們看一下訓練后模型的輸出,并看一下β0的值 (截距):
mlr.intercept_
我們還可以打印系數(β)的值 :
coeff_df = pd.DataFrame(mlr.coef_, X.columns, columns =[‘Coefficient’]) coeff_df
這樣,我們現在可以根據電視,廣播和報紙的不同預算值來估算“銷售”的價值:
例如,如果我們確定電視的預算值為50,廣播的預算值為30,報紙的預算值為10,則“銷售”的估算值將為:
example = [50, 30, 10] output = mlr.intercept_ + sum(example*mlr.coef_) output
測試數據集是獨立于訓練數據集的數據集。該測試數據集是您模型的看不見的數據集,有助于您更好地了解其概括能力:
y_pred = mlr.predict(X_test)
模型的質量與預測與測試數據集的實際值的匹配程度有關:
print(‘Mean Absolute Error:’, metrics.mean_absolute_error(y_test, y_pred)) print(‘Mean Squared Error:’, metrics.mean_squared_error(y_test, y_pred)) print(‘Root Mean Squared Error:’, np.sqrt(metrics.mean_squared_error(y_test, y_pred))) print(‘R Squared Score is:’, r2_score(y_test, y_pred))
在根據測試集驗證我們的模型后,我們得到的R2為0.86,這似乎是相當不錯的性能得分。但是,盡管較高的R2表示更適合該模型,但并非總是如此。我們將在下面看到一些解釋和改進回歸模型的方法。
好的,我們創建了模型,現在呢?讓我們看一下訓練數據上的模型統計信息,以獲得一些答案:
X2 = sm.add_constant(X_train) model_stats = sm.OLS(y_train.values.reshape(-1,1), X2).fit() model_stats.summary()
下面讓我們看看這些數字的含義。
運行MLR模型時,您應該回答的基本問題之一是, 至少有一個預測變量對預測輸出有用。如果自變量和目標之間的關系僅僅是偶然的,并且由于任何預測因素而對銷售沒有實際影響,該怎么辦?
我們需要執行假設檢驗來回答這個問題并檢查我們的假設。這一切都始于形成一個 零假設(H0),該假設指出所有系數都等于零,并且預測變量和目標變量之間沒有關系(這意味著沒有自變量的模型既適合數據又適合您的模型):
另一方面,我們需要定義 替代假設(Ha),該假設指出至少一個系數不為零,并且預測變量和目標之間存在關系(這意味著模型比截距更適合數據僅限型號):
如果我們想拒絕零假設并對我們的回歸模型有信心,我們需要找到有力的統計證據。為此,我們執行假設檢驗,為此我們使用 F統計量。
如果F統計量的值等于或非常接近1,則結果支持零假設,我們無法拒絕它。
正如我們在上表中看到的(以黃色標記),F統計量為439.9,因此有力地證明了零假設(所有系數均為零)。接下來,我們還需要 在原假設為真(8.76e-70)(小于1%的極小的數字)的假設下,檢查 F統計量(也用黃色標記)的發生概率。這意味著在有效的Null假設的假設下,偶然發生F統計量439.9的可能性要小于1%。
話雖如此,我們可以否定零假設,并相信至少有一個預測變量可用于預測輸出。
運行包含許多不相關變量的線性回歸模型將導致不必要的復雜模型。哪些預測指標很重要?它們對我們的模型都重要嗎?為了找出答案,我們需要執行一個稱為功能選擇的過程 。 特征選擇的2種主要方法是:
正向選擇: 從與變量相關性最高的預測變量開始,一次添加一個預測變量。然后,將具有更大理論重要性的變量順序合并到模型中,直到達到停止規則為止。
向后消除: 從模型中的所有變量開始,然后刪除統計上意義最小的變量(較大的p值),直到達到停止規則為止。
盡管兩種方法都可以使用,但是除非預測變量的數量大于樣本大小(或事件的數量),否則通常首選使用向后消除方法。
由于線性回歸模型是任何事件的長期序列的近似,因此它們需要對它們表示的數據進行一些假設才能保持適當。大多數統計檢驗都依賴于有關分析中使用的變量的某些假設,如果不滿足這些假設,則結果可能不可信(例如,導致I型或II型錯誤)。
從輸出是輸入變量的線性組合的意義上講,線性回歸模型是線性的,并且僅適用于對線性可分離數據進行建模。線性回歸模型在各種假設下工作,這些假設必須存在才能產生適當的估計,而不僅僅是依賴于準確性得分:
線性:特征與目標之間的關系必須是線性的。檢查線性關系的一種方法是目視檢查散點圖的線性。如果散點圖中顯示的關系不是線性的,那么我們需要運行非線性回歸或轉換數據。
均方差:對于任何x值,殘差的方差必須相同。多元線性回歸假設殘差的誤差量在線性模型的每個點都相似。這種情況稱為同調。散點圖是檢查數據是否為同方差的好方法,并且還存在一些測試以數值驗證該假設(例如,Goldfeld-Quandt,Breusch-Pagan,White)
無多重共線性: 數據不應顯示多重共線性,當自變量(解釋變量)彼此高度相關時,就會發生多重共線性。如果發生這種情況,將很難找出導致因變量/目標變量差異的特定變量。可以使用方差膨脹因子(VIF)方法或通過相關矩陣來檢驗此假設。解決此問題的替代方法可能是將數據居中(扣除平均得分),或進行因子分析并旋轉因子以確保線性回歸分析中因子的獨立性。
無自相關:殘差的值應彼此獨立。殘差中存在相關性會大大降低模型的準確性。如果誤差項相關,則估計的標準誤差往往會低估真實的標準誤差。要測試此假設,可以使用Durbin-Watson統計信息。
殘差的正態性:殘差必須正態分布。可以使用擬合優度檢驗(例如Kolmogorov-Smirnov或Shapiro-Wilk檢驗)來檢查正態性,如果數據不是正態分布的,則非線性轉換(例如對數轉換)可以解決此問題。
假設是至關重要的,因為如果假設無效,那么分析過程將被認為是不可靠,不可預測且不受控制的。不符合這些假設會導致得出無效的結論或數據在科學上沒有依據。
盡管MLR模型擴展了SLR模型的范圍,但它們仍然是線性模型,這意味著模型中包含的術語無法顯示彼此之間的任何非線性關系或表示任何種類的非線性趨勢。在預測要素的觀察范圍之外的點時也應小心,因為變量之間的關系可能會隨著您移出觀察范圍而改變(這是您沒有數據的原因而無法知道的事實)。
觀察到的關系可能是局部線性的,但是在數據的外部范圍上可能存在未觀察到的非線性關系。
線性模型還可以 通過包含非線性變量(例如多項式)和變換指數函數來對曲率建模。線性回歸方程的參數是 線性的 ,這意味著您可以通過指數增加自變量以擬合曲線,但仍保留在“線性世界”中。線性回歸模型可以包含對數項和逆項,以遵循不同類型的曲線,但參數仍保持線性。
盡管自變量是平方的,但是模型的參數仍然是線性的
諸如多項式回歸之類的 回歸 可以對非線性關系進行建模 ,而線性方程式具有一種基本形式,而非線性方程式可以采用許多不同形式。您可能會考慮使用 非線性回歸模型的原因 是,盡管線性回歸可以對曲線進行建模,但它可能無法對數據中存在的特定曲線進行建模。
您還應該知道,OLS并不是擬合線性回歸模型的唯一方法,而其他優化方法(如 Gradient Descent) 更適合于大型數據集。將OLS應用于復雜和非線性算法可能無法擴展,并且Gradient Descent在計算上可能更便宜(更快)以找到解決方案。 梯度下降(Gradient Descent)是一種使函數最小化的算法,并且在給定由一組參數定義的函數的情況下,該算法從一組初始參數值開始,然后逐步向一組參數值最小化該函數。這個 迭代最小化 是使用衍生物來實現,以在功能梯度的負方向的步驟。
使用梯度下降的線性回歸
要考慮的另一項關鍵是, 離群值會對回歸線和相關系數產生巨大影響 。為了識別它們,執行 探索性數據分析(EDA),檢查數據以檢測異常觀察非常重要,因為它們會以極大的方式影響我們的分析和統計建模的結果。如果您識別出任何異常,則可以對異常值進行估算(例如,使用均值/中位數/眾數),設置上限(替換超出某些限制的那些值)或替換為缺失值并進行預測。
最后,線性回歸模型的一些 局限性 是:
省略的變量。必須有一個良好的理論模型來提出解釋因變量的變量。在簡單的二變量回歸的情況下,必須考慮可能解釋因變量的其他因素,因為可能會有其他“未觀察到的”變量解釋輸出。
反向因果關系。許多理論模型都預測雙向因果關系-即因變量可能導致一個或多個解釋變量發生變化。例如,更高的收入可能使人們能夠對自己的教育進行更多的投資,從而增加了他們的收入。這使估計回歸的方式變得復雜,需要特殊的技術。
測量錯誤。可能會錯誤地評估因素。例如,能力很難測量,并且智商測試存在眾所周知的問題。結果,使用智商的回歸可能無法適當地控制才能,導致教育和收入等變量之間的關系不準確或有偏見。
焦點太有限了。回歸系數僅提供有關一個變量中的微小變化(而不是大變化)與另一變量中的變化之間的關系的信息。它會顯示出教育的微小變化可能會如何影響收入,但不會使研究人員對較大變化的影響進行概括。如果每個人都同時接受大學教育,那么剛畢業的大學畢業生就不太可能賺更多的錢,因為大學畢業生的總供應量將大大增加。
感謝各位的閱讀,以上就是“如何在Python中編程線性回歸模型”的內容了,經過本文的學習后,相信大家對如何在Python中編程線性回歸模型這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。