线性回归
定义与公式
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)
学习率α的选择 (超参数)
局部最优点
四种梯度下降算法
- 全梯度下降算法(FG)
\theta=\theta-\eta \cdot \nabla_{\theta} J(\theta)
- 随机梯度下降算法(SG)
\theta=\theta-\eta \cdot \nabla_{\theta} J\left(\theta ; x^{(i)} ; y^{(i)}\right)
最快, 只取一个样本
- 小批量梯度下降算法(mini-batch)
\theta=\theta-\eta \cdot \nabla_{\theta} J\left(\theta ; x^{(i : i+n)} ; y^{(i : i+n)}\right)
选取一部分样本
- 随机平均梯度下降算法(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, 可以根据选择使用