线性回归和逻辑回归

AndrewNg-Headshot

AndrewNg

就我理解所谓的回归问题,就是做假设,完善这个假设,验证这个假设的过程。
有的假设本身很离谱,完善了也没有好的验证结果;有的问题本身很复杂,假设很难归纳问题。

像西瓜书上说了:No Free Launch Theorem
要根据特定的问题,应用特定的算法,看算法本身的归纳偏好和问题是否匹配。

线性回归

代价函数

其中 $h_{\theta}$ 是假设函数 $\theta^T X$

也就是求目标函数方差最小的参数

1
J = sum((X * theta - y) .^ 2) / (2 * length(y));

梯度下降法

每一个参数就是一个维度,求各个维度上的函数变化率,组成向量即梯度。

每一次迭代都向梯度方向前进一小步,其中 alpha 是学习率,最终达到收敛目的

1
theta = theta - (alpha * ((X' * (X * theta - y))/ m));

正规方程法

即解线性代数的解。

线性方程组的个数不够(样本不够),或参数可相互线性表示(维度耦合度过高)
会导致参数矩阵是一个奇异矩阵,非方正,不可逆;矩阵的秩小于维数,方程组没有唯一解。

向量化

为简化代码,加速计算,需要将计算向量化
在线性回归计算中,将偏导项、损失函数计算向量化:
将假设函数的变量参数当作向量 $\theta$,各个样本作为矩阵行,样本属性作为矩阵列,再在左侧并上偏移向量1。
那么梯度可用 表示,其中 代表当前参数下的样本【误差向量】。
特征向量转置 * 误差向量 / m 得到的标量即,函数在 $ \theta_j $ 维度上的偏导数。
求得所有特征维度上的偏导数组成向量即梯度。

逻辑回归

逻辑回归是使用线性回归的思想,来处理分类问题。
使用sigmoid函数,让原线性方程约束到(0, 1)之间;原有的凸函数也变得非凸,二阶导不一定保持符号。

为了保证损失函数的凸性,需要对原损失函数做一次变换(极大似然法)

1
J = -sum( y' * log(sigmoid(X * theta)) + (1 - y)' * log(1 - sigmoid(X * theta)) ) / m;

梯度方程也发生变化

1
grad = X' * (sigmoid(X * theta) - y) ./ m;

在“回归”时,数值 >= 0.5 为正类, < 0.5 为负类

正则化

算法的泛化能力非常重要,训练过度很可能过拟合,无法在验证集里获得好的效果。
正则化在线性回归中,相当于是在每步迭代中提前缩小了 $\theta$ (实际没变)
这样获得的参数向量不会在谷底,和训练集的拟合度能得到控制,泛化能力得到保障。

梯度下降的正规化

1
J = -sum( y' * log(sigmoid(X * theta)) + (1 - y)' * log(1 - sigmoid(X * theta)) ) / m + (lambda/(2*m)) * sum(theta.^2);

正则化后的梯度为:

1
grad = X' * (sigmoid(X * theta) - y) ./ m + (lambda / m) * theta;

正规方程的正规化

内部加上一个 $\lambda$ 倍的第一行全零的单位矩阵即可。这样还能消除参数矩阵的不可逆问题。


https://www.coursera.org/learn/machine-learning
https://study.163.com/course/courseMain.htm?courseId=1004570029