线性回归

线性回归

定义与公式

h(w)=w_{1} x_{1}+w_{2} x_{2}+w_{3} x_{3} \ldots+\mathrm{b}=w^{T} x+b

\mathbf{w}=\left(\begin{array}{c}{b}\\{w_{1}}\\{w_{2}}\end{array}\right), x=\left(\begin{array}{c}{1}\\{x_{1}}\\{x_{2}}\end{array}\right)

线性: 因变量(y)对各个自变量的一阶导数都是常数.

回归系数w1 … wn 偏置b

超平面: 高维空间线性关系

损失函数

1.是关于可训练参数的函数2.值越小模型越好
\begin{aligned} J(\theta) &=\left(h_{w}\left(x_{1}\right)-y_{1}\right)^{2}+\left(h_{w}\left(x_{2}\right)-y_{2}\right)^{2}+\cdots+\left(h_{w}\left(x_{m}\right)-y_{m}\right)^{2}\\&=\sum_{i=1}^{m}\left(h_{w}\left(x_{i}\right)-y_{i}\right)^{2} \end{aligned}

J(\theta)=(y-X w)^{2}

对于该种损失函数可使用正规方程:

X特征值矩阵 w权重矩阵 y目标值矩阵
w=\left(\mathrm{X}^{T} X\right)^{-1} * X^{T} y
只能用于最小二乘法的线性回归

求逆矩阵运算量大, 所以在样本量大的时候使用梯度下降

梯度下降Gradient Descent

w_{i}=w_{i}-\alpha \frac{\partial}{\partial w_{i}} J(w)

学习率α的选择 (超参数)

局部最优点

四种梯度下降算法

  1. 全梯度下降算法(FG)

\theta=\theta-\eta \cdot \nabla_{\theta} J(\theta)

  1. 随机梯度下降算法(SG)

\theta=\theta-\eta \cdot \nabla_{\theta} J\left(\theta ; x^{(i)} ; y^{(i)}\right)

最快, 只取一个样本

  1. 小批量梯度下降算法(mini-batch)

\theta=\theta-\eta \cdot \nabla_{\theta} J\left(\theta ; x^{(i : i+n)} ; y^{(i : i+n)}\right)

选取一部分样本

  1. 随机平均梯度下降算法(SAG)

更新只使用一个样本,梯度是对过去n次的梯度求均值,n自己设置

(1)FG方法由于它每轮更新都要使用全体数据集,故花费的时间成本最多,内存存储最大。

(2)SAG在训练初期表现不佳,优化速度较慢。这是因为我们常将初始梯度设为0,而SAG每轮梯度更新都结合了上一轮梯度值。

(3)综合考虑迭代次数和运行时间,SG表现性能都很好,能在训练初期快速摆脱初始梯度值,快速将平均损失函数降到很低。但要注意,在使用SG方法时要慎重选择步长,否则容易错过最优解。

(4)mini-batch结合了SG的“胆大”和FG的“心细”,它的表现也正好居于SG和FG二者之间。在目前的机器学习领域,mini-batch是使用最多的梯度下降算法,正是因为它避开了FG运算效率低成本大和SG收敛效果不稳定的缺点。

线性回归api

  • sklearn.linear_model.LinearRegression(fit_intercept=True)
    • 通过正规方程优化
    • fit_intercept:是否计算偏置
    • LinearRegression.coef_:回归系数
    • LinearRegression.intercept_:偏置
  • sklearn.linear_model.SGDRegressor(loss=”squared_loss”, fit_intercept=True, learning_rate =’invscaling’, eta0=0.01)
    • SGDRegressor类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型。
    • loss:损失类型
    • loss=”squared_loss”: 普通最小二乘法
    • fit_intercept:是否计算偏置
    • learning_rate : string, optional
    • 学习率填充
    • ‘constant’: eta = eta0可以设置成静态的或动态的
    • ‘optimal’: eta = 1.0 / (alpha * (t + t0)) [default]
    • ‘invscaling’: eta = eta0 / pow(t, power_t)
      • power_t=0.25:存在父类当中
    • 对于一个常数值的学习率来说,可以使用learning_rate=’constant’ ,并使用eta0来指定学习率。
    • SGDRegressor.coef_:回归系数
    • SGDRegressor.intercept_:偏置

sklearn提供给我们两种实现的API, 可以根据选择使用

发表评论

邮箱地址不会被公开。 必填项已用*标注