目錄:
一、介紹
線性迴歸可以定義爲統計模型,用於分析因變量與給定的一組自變量之間的線性關係。變量之間的線性關係意味着,當一個或多個自變量的值更改(增加或減少)時,因變量的值也將相應更改(增加或減少)。
數學上的關係可以藉助以下方程式來表示:
Y = aX + b
在這裏,Y是我們試圖預測的因變量,X是我們用來進行預測的自變量,a是迴歸線的斜率,b是一個常數,稱爲截距。
1.線性迴歸的類型
- 簡單線性迴歸
- 多元線性迴歸
2.假設條件
以下是關於由線性迴歸模型建立的數據集的一些假設:
多重共線性:線性迴歸模型假設數據中很少或沒有多重共線性。基本上,當自變量或要素具有相關性時,就會發生多重共線性。
自相關:數據中幾乎沒有自相關。基本上,當殘差之間存在依賴性時,就會發生自相關。
變量之間的關係:線性迴歸模型假定響應變量和特徵變量之間的關係必須是線性的。
二、用Python構建一個迴歸器步驟
Scikit-learn,一個用於機器學習的Python庫,也可以用於在Python中建立一個迴歸器。
在以下示例中,我們將構建基本的迴歸模型,該模型將使一條線適合數據,即線性迴歸。在Python中構建迴歸器的必要步驟如下:
步驟1:導入必要的python包。
步驟2:導入數據集。
步驟3:將數據整理到訓練和測試集中。
步驟4:模型構建和預測。
第5步:繪圖和可視化。
步驟6:性能計算。性能指標包括:均方誤差MSE、均方根誤差RMSE、平均絕對誤差MAE與R Squared等。
三、用Python實現簡單線性迴歸
1.模擬數據及繪圖
# 導包
import numpy as np
import matplotlib.pyplot as plt
# 模擬數據
x = np.array([1., 2., 3., 4., 5.])
y = np.array([1., 3., 2., 3., 5.])
# 繪製散點圖
plt.scatter(x, y)
plt.axis([0, 6, 0, 6]) # 設置x,y軸的氛圍
plt.show()
2.簡單線性迴歸過程
①計算迴歸線斜率和截距
斜率和截距公式如下(注:本案例斜率爲a,截距爲b):
# 求x,y的平均值
x_mean = np.mean(x)
y_mean = np.mean(y)
# 求斜率a和截距b
num = 0.0
d = 0.0
for x_i, y_i in zip(x, y):
num += (x_i - x_mean) * (y_i - y_mean)
d += (x_i - x_mean) ** 2
a = num / d
b = y_mean - a * x_mean
print(a)
print(b)
0.8
0.39999999999999947
②繪製帶回歸線的散點圖
# 迴歸線
y_hat = a * x + b
# 繪製帶回歸線的散點圖
plt.scatter(x, y)
plt.plot(x, y_hat, color = 'r')
plt.axis([0, 6, 0, 6])
plt.show()
③預測數據
x_predict = 6
y_predict = a * x_predict + b
print(y_predict)
5.2
3.使用scikit-learn中的線性迴歸
# 導包
from sklearn.linear_model import LinearRegression
import numpy as np
# 創建線性迴歸對象
reg = LinearRegression()
# 模擬數據
x = np.array([1., 2., 3., 4., 5.])
x_train = x.reshape(-1,1)
y_train = np.array([1., 3., 2., 3., 5.])
# 訓練
reg.fit(X_train,y_train)
# 計算出的斜率與截距
print(reg.coef_)
print(reg.intercept_)
array([0.8])
0.39999999999999947
# 預測數據
y_predict = reg.predict(x_train)
# 繪圖
plt.scatter(x_train, y_train)
plt.plot(x, y_predict, color = 'r')
plt.axis([0, 6, 0, 6])
plt.show()
很顯然,結果與之前預測的基本一致。
四、用Python實現多元線性迴歸
簡單線性迴歸的擴展使用兩個或多個特徵預測響應。數學上,我們可以解釋如下:
考慮具有n個觀測值,p個特徵(即自變量)和y作爲一個響應(即因變量)的數據集,p個特徵的迴歸線可以如下計算:
1.加載Boston住房數據集數據
# 導包
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
# 加載boston數據
boston = datasets.load_boston()
# 定義特徵矩陣X和響應向量y
X = boston.data
y = boston.target
# 過濾掉y=50的數據,因爲y溢出的數據都爲50,考慮後續數據預測的準確性,刪除
X = X[y < 50.0]
y = y[y < 50.0]
X.shape # 顯示爲(490, 13)
2.數據集分爲訓練集和測試集
from model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, seed = 666) # seed爲隨機種子
3.計算出係數與截距
from sklearn.linear_model import LinearRegression
# 創建線性迴歸對象並訓練模型
reg = LinearRegression()
reg.fit(X_train, y_train)
# 計算出的係數與截距
print(reg.coef_)
print(reg.intercept_)
array([-1.20354261e-01, 3.64423279e-02, -3.61493155e-02, 5.12978140e-02,
-1.15775825e+01, 3.42740062e+00, -2.32311760e-02, -1.19487594e+00,
2.60101728e-01, -1.40219119e-02, -8.35430488e-01, 7.80472852e-03,
-3.80923751e-01])
34.11739972320428
4.繪製散點圖
plt.scatter(reg.predict(X_train), reg.predict(X_train) - y_train, color = "green", s = 10, label = 'Train data')
plt.scatter(reg.predict(X_test), reg.predict(X_test) - y_test, color = "blue", s = 10, label = 'Test data')
plt.hlines(y = 0, xmin = 0, xmax = 50, linewidth = 2)
plt.legend(loc = 'upper right')
plt.title("Residual errors") # 殘差
plt.show()
五、應用領域
ML迴歸算法的應用如下:
1.預測或預測分析
迴歸的重要用途之一是預測或預測分析。例如,我們可以預測GDP,石油價格或簡單地說隨着時間的推移而變化的定量數據。
2.優化
我們可以藉助迴歸優化業務流程。例如,商店經理可以創建統計模型以瞭解顧客來訪的時間。
3.錯誤糾正
在業務中,做出正確的決定與優化業務流程同等重要。迴歸可以幫助我們做出正確的決定,也可以幫助我們糾正已經實施的決定。
4.經濟學
這是經濟學中最常用的工具。我們可以使用迴歸來預測供應,需求,消耗,庫存投資等。
5.財務
金融公司始終對最小化風險投資組合感興趣,並希望瞭解影響客戶的因素。所有這些都可以藉助迴歸模型進行預測。