机器学习1基础回归模型之线性回归,岭回归和Lasso回归

基础回归模型包括:
1.Linear Regression(线性回归)及其高阶版[Ridge Regression(岭回归)和Lasso回归]
2.Logistic Regression(逻辑回归)
3.Softmax Regression
其中后两个在神经网络中也经常用到

已知x = [(1, 0., 3), (1, 1., 3), (1, 2., 3), (1, 3., 2), (1, 4., 4)]
y= [95.364, 97.217205, 75.195834, 60.105519, 49.342380]
任务:建立模型预测当xi=[2,3,4]时yi的值

Model1: 线性模型机器学习1基础回归模型之线性回归,岭回归和Lasso回归,在这里有三个特征,故n=2,下面的任务是求这个θ。
那么约束条件是什么呢?没错,就是h(x)和y的差值要尽可能的小,用数学语言表达就是损失函数机器学习1基础回归模型之线性回归,岭回归和Lasso回归
取极小值。
因此θ的更新公式为机器学习1基础回归模型之线性回归,岭回归和Lasso回归
把J(θ)、h(x)代入化简可以得到
机器学习1基础回归模型之线性回归,岭回归和Lasso回归
这里面α为学习率
不断循环更新θ直到不变(用数学语言为J i+1-Ji<0.00001)时退出。
循环逼近求解θ的方法包括两种: Batch gradient decent(批量梯度下降)
机器学习1基础回归模型之线性回归,岭回归和Lasso回归
上面样本数m=5,j为每个特征.如果你感觉不好理解,可以结合下面程序
机器学习1基础回归模型之线性回归,岭回归和Lasso回归
和Stochastic gradient decent(随机梯度下降)
机器学习1基础回归模型之线性回归,岭回归和Lasso回归
机器学习1基础回归模型之线性回归,岭回归和Lasso回归
相信通过对比,你已经清楚了,批量梯度下降是所有样本用完后才更新一次权重,而随机梯度下降是对于每个样本用完后都更新一次权重.
批量梯度下降的优势是可以找到全局最优解,但是速度慢;而随机梯度下降容易陷入局部最优解,但是速度快。样本量小两个区别不明显,样本量大时可能用很少一部分数据就找到θ的稳定值。
矩阵精确求解
机器学习1基础回归模型之线性回归,岭回归和Lasso回归
如果X超级大,这样求解是很吃内存的。
需要注意的一点是上面损失函数采用的是平方损失,这是由于假设样本是高斯分布。如果样本偏离高斯分布较大,而是比如伯努利分布,则应该采用逻辑回归。

Model2:岭回归以及Lasso回归
我们设想一下假如解决线性回归过程中出现过拟合以及在通过正规方程方法求解θ的过程中出现的x转置乘以x不可逆这两类问题,怎么办。
为了回答这个问题,我们搬出来监督学习两大基本策略,经验风险最小化和结构风险最小化。经验风险最小化策略为求解最优化问题,线性回归中的求解损失函数最小化问题即是经验风险最小化策略。 经验风险最小化的定义为:机器学习1基础回归模型之线性回归,岭回归和Lasso回归
结构风险最小化是为了防止过拟合现象而提出的策略。结构风险最小化等价于正则化,在经验风险上加上表示模型复杂度的正则化项或者称作罚项。在确定损失函数和训练集数据的情况下其定义为:
机器学习1基础回归模型之线性回归,岭回归和Lasso回归
上面两种回归均通过在损失函数中引入正则化项来达到目的
其中λ称为正则化参数,如果λ选取过大,会把所有参数θ均最小化,造成欠拟合,如果λ选取过小,会导致对过拟合问题解决不当,因此λ的选取是一个技术活。
岭回归与Lasso回归的区别在于岭回归引入的是L2范数惩罚项Lasso回归引入的是L1范数惩罚项.
L2范数:向量各个元素的平方求和然后求平方根,在这里我们一般为了方便,不再取开平方根
机器学习1基础回归模型之线性回归,岭回归和Lasso回归
L1范数:向量各个元素绝对值之和,在这里
机器学习1基础回归模型之线性回归,岭回归和Lasso回归
为什么L2正则化可以获得θ值很小的参数,避免过拟合呢?
机器学习1基础回归模型之线性回归,岭回归和Lasso回归
Lasso回归能够使得损失函数中的许多θ均变成0,这点要优于岭回归,因为岭回归是要所有的θ均存在的,这样计算量Lasso回归将远远小于岭回归。

在python中,我们可以方便地利用sklearn包

from sklearn import linear_model

线性模型: linearRegression = linear_model.LinearRegression()

linearRegression.fit(X_train, y_train)

岭回归:ridgeRegression = linear_model.Ridge()

ridgeRegression.fit(X_train, y_train)

Lasso回归:lassoRegression = linear_model.Lasso()

lassoRegression.fit(X_train, y_train)**

*小白求大神指点*