@回歸
回歸(Regression)這一概念最早由英國生物統計學家高爾頓和他的學生皮爾遜在研究父母親和子女的身高遺傳特性時提出“子女的身高趨向于高于父母的身高的平均值,但一般不會超過父母的身高。”-- 《遺傳的身高向平均數方向的回歸》
如今,我們做回歸分析時所讨論的“回歸”和這種趨中效應已經沒有任何瓜葛了,它隻是指源于高爾頓工作的那樣——用一個或多個自變量來預測因變量的數學方法。
在一個回歸模型中,我們需要關注或預測的變量叫做因變量,我們選取的用來解釋因變量變化的變量叫做自變量。
1、回歸算法
1) 線性回歸
linear_model.LinearRegression
一進制線性回歸
當自變量隻有1個時,假設𝑦=𝑤0+𝑤1* 𝑥+𝜀,其中𝑤0為截距,𝑤1為回歸系數,𝜀 為随機誤差項(noise),假設 𝜀~𝑁(0, 𝜎^2 ),則随機變量𝑦~𝑁(𝑤0+𝑤1 𝑥, 𝜎^2)
給定樣本集合D={(𝑥1, 𝑦1 ), …, (𝑥𝑛, 𝑦𝑛 )},目标是找到(𝑤0,𝑤1),使得所有樣本點盡可能與直線𝑦=𝑤0+𝑤1*𝑥近。
目标函數:
求導,令導數等于零,将觀測值Xi,Yi分别帶入,最小二乘求解最優的𝑤0,𝑤1。
多元線性回歸
當自變量隻有n個時(n>1),n維空間的直線可以表示為𝑦=𝑤0+𝑤1* 𝑥1+w2x2+…+wnxn+𝜀
給定樣本集合D={(𝑥11,…,xn1, 𝑦1 ), …, (𝑥1k,…,xnk, 𝑦k )},目标是找到(𝑤0,𝑤1,…,wn),使得所有樣本點盡可能與直線𝑦=𝑤0+𝑤1* 𝑥1+w2x2+…+wnxn近。
目标函數:
其中x為n維向量(x1,…,xn)
2) 嶺回歸
linear_model.Ridge
嶺回歸在最小二乘法的目标函數上加上一個對𝒘的懲罰函數,避免過拟合。
其目标函數為
求導可得:
3) LASSO回歸
linear_model.Lasso
LASSO 是一種系數壓縮估計方法,它的基本思想是通過追求稀疏性自動選擇重要的變量
LASSO 的目标函數:
LASSO沒有解析表達式,常用的求解算法包括坐标下降法、LARS算法和ISTA算法等
4)彈性網絡回歸
linear_model.ElasticNet
彈性網絡回歸綜合嶺回歸與LASSO回歸。
5) 貝葉斯嶺回歸
linear_model.BayesianRidge
貝葉斯回歸連結
6)RANSAC
linear_model.RANSACRegressor
當資料集中有較多的離群值,使用RANSAC算法針對離群值做處理,根據資料子集(所謂的内點)拟合回歸模型。
RANSAC算法流程:
1)随機選擇一定數量的樣本作為内點拟合模型
2)用模型測試其他所有的點,把落在給定範圍内的點放入内點集
3)調整模型中使用的所有内點
4)用内點重新拟合模型
5)評估模型預測結果與内點集相比較的誤差
6)如果性能達到自定義的門檻值或指定的疊代次數,則終止,否則傳回步驟1
7) K近鄰回歸
neighbors.KNeighborsRegressor
K近鄰回歸連結
8)支援向量回歸
svm.SVR
推薦連結:
支援向量回歸
9)決策樹回歸
tree.DecisionTreeRegressor
推薦連結:
決策樹回歸
2、方法與屬性
方法
fit() # 拟合
predict() #預測
score() #評價 R方 score(X_test,y_test)
屬性
coef_ #回歸系數
intercept_ #截距
3、評價
3.1 coefficient of determination
決定系數也稱為拟合優度,決定系數越大,自變量對因變量的解釋程度越高,拟合優度就越好,最高值為1。
通常使用𝑅^2進行模型評價。
𝑅^2
=解釋變化/總變化
=1–未解釋的變化/總變化
其中:總平方和(實際值與均值的差)
殘差平方和(實際值與預測值的差)
R方統計有一個主要缺陷。當回歸模型中自變量增加時,其值要麼保持不變,要麼随着新的自變量的增加而增加。
當自變量足夠多時總會得到模型拟合良好,而實際卻可能并非如此。
是以引入調整R方。
其中:
n表示資料集中的資料點數量
k表示自變量的個數
R代表模型确定的R方值
3.2 均方誤差(mean squared error):
3.3 平均絕對誤差(mean absolute error):
3.4 其它評價方法
3.5 sklearn實作
平均絕對誤差:
metrics.mean_absolute_error
均方誤差
metrics.mean_squared_error
均方對數誤差
metrics.mean_squared_log_error
中值絕對誤差
metrics.median_absolute_error
決定系數R^2
metrics.r2_score
參數:
(真實值,預測值)
4、多項式回歸
線上性回歸中,我們是尋找一條直線來盡可能的拟合資料。但是我們在大部分情況下并不滿足簡單的線性回歸的。當自變量與因變量不是線性(直線)關系時,可采用多項式回歸(Polynomial regression)。
(升維)
x = np.random.uniform(-3, 3, size = 100)
y=x*x*3+x*4+5+np.random.normal(0, 1, size = 100)
from sklearn.preprocessing import PolynomialFeatures
#(degree=2),增加二次項特征
#eg1:
# x , y(标簽/因變量)
#增加新的特征(degree=2) x*x
# x , x*x, y
#eg2:
#x1 ,x2, x3, y(标簽/因變量)
#增加 x1*x1,x2*x2,x3*x3,x1*x2,x1*x3,x2*x3二次項(degree=2)
#x1,x2,x3,x1*x1,x2*x2,x3*x3,x1*x2,x1*x3,x2*x3
poly = PolynomialFeatures(degree=2) # 添加特征(升維)
poly.fit(x)
X2 = poly.transform(x)
#X2為增加2次項後的資料
# 訓練
lin_reg = LinearRegression()
lin_reg.fit(X2, y)
y_pred = lin_reg.predict(X2)
plt.scatter(x, y)
plt.scatter(x, y_pred, color = 'r')
plt.show()