一、线性回归模型
1.建立模型
假设使用向量
x
=
(
x
(
1
)
,
x
(
2
)
,
x
(
3
)
,
.
.
.
,
x
(
N
)
)
{\bf x}=(x^{(1)},x^{(2)},x^{(3)},...,x^{(N)})
x=(x(1),x(2),x(3),...,x(N))代表影响结果的各个特征因素,最终结果为
h
(
x
)
h(x)
h(x),向量
w
=
(
w
1
,
w
2
,
w
3
,
.
.
.
,
w
N
)
{\bf w} = ({w\tiny 1},{w\tiny 2},{w\tiny 3},...,{w\tiny N})
w=(w1,w2,w3,...,wN)表示各个特征的权重,
b
b
b为偏置常数,则有函数表达式:
h
(
x
)
=
w
1
x
(
1
)
+
w
2
x
(
2
)
+
w
3
x
(
3
)
+
.
.
.
w
N
x
(
N
)
+
b
h(x)={w\tiny 1}x^{(1)}+{w\tiny 2}x^{(2)}+{w\tiny 3}x^{(3)}+...{w\tiny N}x^{(N)}+b
h(x)=w1x(1)+w2x(2)+w3x(3)+...wNx(N)+b写为矩阵形式:
h
(
x
)
=
w
x
+
b
h({\bf x}) = {\bf wx}+b
h(x)=wx+b
2.策略确定
对于回归问题,采用最小均方误差损失来描述模型的好坏。损失函数:
min
w
,
b
L
(
w
,
b
)
=
min
w
1
2
∑
i
=
1
M
[
h
(
x
i
;
w
;
b
)
−
y
i
]
2
\min_{\mathclap {w,b}}L({\bf w},b)= \min_{\mathclap w}{1\over 2}\displaystyle\sum_{i=1}^{M}[h({\bf {x\tiny i};w};b)-{y\tiny i}]^2
w,bminL(w,b)=wmin21i=1∑M[h(xi;w;b)−yi]2使用梯度下降法求解损失函数:
∂
∂
w
L
(
w
,
b
)
=
∂
∂
w
[
1
2
∑
i
=
1
M
[
h
(
x
i
;
w
;
b
)
−
y
i
]
2
]
=
(
w
x
i
+
b
−
y
i
)
x
i
{\partial \over \partial \bf w}L({\bf w},b)={\partial \over \partial \bf w}\big[{1\over 2}\displaystyle\sum_{i=1}^{M}[h({\bf {x\tiny i};w};b)-{y\tiny i}]^2\big]=({\bf wx\tiny i}+b-{y\tiny i})\bf x\tiny i
∂w∂L(w,b)=∂w∂[21i=1∑M[h(xi;w;b)−yi]2]=(wxi+b−yi)xi
∂
∂
b
L
(
w
,
b
)
=
∂
∂
b
[
1
2
∑
i
=
1
M
[
h
(
x
i
;
w
;
b
)
−
y
i
]
2
]
=
(
w
x
i
+
b
−
y
i
)
{\partial \over \partial b}L({\bf w},b)={\partial \over \partial b}\big[{1\over 2}\displaystyle\sum_{i=1}^{M}[h({\bf {x\tiny i};w};b)-{y\tiny i}]^2\big]=({\bf wx\tiny i}+b-{y\tiny i})
∂b∂L(w,b)=∂b∂[21i=1∑M[h(xi;w;b)−yi]2]=(wxi+b−yi)由以上两式可得权重系数
w
\bf w
w和偏置常数
b
b
b的更新式为:
w
←
w
−
η
(
w
x
i
+
b
−
y
i
)
x
i
{\bf w}\larr {\bf w}-\eta ({\bf wx\tiny i}+b-{y\tiny i})\bf x\tiny i
w←w−η(wxi+b−yi)xi
b
←
b
−
η
(
w
x
i
+
b
−
y
i
)
b\larr b-\eta ({\bf wx\tiny i}+b-{y\tiny i})
b←b−η(wxi+b−yi)学习率
η
\eta
η:
0
<
η
⩽
1
0<\eta\leqslant1
0<η⩽1。重复更新
w
{\bf w}
w和
b
b
b直到模型满足要求。
3.使用scikit-learn实现
在scikit-learn中通过linear_model类实现,其方法有:
fit(X_train,y_train)
:在训练集(X_train,y_train)上训练模型。score(X_test,y_test)
:返回模型在测试集上的预测准确率,其值越大表示模型预测性能越好。predict(X)
:用训练好的模型来预测待测数据集X,返回预测结果。
普通线性回归
class sklearn.linear_model.LinearRegression(fit_intercept=True,normalize=False,n_jobs=1)
'''
参数:
fit_intercept;选择是否计算偏置常数b,默认为True。
normalize:在拟合数据前是否对其进行归一化,默认为False
n_jobs:指定计算机并行工作时的CPU核数,默认为1;-1表示使用所有可用的核
输出:
coef_:权重向量 w
intercept_:偏置常数 b
'''
Lasso回归
在基本的线性回归上加一个L1正则化项: α ∣ ∣ w ∣ ∣ 1 α ⩾ 0 {\alpha ||w||\tiny 1}\space\space\alpha\geqslant0 α∣∣w∣∣1 α⩾0
class sklearn.linear_model.Lasso(alpha=1.0,fit_intercept=True,normalize=False,precompute=False,max_iter=1000,tol=0.0001,warm_start=False,positive=False,selection='cyclic')
'''
参数:
alpha:L1正则化项前面带的常数调节因子
precompute:是否使用预先计算的Gram矩阵来加快计算,默认为False
max_iter:最大迭代次数,默认1000
tol:判断迭代收敛的阈值,默认0.0001
warm_start:是否使用前一次训练的结果继续训练,默认False,表示每次都从头开始训练
positive:强制所有权重系数为正值,默认为False
selection:每轮迭代时选择哪个权重系数进行更新,默认为cycle,表示从前往后依次选择;若为random,表示随机选择一个权重系数进行更新
其它同普通线性回归
输出:
n_iter_:用于输出实际迭代的次数
其它同普通线性回归
'''
岭回归
在基本的线性回归上加一个L2正则化项: α ∣ ∣ w ∣ ∣ 2 2 α ⩾ 0 \alpha\mathop{||w||}_2^2\space\space\alpha\geqslant0 α∣∣w∣∣22 α⩾0
class sklearn.linear_model.Ridge(alpha=1.0,fit_intercept=True,normalize=False,max_iter=None,tol=0.001,solver='auto')
'''
参数:
alpha:L2正则化项前面带的常数调节因子
solver:指定求解最优化问题的算法,默认auto,自动选择。更多取值选项:
svd:用奇异值分解计算回归系数;
cholesky:使用scipy.linalg.solve函数求解;
sparse_cg:使用scipy.sparse.linalg.cg中的共轭梯度求解器求解;
lsqr:使用正则化最小二乘法scipy.sparse.linalg.lsqr,速度最快;
sag:使用随即平均梯度下降法求解
其它同Lasso回归
输出:
同Lasso回归
'''
ElasticNet回归
弹性网络回归是将L1和L2正则化进行融合。混合正则化项: α ρ ∣ ∣ w ∣ ∣ 1 + α ( 1 − ρ ) 2 ∣ ∣ w ∣ ∣ 2 2 α ⩾ 0 , 1 ⩾ ρ ⩾ 0 {\alpha\rho ||w||\tiny 1}+{\alpha(1-\rho)\over 2}\mathop{||w||}_2^2\space\space\alpha\geqslant0,1\geqslant\rho\geqslant0 αρ∣∣w∣∣1+2α(1−ρ)∣∣w∣∣22 α⩾0,1⩾ρ⩾0
class sklearn.linear_model.ElasticNet(alpha=1.0,l1_ratio=0.5,fit_intercept=True,normalize=False,precompute=False,max_iter=1000,tol=0.0001,warm_start=False,positive=False,selection='cyclic')
'''
参数:
alpha:L1正则化项前面带的常数调节因子
l1_ratio:上式p值,默认为0.5
其它同岭回归
输出:
同岭回归
'''
== --------------------------------------------------------华丽的分割线--------------------------------------------------------==