linear
线性回归拟合一个带有系数$ w = (w_1, ..., w_p)$ 的线性模型,使得数据集实际观测数据和预测数据(估计值)之间的残差平方和最小。其数学表达式为:
\(\underset{w}{min\,} {|| X w - y||_2}^2\)
解为:\(w=(X^TX)^{-1}X^Ty\)
岭回归通过对系数的大小施加惩罚来解决 普通最小二乘法 的一些问题。 岭系数最小化的是带罚项的残差平方和
岭回归会使得系数平均化
解为:\(w=(X^TX+\alpha I)^{-1}X^Ty\)
$\alpha \geq 0 \( 是控制系数收缩量的复杂性参数:\) \alpha$ 的值越大,收缩量越大,这样系数对共线性的鲁棒性也更强
求解方程组时如果对数据进行较小的扰动,则得出的结果具有很大波动,这样的矩阵称为病态矩阵。岭回归是很好的解决方法
lasso regresion:
L1正则化本身就会对参数w稀疏化,所以有特征选择的效果
Elastic-Net regression
弹性网络 是一种使用 L1, L2 范数作为先验正则项训练的线性回归模型。 这种组合允许学习到一个只有少量参数是非零稀疏的模型,就像 Lasso 一样,但是它仍然保持 一些像 Ridge 的正则性质。我们可利用 l1_ratio 参数控制 L1 和 L2 的凸组合。
解法(坐标下降法):
```坐标下降法的数学依据主要是这个结论(此处不做证明):一个可微的凸函数J(θ), 其中θ是nx1的向量,即有n个维度。如果在某一点θ¯¯¯,使得J(θ)在每一个坐标轴θ¯¯¯i(i = 1,2,...n)上都是最小值,那么J(θ¯¯¯i)就是一个全局的最小值。```
for n_iter in range(max_iter):
w_max = 0.0
d_w_max = 0.0
for f_iter in range(n_features):#此for循环是求各个特征使得目标函数尽可能小所对应的值,是坐标下降法核心
ii = f_iter
if norm_cols_X[ii] == 0.0:#该特征是空的
continue
w_ii = w[ii]
R += w_ii * X[:, ii]
tmp = (X[:, ii] * R).sum()"""如果当前维度与残差是正相关的,那么该维度对应的参数值w就应该是正的,相关性越高,值越大.若残差值很大,那么自然值tmp就很大,而tmp值是w[ii]的分子,w[ii]就很大,这时再计算残差,残差值就会减少很多了"""
w[ii] = (np.sign(tmp) * max(abs(tmp) - alpha, 0)/ (norm_cols_X[ii] + beta))
R -= w[ii] * X[:, ii] # Update residual
d_w_ii = abs(w[ii] - w_ii)
if d_w_ii > d_w_max:
d_w_max = d_w_ii
if abs(w[ii]) > w_max:
w_max = abs(w[ii])
if (w_max == 0.0
or d_w_max / w_max < 0
or n_iter == max_iter - 1):
XtA = np.dot(X.T, R) - beta * w
dual_norm_XtA = np.max(np.abs(XtA))
R_norm2 = np.dot(R, R)
w_norm2 = np.dot(w, w)
if (dual_norm_XtA > alpha):
const = alpha / dual_norm_XtA
A_norm2 = R_norm2 * (const ** 2)
gap = 0.5 * (R_norm2 + A_norm2)
else:
const = 1.0
gap = R_norm2
l1_norm = np.sum(np.abs(w))
np.dot(R.T, y)
if gap < tol:
break
return w, gap, tol, n_iter + 1
坐标下降法例子:
\(x=\begin{pmatrix}
0 & 1 \\
1 & 1 \\
2 & 1 \\
-1 & 0 \\
\end{pmatrix},
y=\begin{pmatrix}
1 \\
2 \\
3 \\
-1 \\
\end{pmatrix}\)
初始\(w=[0,0]\)
\(r=y-Xw=\begin{pmatrix}
1 \\
2 \\
3 \\
-1 \\
\end{pmatrix}\)
for:
\(r=r+w_1x_1=[1,2,3,-1]-0[0,1,2,-1]=[1,2,3,-1]\)
\(tmp=x_1r=[0,1,2,-1]\begin{pmatrix}
1 \\
2 \\
3 \\
-1 \\
\end{pmatrix}=9\)
\(w_1=tmp/norm(x_1)=9/6=1.5\)
\(r=r-w_1x_1=[1,2,3,-1]-1.5[0,1,2,-1]=[1,0.5,0,0.5]\)
\(r=r+w_2x_2=[1,0.5,0,0.5]+0[1,1,1,0]=[1,0.5,0,0.5]\)
\(tmp=x_2r=[1,1,1,0]\begin{pmatrix}
1 \\
0.5 \\
0\\
0.5 \\
\end{pmatrix}=1.5\)
\(w_2=tmp/norm(x_2)=1.5/3=0.5\)
\(r=r-w_2x_2=[1,0.5,0,0.5]-0.5[1,1,1,0]=[0.5,0,-0.5,0.5]\)
\(w=[1.5,0.5]\)
end
贝叶斯岭回归
\(n\)是样本数
\(const=2*10^{-6}\)
\(v=[\lambda_1,...,\lambda_n]\)是特征值向量
for :
\(\quad\) $\sigma = \frac{\lambda}{\alpha I}+X^TX \(
\)\quad$ \(w=\sigma^{-1}X^Ty\)
\(\quad\) \(rmse=|y-X*w|_2\)
\(\quad\) \(\gamma = |\frac{\alpha*v}{\alpha*v+\lambda}|_1\)
\(\quad\) \(\lambda = \frac{\gamma+const}{|w|_2+const}\)
\(\quad\) \(\alpha = \frac{n-\gamma+const}{rmse+const}\)
end
logistic 回归
作为优化问题,带 L2 罚项的二分类 logistic 回归要最小化以下代价函数(cost function):
\(\underset{w, c}{min\,} \frac{1}{2}w^T w + C \sum_{i=1}^n \log(\exp(- y_i (X_i^T w + c)) + 1) .\)
在判别式函数δk(x)或者后验概率函数P(Ck|x)上加上一个单调函数f(⋅)后,使得变换后的函数是x的线性函数,那么其得到的决策便也是线性的,就可以得到一个线性分类器。
以Logistics Regression为例,假设面对的是一个二分类问题,在Logistics Regression中,是定义类别的后验概率为:
\(P(C_1|x)=\frac{1}{1+exp(w^T x)}\)
\(P(C_2|x)=\frac{exp(w^T x)}{1+exp(w^Tx)}\)
这里,使用一个单调的变换函数,logit 函数:log[p/(1−p)],那么就可以得到:
\(log\frac{P(C_1|x)}{P(C2|x)}P(C2|x)=w^T x\)
所以Logistics Regression的决策面就是:\(w^Tx=0\)
在 LogisticRegression 类中实现了这些优化算法: “liblinear”, “newton-cg”, “lbfgs”, “sag” 和 “saga”。
通常用sag或sags
以下\(x\)是参数
计算某个特征所对应的函数梯度,数值方法为轻微修改该特征的值,得到对应的函数值,利用差分获得其梯度\(\frac{y_2-y_1}{x_2-x_1}\)
FG(Fully gradient):
\(x^{k+1}=x^k-a_kg^{'}(x^k)=x^k-\frac{a_k}{n}\sum_{i=1}^nf_i^{'}(x^k)\)
SG(stochastic gradient):
\(x^{k+1}=x^k-a_kf_{i_k}^{'}(x^k)\)
SAG(stochastic average gradient)
\(x^{k+1}=x^k-a_kg^{'}(x^k)=x^k-\frac{a_k}{n}\sum_{i=1}^ny_i^k\)
在每次迭代时,会产生一个随机索引\(i_k\)
IAG(Incremental Aggregated Gradient增量聚合梯度)
该方法与SAG迭代相同,但是使用ik的循环选择而不是采样ik值
SGD,随机梯度下降
随机梯度下降是拟合线性模型的一个简单而高效的方法。在样本量(和特征数)很大时尤为有用
随机梯度下降法例子
\(x=\begin{pmatrix}
0 & 1 \\
1 & 1 \\
2 & 1 \\
-1 & 0 \\
\end{pmatrix},
y=\begin{pmatrix}
1 \\
2 \\
3 \\
-1 \\
\end{pmatrix}\)
初始\(w=[0,0]\)
sklean版:
\(f_1=x_1w=[0,1][0,0]^T=0,y_1-f_1=1,w=w+1*x_1=[0,0]+[0,1]=[0,1]\)
\(f_2=x_2w=[1,1][0,1]^T=1,y_2-f_2=1,w=w+1*x_2=[0,1]+[1,1]=[1,2]\)
\(f_3=x_3w=[2,1][1,2]^T=4,y_3-f_3=-1,w=w-1*x_3=[1,2]-[2,1]=[-1,1]\)
\(f_4=x_4w=[-1,0][-1,1]^T=1,y_4-f_4=-2,w=w-2*x_4=[-1,1]-2[-1,0]=[1,1]\)
迭代,发现已收敛,[1,1]就是最优解(此处下降速率默认为1,实则需要根据x模长确定,防止发散)
梯度版:
\(f_{11}=x_1(w+\Delta w_1)=[0,1][0+0.1,0]^T=0\)
\(w_1=w_1+sign(y-f_1)*(f_{11}-f_1)/\Delta w_1=0+1*(0-0)/0.1=0\)
\(f_{12}=x_1(w+\Delta w_2)=[0,1][0+0,0+0.1]^T=0.1\)
\(w_2=w_2+sign(y-f_1)*(f_{12}-f_1)/\Delta w_2=0+1*(0.1-0)/0.1=1\)
\(w=[0,1]\)
按上述公式继续算下去,其结果与sklearn版是一样的。
稳健回归对模型中的异常点不敏感
1.随机抽取k个样本数据,并检查该数据是否有效
2.将模型拟合到随机子集(base_estimator.fit)并检查估计模型是否有效
3.通过计算估计模型的残差,将所有数据分类为内部值或外部值,小于残差阈值的为内部值
4.如果内部样本数量最大,则将拟合模型保存为最佳模型。如果当前估计的模型具有相同数量的内点,则只有它具有较好的分数才被认为是最好的模型。
机器学习中的一种常见模式是使用训练了数据非线性函数的线性模型。这种方法保持线性方法的普遍快速性能,同时允许它们适合更广泛的数据范围。
多项式回归:(用线性方法拟合非线性数据)
例如,可以通过从系数构造多项式特征来扩展简单的线性回归 。在标准线性回归的情况下,您可能有一个类似于二维数据的模型:
\(\hat{y}(w,x)= w_0 + w_1 x_1 + w_2 x_2\)
如果我们想要将抛物面拟合到数据而不是平面上,我们可以将这些特征组合到二阶多项式中,以便模型如下所示:
\(\hat{y}(w,x)= w_0 + w_1 x_1 + w_2 x_2 + w_3 x_1 x_2 + w_4 x_1 ^ 2 + w_5 x_2 ^ 2\)
(有时令人惊讶的)观察结果是,这仍然是一个线性模型:想象一下,想象一下创建一个新变量
\(z = [x_1,x_2,x_1 x_2,x_1 ^ 2,x_2 ^ 2]\)
通过重新标记数据,我们可以编写问题
\(\hat{y}(w,x)= w_0 + w_1 z_1 + w_2 z_2 + w_3 z_3 + w_4 z_4 + w_5 z_5\)
我们看到,得到的多项式回归与我们上面考虑的同一类线性模型(即模型是线性的w )可以通过相同的技术解决。通过考虑用这些基函数构建的高维空间内的线性拟合,该模型具有适应更广泛数据范围的灵活性。

浙公网安备 33010602011771号