文章目錄
- 前言
- 1. 線性回歸 ( L i n e a r (Linear (Linear M o d e l ) Model) Model)
- 1.1 一元線性回歸
- 1.2 多元線性回歸 ( M u l t i v a r i a t e (Multivariate (Multivariate L i n e a r Linear Linear M o d e l ) Model) Model)
- 2. 模型實作
- 3. 模型評估
- 結束語
前言
??回歸 ( R e g r e s s i o n ) (Regression) (Regression),用于預測輸入變數(自變數)與輸出變數(因變數)之間的關系,即當輸入的值發生變化時,輸出的值也隨之變化,它屬于監督學習,即需要給定一個訓練資料集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } D=\{(x_1,y_1),(x_2,y_2),\dots,(x_m,y_m)\} D={(x1?,y1?),(x2?,y2?),…,(xm?,ym?)},就拿股票預測來說吧,將股票以往的歷史資料作為訓練集來學習一個模型,根據當前的股票資訊來預測下一個時間的股票價格,學習得到的模型我們稱之為回歸函式 f ( x ) f(x) f(x),
1. 線性回歸 ( L i n e a r (Linear (Linear M o d e l ) Model) Model)
??線性回歸的基本形式:給定有
d
d
d個屬性描述的示例
x
=
[
x
1
x
2
?
x
d
]
\bm {x}=\begin{bmatrix} x_1 \\ x_2 \\ \vdots\\ x_d\\ \end{bmatrix}
x=??????x1?x2??xd????????,其中
x
i
x_i
xi?是
x
\bm {x}
x在第
i
i
i個屬性上的取值,線性模型試圖學得一個由屬性
x
i
x_i
xi?線性組合的預測函式,即
f
(
x
)
=
w
1
x
1
+
w
2
x
2
+
?
+
w
d
x
d
+
b
f(\bm {x})=w_1x_1+w_2x_2+\dots+w_dx_d+b
f(x)=w1?x1?+w2?x2?+?+wd?xd?+b
一般用向量形式表示為
f
(
x
)
=
w
T
x
+
b
f(\bm {x})=\bm {w^Tx}+b
f(x)=wTx+b
??其中
w
=
[
w
1
w
2
?
w
d
]
\bm {w}=\begin{bmatrix} w_1 \\ w_2 \\ \vdots\\ w_d\\ \end{bmatrix}
w=??????w1?w2??wd????????,引數
w
\bm {w}
w和
b
b
b是通過學習得到的,這兩個引數確定即代表模型就確定了,
1.1 一元線性回歸
??這應該是最基本的線性回歸了,即輸入的變數只有一個,對于給定的資料集
D
=
{
(
x
i
,
y
i
)
}
D=\{(x_i,y_i)\}
D={(xi?,yi?)},其中
1
≤
i
≤
m
1 \leq i \leq m
1≤i≤m,一元線性回歸試圖學得
f
(
x
i
)
=
w
x
i
+
b
,
使
得
f
(
x
i
)
無
限
接
近
于
y
i
f(x_i)=wx_i+b,使得f(x_i)無限接近于y_i
f(xi?)=wxi?+b,使得f(xi?)無限接近于yi?
??確定引數
w
w
w和
b
b
b,關鍵在于如何衡量
f
(
x
)
f(x)
f(x)與
y
y
y之間的差別,均方誤差
(
M
e
a
n
(Mean
(Mean
S
q
u
a
r
e
Square
Square
E
r
r
o
r
,
M
S
E
)
Error,MSE)
Error,MSE)是回歸任務中最常用的性能度量,試圖讓均方誤差最小化來求得最優的
w
w
w和
b
b
b,即
(
w
?
,
b
?
)
=
a
r
g
m
i
n
∑
i
=
1
m
(
f
(
x
i
)
?
y
i
)
2
=
a
r
g
m
i
n
∑
i
=
1
m
(
y
i
?
w
x
i
?
b
)
2
(w^*,b^*)=argmin\sum_{i=1}^m(f(x_i)-y_i)^2 \\ =argmin\sum_{i=1}^m(y_i-wx_i-b)^2
(w?,b?)=argmini=1∑m?(f(xi?)?yi?)2=argmini=1∑m?(yi??wxi??b)2
??知識小提示:均方誤差也稱為
平均損失( S q u a r e (Square (Square L o s s ) Loss) Loss)
??如何求解呢?對于上述公式來數,我們可以再次簡化成 y = x 2 y=x^2 y=x2,求解使 y y y取最小值時的 x x x,很好辦,上來就是求導,令倒數等于0,沒錯,就是這樣,我們這里求解的是兩個未知數,所以求的是偏導數,求解如下:

??知識小提示:凸函式,即二階導數在區間上非負,若恒大于0,稱為嚴格凸函式,這和高數里面的定義正好相反,西瓜書上具體定義如下:
????假設函式 f ( x ) f(x) f(x)的定義域為 [ a , b ] [a,b] [a,b],在其區間上任取兩點,若 f ( x 1 ) + f ( x 2 ) 2 \frac {f(x_1)+f(x_2)} {2} 2f(x1?)+f(x2?)? ≥ \geq ≥ f ( x 1 + x 2 2 ) {f(\frac {x_1+x_2} {2})} f(2x1?+x2??),則稱 f ( x ) f(x) f(x)為凸函式,
1.2 多元線性回歸 ( M u l t i v a r i a t e (Multivariate (Multivariate L i n e a r Linear Linear M o d e l ) Model) Model)
??即輸入的變數有多個,正如最上面的基本形式,多元線性回歸試圖學得
f
(
x
i
)
=
w
T
x
i
+
b
,
使
得
f
(
x
i
)
無
限
接
近
于
y
i
f(\bm {x_i})=\bm {w^Tx_i}+b,使得f(\bm {x_i})無限接近于y_i
f(xi?)=wTxi?+b,使得f(xi?)無限接近于yi?
??同樣,可以利用最小二乘法進行上述求解,為了方便,這里把 w \bm {w} w和 b b b吸收入向量形式 w ^ = [ w b ] \bm {\hat {w}}=\begin{bmatrix} \bm {w} \\ b \\ \end{bmatrix} w^=[wb?],則 w ^ ? = a r g m i n ∑ i = 1 m ( f ( x i ) ? y i ) 2 = a r g m i n ∑ i = 1 m ∣ ∣ y ? X w ^ ∣ ∣ 2 2 = a r g m i n ∑ i = 1 m ( y ? X w ^ ) T ( y ? X w ^ ) \bm {\hat {w}^*}=argmin\sum_{i=1}^m(f(\bm {x_i})-\bm {y_i})^2 \\ =argmin\sum_{i=1}^m||\bm {y}-\bm {X\hat {w}}||_2^2 \\ =argmin\sum_{i=1}^m(\bm {y}-\bm {X\hat {w}})^T(\bm {y}-\bm {X\hat {w}}) w^?=argmini=1∑m?(f(xi?)?yi?)2=argmini=1∑m?∣∣y?Xw^∣∣22?=argmini=1∑m?(y?Xw^)T(y?Xw^)??具體求解如下:

??知識小提示:基于均方誤差最小化進行求解的方法稱為
最小二乘法,在統計學中,使用最小二乘法來求解線性回歸的方法是一種無偏估計的方法,這種無偏估計要求因變數(即標簽 y y y)必須服從正態分布,所以當線性回歸模型效果不好時,考慮正態化處理來改變一下因變數的分布,
2. 模型實作
??這里使用sklearn.linear_model里的LinearRegression進行線性回歸建模,資料集為sklearn自帶的糖尿病資料集diabetes,資料集詳情大致如下:

| age | sex | bmi | bp | s1 | s2 | s3 | s4 | s5 | s6 |
|---|---|---|---|---|---|---|---|---|---|
| 年齡 | 性別 | 體重指數 | 平均血壓 | T細胞數 ( t c ) (tc) (tc) | 低密度脂蛋白 ( l d l ) (ldl) (ldl) | 高密度脂蛋白 ( h d l ) (hdl) (hdl) | 促甲狀腺激素 ( t c h ) (tch) (tch) | l a m o t r i g i n e ( l t g ) lamotrigine(ltg) lamotrigine(ltg) | 血糖含量 ( g l u ) (glu) (glu) |
??詳情可列印
diabetes.DESCR
from sklearn import linear_model
from sklearn import model_selection
from sklearn import datasets
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
import pandas as pd
import matplotlib.pyplot as plt
# 加載糖尿病資料集
diabetes = datasets.load_diabetes()
# print(diabetes.DESCR)
# data = pd.DataFrame(diabetes.data)
# data.columns = diabetes.feature_names
# data['target'] = diabetes.target
data = diabetes.data
target = diabetes.target
# 劃分訓練集和測驗集
x_train, x_test, y_train, y_test = model_selection.train_test_split(data, target, test_size=0.3, random_state=512)
# 創建線性回歸模型
model= linear_model.LinearRegression()
# 訓練這個模型
model.fit(x_train, y_train)
# score = model.score(x_test, y_test)
# 使用模型做預測
y_pred = model.predict(x_test)
# 查看各個特征的系數
w = model.coef_
b = model.intercept_
print('w: {0}\nb: {1}'.format(w, b))
??各個特征對應的系數如下:

??由上可以看出,s5與糖尿病有很大的關聯,其次是s2,而s1和性別與糖尿病的關聯很小(額(⊙o⊙)…這樣分析總感覺有點…),
??有關
LinearRegression的詳細引數說明可參考官方手冊
3. 模型評估
??在線性回歸的模型評估中常用兩種方法,一種就是上面所述的均方誤差
M
S
E
MSE
MSE,另一種就是
R
R
R方值
R
2
_
s
c
o
r
e
R2\_score
R2_score,
M
S
E
=
1
m
∑
i
=
1
m
(
y
i
?
y
^
i
)
2
MSE=\frac {1} {m} \sum_{i=1}^m(y_i-\hat {y}_i)^2
MSE=m1?i=1∑m?(yi??y^?i?)2??可見,
M
S
E
MSE
MSE衡量的是模型對樣本數值的擬合能力,
M
S
E
MSE
MSE越小,表示模型對資料擬合的越好,但它有可能對部分數值擬合的很好,而對資料的分布可能擬合的不好,尤其是在資料上下界限附近,
R
2
_
s
c
o
r
e
=
1
?
∑
i
=
1
m
(
y
i
?
y
^
i
)
2
∑
i
=
1
m
(
y
i
?
y
 ̄
)
2
R2\_score=1-\frac {\sum_{i=1}^m(y_i-\hat {y}_i)^2} {\sum_{i=1}^m(y_i-\overline {y})^2}
R2_score=1?∑i=1m?(yi??y?)2∑i=1m?(yi??y^?i?)2???分式上的分子表示真實值和預測值之間的差值,也就是模型沒有捕捉到的,分母是真實標簽所帶的資訊量,可見,
R
2
_
s
c
o
r
e
R2\_score
R2_score衡量的是模型對捕獲到的資訊量占真實標簽中所帶的資訊量的比例,
R
2
_
s
c
o
r
e
R2\_score
R2_score越接近于1,表示模型對資料擬合的越好,
??方差可以用來衡量資料上的資訊量,如果方差越大,代表資料上的資訊量越多,這些資訊量不僅包括數值的大小,還包括資料中隱藏的規律,比如,資料的分布規律,
# 繪制輸出
plt.plot(range(len(y_test)), sorted(y_test), color='black', label='data')
plt.plot(range(len(y_pred)), sorted(y_pred), color='red', label='pred')
plt.legend()
plt.show()

??結果如下:

結束語
??持續充電中,博客內容也在不斷更新補充中,如有錯誤,歡迎來私戳小編哦!共同進步,感謝Thanks?(・ω・)ノ

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/253039.html
標籤:AI
上一篇:程式員學習資源指南(建議收藏)
下一篇:成功解決TypeError: distplot() got an unexpected keyword argument ‘y‘
