赞
踩
Datewhle23期__集成学习(上) :
https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearning
作者:李祖贤、薛传雨、赵可、杨毅远、陈琰钰
论坛地址:
http://datawhale.club/t/topic/1574
import pandas as pd
import numpy as np
from sklearn import datasets
boston = datasets.load_boston() # 返回类字典的类
X = boston.data
y = boston.target
features = boston.feature_names
boston_data = pd.DataFrame(X,columns=features)
boston_data["Price"] = y
boston_data.head()
out
CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT Price
0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 15.3 396.90 4.98 24.0
1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 17.8 396.90 9.14 21.6
2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 17.8 392.83 4.03 34.7
3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 18.7 394.63 2.94 33.4
4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 18.7 396.90 5.33 36.2
均方误差 MSE (Mean Squared Error)
均方误差 MSE即预测点与实际点之间距离之差平方和的均值,又被称为 L2范数损失:
MSE ( y , y ^ ) = 1 n samples ∑ i = 0 n samples − 1 ( y i − y ^ i ) 2 . \text{MSE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples} - 1} (y_i - \hat{y}_i)^2. MSE(y,y^)=nsamples1∑i=0nsamples−1(yi−y^i)2.
平均绝对误差 MAE (Mean_absolute_error)
平均绝对误差 MAE平均绝对误差即预测点与真实点之间距离之差的绝对值的平均值,又被称为 L1范数损失:
MAE ( y , y ^ ) = 1 n samples ∑ i = 0 n samples − 1 ∣ y i − y ^ i ∣ \text{MAE}(y, \hat{y}) = \frac{1}{n_{\text{samples}}} \sum_{i=0}^{n_{\text{samples}}-1} \left| y_i - \hat{y}_i \right| MAE(y,y^)=nsamples1∑i=0nsamples−1∣yi−y^i∣
决定系数差
R
2
R^2
R2 (R 方)
决定系数差
R
2
R^2
R2表示线性回归模型中由自变量 X 解释的响应变量 y 的变化比例。R 方越大,线性回归模型解释的变异越大。
R
2
(
y
,
y
^
)
=
1
−
∑
i
=
1
n
(
y
i
−
y
^
i
)
2
∑
i
=
1
n
(
y
i
−
y
ˉ
)
2
R^2(y, \hat{y}) = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2}
R2(y,y^)=1−∑i=1n(yi−yˉ)2∑i=1n(yi−y^i)2
可解释方差
可解释方差可解释方差是(1- 样本值与预测值之差的方差/样本方差)
e
x
p
l
a
i
n
e
d
_
v
a
r
i
a
n
c
e
(
y
,
y
^
)
=
1
−
V
a
r
{
y
−
y
^
}
V
a
r
{
y
}
explained\_{}variance(y, \hat{y}) = 1 - \frac{Var\{ y - \hat{y}\}}{Var\{y\}}
explained_variance(y,y^)=1−Var{y}Var{y−y^}
线性回归是在假设特征满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测:
函数形式:
向量表达式形式:
(1) 最小二乘估计
普通最小二乘法拟合线性模型,本质上解决 :
即真实值与线性回归模型最小差距,常用二范数的平方和L(w)来描述这种差距:
范数复习: https://zhuanlan.zhihu.com/p/85305655
2范 :
∥
w
T
x
i
−
y
i
∥
2
=
∑
i
=
1
n
(
w
T
x
i
−
y
i
)
2
\|w^Tx_i-y_i\|_{2}=\sqrt{\sum_{i=1}^{n} (w^Tx_i-y_i)^2}
∥wTxi−yi∥2=∑i=1n(wTxi−yi)2
L
(
w
)
=
∑
i
=
1
N
∣
∣
w
T
x
i
−
y
i
∣
∣
2
2
L(w) = \sum\limits_{i=1}^{N}||w^Tx_i-y_i||_2^2
L(w)=i=1∑N∣∣wTxi−yi∣∣22
=
∑
i
=
1
N
(
w
T
x
i
−
y
i
)
2
=\sum\limits_{i=1}^{N}(w^Tx_i-y_i)^2
=i=1∑N(wTxi−yi)2
=
(
w
T
X
T
−
Y
T
)
(
w
T
X
T
−
Y
T
)
T
= (w^TX^T-Y^T)(w^TX^T-Y^T)^T
=(wTXT−YT)(wTXT−YT)T
=
(
w
T
X
T
−
Y
T
)
(
X
w
−
Y
)
=(w^TX^T-Y^T)(Xw-Y)
=(wTXT−YT)(Xw−Y) #矩阵转置性质别忘:
(
A
+
B
)
T
=
A
T
+
B
T
(A+B)^T = A^T+B^T
(A+B)T=AT+BT
(
A
B
)
T
=
B
T
A
T
(AB)^T = B^TA^T
(AB)T=BTAT
=
w
T
X
T
X
w
−
2
w
T
X
T
Y
+
Y
Y
T
= w^TX^TXw - 2w^TX^TY+YY^T
=wTXTXw−2wTXTY+YYT
对
L
(
w
)
L(w)
L(w) 求偏导,并令其等于0:
∂
L
(
w
)
∂
w
=
2
X
T
X
w
−
2
X
T
Y
=
0
\frac{\partial L(w)}{\partial w} = 2X^TXw-2X^TY = 0
∂w∂L(w)=2XTXw−2XTY=0因此:
w
^
=
(
X
T
X
)
−
1
X
T
Y
\\\hat{w} = (X^TX)^{-1}X^TY
w^=(XTX)−1XTY
(2) 几何解释
在线性代数中,我们知道两个向量a和b相互垂直可以得出
<
a
,
b
>
=
a
.
b
=
a
T
b
=
0
<a,b> = a.b = a^Tb = 0
<a,b>=a.b=aTb=0
而平面X的法向量为Y-Xw,与平面X互相垂直,因此:
X
T
(
Y
−
X
w
)
=
0
X^T(Y-Xw) = 0
XT(Y−Xw)=0 即:
w
=
(
X
T
X
)
−
1
X
T
Y
w = (X^TX)^{-1}X^TY
w=(XTX)−1XTY
1.所有样本目标真实值
t
i
t_i
ti,构成一个N维列向量
t
=
(
t
1
,
t
2
.
.
.
t
N
)
T
t=(t_1,t_2...t_N)^T
t=(t1,t2...tN)T
2.所有样本的特征数据x构成一个N×M的矩阵 X;矩阵 X 的第 j 个列向量记维
φ
j
φ_j
φj,即
X
=
(
φ
0
,
φ
1
,
.
.
.
,
φ
M
−
1
)
X=(φ_0,φ_1,...,φ_M−1)
X=(φ0,φ1,...,φM−1)
3.假定真实最优参数为
θ
∗
=
(
θ
0
,
θ
1
,
.
.
.
θ
M
−
1
)
T
θ^∗=(θ_0,θ_1,...θ_{M−1})^T
θ∗=(θ0,θ1,...θM−1)T,则有
t
=
X
θ
∗
=
(
φ
0
,
φ
1
,
.
.
.
,
φ
M
−
1
)
θ
∗
t=Xθ^∗=(φ_0,φ_1,...,φ_{M−1})θ^∗
t=Xθ∗=(φ0,φ1,...,φM−1)θ∗
最小二乘法在几何上解释,即寻找一个向量y与向量t之间欧式距离最小。现在的目的即是在S中寻找一个向量y,使得y离向量t的距离最近。最由图中可以看出,离t最近的向量y即是向量t向子空间S的正交投影。
(3) 概率视角
假设噪声
ϵ
∽
N
(
0
,
σ
2
)
,
y
=
f
(
w
)
+
ϵ
=
w
T
x
+
ϵ
\epsilon \backsim N(0,\sigma^2),y=f(w)+\epsilon=w^Tx+\epsilon
ϵ∽N(0,σ2),y=f(w)+ϵ=wTx+ϵ,因此:
y
∣
x
i
,
w
N
(
w
T
x
,
σ
2
)
y|x_i,w ~ N(w^Tx,\sigma^2)
y∣xi,w N(wTx,σ2)
我们使用极大似然估计MLE对参数w进行估计:
L
(
w
)
=
l
o
g
P
(
Y
∣
X
;
w
)
L(w) = log\;P(Y|X;w)
L(w)=logP(Y∣X;w)
=
l
o
g
∏
i
=
1
N
P
(
y
i
∣
x
i
;
w
)
= log\;\prod_{i=1}^N P(y_i|x_i;w)
=log∏i=1NP(yi∣xi;w)
=
∑
i
=
1
N
l
o
g
P
(
y
i
∣
x
i
;
w
)
= \sum\limits_{i=1}^{N} log\; P(y_i|x_i;w)
=i=1∑NlogP(yi∣xi;w)
=
∑
i
=
1
N
l
o
g
(
1
2
π
σ
e
x
p
(
−
(
y
i
−
w
T
x
i
)
2
2
σ
2
)
)
= \sum\limits_{i=1}^{N}log(\frac{1}{\sqrt{2\pi \sigma}}exp(-\frac{(y_i-w^Tx_i)^2}{2\sigma^2}))
=i=1∑Nlog(2πσ
1exp(−2σ2(yi−wTxi)2))
=
∑
i
=
1
N
[
l
o
g
(
1
2
π
σ
)
−
1
2
σ
2
(
y
i
−
w
T
x
i
)
2
]
= \sum\limits_{i=1}^{N}[log(\frac{1}{\sqrt{2\pi}\sigma})-\frac{1}{2\sigma^2}(y_i-w^Tx_i)^2]
=i=1∑N[log(2π
σ1)−2σ21(yi−wTxi)2]
a
r
g
m
a
x
w
L
(
w
)
=
a
r
g
m
i
n
w
[
l
(
w
)
=
∑
i
=
1
N
(
y
i
−
w
T
x
i
)
2
]
argmax_w L(w) = argmin_w[l(w) = \sum\limits_{i = 1}^{N}(y_i-w^Tx_i)^2]
argmaxwL(w)=argminw[l(w)=i=1∑N(yi−wTxi)2]
因此:线性回归的最小二乘估计<==>噪声
ϵ
∽
N
(
0
,
σ
2
)
\epsilon\backsim N(0,\sigma^2)
ϵ∽N(0,σ2)的极大似然估计
from sklearn import linear_model # 引入线性回归方法
lin_reg = linear_model.LinearRegression() # 创建线性回归的类
lin_reg.fit(X,y) # 输入特征X和因变量y进行训练
print("模型系数:",lin_reg.coef_) # 输出模型的系数
print("模型得分:",lin_reg.score(X,y)) # 输出模型的决定系数R^2
线性模型虽然简单,但对于非线性数据乏力,推广其能使其表达非线性关系.
sklearn.preprocessing.PolynomialFeatures(degree=2, *, interaction_only=False, include_bias=True, order='C'):
degree
:特征转换的阶数。interaction_onlyboolean
:是否只包含交互项,默认False 。include_bias
:是否包含截距项,默认True。order
:str in {‘C’, ‘F’}, default ‘C’,输出数组的顺序。from sklearn.preprocessing import PolynomialFeatures
X = np.arange(6).reshape(3,2)
X
array([[0, 1],
[2, 3],
[4, 5]])
//2次转化 [a^0*b^0,a^1*b^0,b^1*a^0,a^2,ab,b^2]
poly = PolynomialFeatures(2)
poly.fit_transform(X)
array([[ 1., 0., 1., 0., 0., 1.],
[ 1., 2., 3., 4., 6., 9.],
[ 1., 4., 5., 16., 20., 25.]])
//2次转化,仅保留交叉 [a^0*b^0,a^1*b^0,b^1*a^0,a^2,ab,b^2]
poly = PolynomialFeatures(interaction_only = True)
poly.fit_transform(X)
array([[ 1., 0., 1., 0.],
[ 1., 2., 3., 6.],
[ 1., 4., 5., 20.]])
from pygam import LinearGAM
gam = LinearGAM().fit(boston_data[boston.feature_names], y)
gam.summary()
LinearGAM =============================================== ========================================================== Distribution: NormalDist Effective DoF: 103.2423 Link Function: IdentityLink Log Likelihood: -1589.7653 Number of Samples: 506 AIC: 3388.0152 AICc: 3442.7649 GCV: 13.7683 Scale: 8.8269 Pseudo R-Squared: 0.9168 ========================================================================================================== Feature Function Lambda Rank EDoF P > x Sig. Code ================================= ==================== ============ ============ ============ ============ s(0) [0.6] 20 11.1 2.20e-11 *** s(1) [0.6] 20 12.8 8.15e-02 . s(2) [0.6] 20 13.5 2.59e-03 ** s(3) [0.6] 20 3.8 2.76e-01 s(4) [0.6] 20 11.4 1.11e-16 *** s(5) [0.6] 20 10.1 1.11e-16 *** s(6) [0.6] 20 10.4 8.22e-01 s(7) [0.6] 20 8.5 4.44e-16 *** s(8) [0.6] 20 3.5 5.96e-03 ** s(9) [0.6] 20 3.4 1.33e-09 *** s(10) [0.6] 20 1.8 3.26e-03 ** s(11) [0.6] 20 6.4 6.25e-02 . s(12) [0.6] 20 6.5 1.11e-16 *** intercept 1 0.0 2.23e-13 *** ========================================================================================================== Significance codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
说实话没太明白这模型用途,
回归树(regression tree),顾名思义,就是用树模型做回归问题,每一片叶子都输出一个预测值。预测值一般是该片叶子所含训练集元素输出的均值,即 :
c
m
=
a
v
e
(
y
i
∣
x
i
∈
l
e
a
f
m
)
c_{m} = ave(y_i | \bm x_i \in leaf_m)
cm=ave(yi∣xi∈leafm)
基于树的回归方法主要是:
1.依据分层和分割的方式将特征空间划分为一系列简单的区域;
2.对某个给定的待预测的自变量,用他所属区域中训练集的平均数或者众数对其进行预测。
1. 建立回归树的过程大致可以分为以下两步:
2. 回归树与线性模型的比较:
sklearn使用回归树的实例:
https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html?highlight=tree#sklearn.tree.DecisionTreeRegressor
sklearn.tree.DecisionTreeRegressor(*, criterion='mse', splitter='best',
max_depth=None, min_samples_split=2, min_samples_leaf=1,
min_weight_fraction_leaf=0.0, max_features=None, random_state=None,
max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None,
presort='deprecated', ccp_alpha=0.0)
criterion
:{“ mse”,“ friedman_mse”,“ mae”},默认=“ mse”。衡量分割标准的函数 。splitter
:{“best”, “random”}, default=”best”。分割方式。max_depth
:树的最大深度。min_samples_split
:拆分内部节点所需的最少样本数,默认是2。min_samples_leaf
:在叶节点处需要的最小样本数。默认是1。min_weight_fraction_leaf
:在所有叶节点处(所有输入样本)的权重总和中的最小加权分数。如果未提供sample_weight,则样本的权重相等。默认是0。X = boston.data
y = boston.target
from sklearn.tree import DecisionTreeRegressor
reg_tree = DecisionTreeRegressor(criterion = "mse",min_samples_leaf = 5)
reg_tree.fit(X,y)
reg_tree.score(X,y)
0.9376307599929274
所有特征需要标准化
支持向量回归机(Support Vector Machine for Regression)即SVR是SVM在回归问题上的运用,一般用来解决非线性问题。
其中,
ω
=
(
ω
1
,
ω
2
,
.
.
.
,
ω
M
)
T
\omega \ =\ \left( \omega _1,\omega _2,...,\omega _M \right) ^T
ω = (ω1,ω2,...,ωM)T是线性权重向量;C为数据样本拟合精度函数和回归模型复杂度的加权计算结果。
并利用非负松弛变量
ξ
i
\xi _i
ξi 和
ξ
i
′
\xi _i'
ξi′ 获得与式(3 - 6)的等价的对偶问题:
{
max
∑
i
=
1
l
y
i
(
β
i
′
−
β
i
)
−
ε
∑
i
=
1
l
β
i
′
+
β
i
−
0.5
∑
i
=
1
l
∑
j
=
1
l
(
β
i
−
β
i
′
)
(
β
j
−
β
j
′
)
K
(
x
i
,
x
j
)
s.t.
∑
i
=
1
l
(
β
i
−
β
i
′
)
=
0
,
0
≤
β
i
,
β
i
′
≤
C
/
l
\left\{
其中,
β
i
\beta_i
βi和
β
i
′
\beta_i'
βi′分别是松弛变量
ξ
i
\xi _i
ξi和
ξ
i
′
\xi _i'
ξi′ 对应的Lagrange乘数,
K
(
x
i
,
x
j
)
K\left( x_i,x_j \right)
K(xi,xj)为满足Mercer条件的核函数。
因此,测试样本X所对应的输出可以按下式进行预测:
f
(
x
)
=
∑
i
=
1
l
(
β
i
−
β
i
′
)
K
(
x
,
x
i
)
+
b
f\left( x \right) =\sum_{i=1}^l{\left( \beta _i-\beta _{i}^{'} \right)}K\left( x,x_i \right) +b
f(x)=i=1∑l(βi−βi′)K(x,xi)+b
其中核函数有以下四类:
1.线性核函数(LINEAR):
K
(
x
,
x
i
)
=
x
⋅
x
i
K\left( x_{},x_i \right) \ =\ x\cdot x_i
K(x,xi) = x⋅xi
2.高斯径向基核函数(RBF):
K
(
x
,
x
i
)
=
exp
(
−
∣
x
−
x
i
∣
2
δ
2
)
K\left( x,x_i \right) =\exp \left( -\frac{|x-x_i|^2}{\delta ^2} \right)
K(x,xi)=exp(−δ2∣x−xi∣2)
3.多项式核函数(POLY):
k
(
x
,
x
i
)
=
[
(
x
⋅
x
i
)
+
d
]
q
k\left( x,x_i \right) =\left[ \left( x\cdot x_i \right) +d \right] ^q
k(x,xi)=[(x⋅xi)+d]q
4.神经元的非线性作用核函数(Sigmoid):
k
(
x
,
x
i
)
=
[
(
x
⋅
x
i
)
+
d
]
q
k\left( x,x_i \right) =\left[ \left( x\cdot x_i \right) +d \right] ^q
k(x,xi)=[(x⋅xi)+d]q
sklearn中使用SVR实例:
sklearn.svm.SVR(*, kernel='rbf', degree=3, gamma='scale',
coef0=0.0, tol=0.001, C=1.0, epsilon=0.1,
shrinking=True, cache_size=200, verbose=False,
max_iter=-1)
https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html?highlight=svr#sklearn.svm.SVR
kernel
:核函数,{‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}, 默认=’rbf’。degree
:多项式核函数的阶数。默认 = 3。C
:正则化参数,默认=1.0。(后面会详细介绍)epsilon
:SVR模型允许的不计算误差的邻域大小。默认0.1。from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler # 标准化数据
from sklearn.pipeline import make_pipeline # 使用管道,把预处理和模型形成一个流程
reg_svr = make_pipeline(StandardScaler(), SVR(C=1.0, epsilon=0.2))
reg_svr.fit(X, y)
reg_svr.score(X,y)
0.7024525421955279
https://blog.csdn.net/qq_34170700/article/details/106150852 三个评价指标
https://www.jianshu.com/p/6305f2f8077c 线性回归模型原理与推导
https://blog.csdn.net/weixin_38292570/article/details/104582403 线性回归方程参数的最小二乘估计
https://blog.csdn.net/luoshixian099/article/details/50880432 几何解释
https://zhuanlan.zhihu.com/p/109808497 线性回归拓展及介绍
https://www.cnblogs.com/wuliytTaotao/p/10724118.html 回归树
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。