线性回归能够说是机器学习中最基本的问题类型了,这里就对线性回归的原理和算法作一个小结。html
线性回归遇到的问题通常是这样的。咱们有m个样本,每一个样本对应于n维特征和一个结果输出,以下:算法
\((x_1^{(0)}, x_2^{(0)}, ...x_n^{(0)}, y_0), (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)},y_1), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_m)\)微信
咱们的问题是,对于一个新的$(x_1^{(x)}, x_2^{(x)}, ...x_n^{(x)} \(, 他所对应的\)y_x$是多少呢? 若是这个问题里面的y是连续的,则是一个回归问题,不然是一个分类问题。机器学习
对于n维特征的样本数据,若是咱们决定使用线性回归,那么对应的模型是这样的:函数
\(h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}\), 其中$\theta_i $ (i = 0,1,2... n)为模型参数,$x_i $ (i = 0,1,2... n)为每一个样本的n个特征值。这个表示能够简化,咱们增长一个特征$x_0 = 1 $ ,这样\(h_\theta(x_0, x_1, ...x_n) = \sum\limits_{i=0}^{n}\theta_{i}x_{i}\)。post
进一步用矩阵形式表达更加简洁以下:学习
\(h_\mathbf{\theta}(\mathbf{X}) = \mathbf{X\theta}\)优化
其中, 假设函数\(h_\mathbf{\theta}(\mathbf{X})\)为mx1的向量,\(\mathbf{\theta}\)为nx1的向量,里面有n个代数法的模型参数。\(\mathbf{X}\)为mxn维的矩阵。m表明样本的个数,n表明样本的特征数。url
获得了模型,咱们须要求出须要的损失函数,通常线性回归咱们用均方偏差做为损失函数。损失函数的代数法表示以下:spa
\(J(\theta_0, \theta_1..., \theta_n) = \sum\limits_{i=0}^{m}(h_\theta(x_0, x_1, ...x_n) - y_i)^2\)
进一步用矩阵形式表达损失函数:
\(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y})\)
因为矩阵法表达比较的简洁,后面咱们将统一采用矩阵方式表达模型函数和损失函数。
对于线性回归的损失函数\(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y})\),咱们经常使用的有两种方法来求损失函数最小化时候的\(\mathbf{\theta}\)参数:一种是梯度降低法,一种是最小二乘法。因为已经在其它篇中单独介绍了梯度降低法和最小二乘法,能够点连接到对应的文章连接去阅读。
若是采用梯度降低法,则\(\mathbf{\theta}\)的迭代公式是这样的:
\(\mathbf\theta= \mathbf\theta - \alpha\mathbf{X}^T(\mathbf{X\theta} - \mathbf{Y})\)
经过若干次迭代后,咱们能够获得最终的\(\mathbf{\theta}\)的结果
若是采用最小二乘法,则\(\mathbf{\theta}\)的结果公式以下:
$ \mathbf{\theta} = (\mathbf{X^{T}X})^{-1}\mathbf{X^{T}Y} $
固然线性回归,还有其余的经常使用算法,好比牛顿法和拟牛顿法,这里不详细描述。
回到咱们开始的线性模型,\(h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}\), 若是这里不只仅是x的一次方,好比增长二次方,那么模型就变成了多项式回归。这里写一个只有两个特征的p次方多项式回归的模型:
\(h_\theta(x_1, x_2) = \theta_0 + \theta_{1}x_1 + \theta_{2}x_{2} + \theta_{3}x_1^{2} + \theta_{4}x_2^{2} + \theta_{5}x_{1}x_2\)
咱们令\(x_0 = 1, x_1 = x_1, x_2 = x_2, x_3 =x_1^{2}, x_4 = x_2^{2}, x_5 = x_{1}x_2\) ,这样咱们就获得了下式:
\(h_\theta(x_1, x_2) = \theta_0 + \theta_{1}x_1 + \theta_{2}x_{2} + \theta_{3}x_3 + \theta_{4}x_4 + \theta_{5}x_5\)
能够发现,咱们又从新回到了线性回归,这是一个五元线性回归,能够用线性回归的方法来完成算法。对于每一个二元样本特征\((x_1,x_2)\),咱们获得一个五元样本特征\((1, x_1, x_2, x_{1}^2, x_{2}^2, x_{1}x_2)\),经过这个改进的五元样本特征,咱们从新把不是线性回归的函数变回线性回归。
在上一节的线性回归的推广中,咱们对样本特征端作了推广,这里咱们对于特征y作推广。好比咱们的输出\(\mathbf{Y}\)不知足和\(\mathbf{X}\)的线性关系,可是\(ln\mathbf{Y}\) 和\(\mathbf{X}\)知足线性关系,模型函数以下:
\(ln\mathbf{Y} = \mathbf{X\theta}\)
这样对与每一个样本的输入y,咱们用 lny去对应, 从而仍然能够用线性回归的算法去处理这个问题。咱们把 Iny通常化,假设这个函数是单调可微函数\(\mathbf{g}(.)\),则通常化的广义线性回归形式是:
\(\mathbf{g}(\mathbf{Y}) = \mathbf{X\theta}\) 或者 \(\mathbf{Y} = \mathbf{g^{-1}}(\mathbf{X\theta})\)
这个函数\(\mathbf{g}(.)\)咱们一般称为联系函数。
为了防止模型的过拟合,咱们在创建线性模型的时候常常须要加入正则化项。通常有L1正则化和L2正则化。
线性回归的L1正则化一般称为Lasso回归,它和通常线性回归的区别是在损失函数上增长了一个L1正则化的项,L1正则化的项有一个常数系数\(\alpha\)来调节损失函数的均方差项和正则化项的权重,具体Lasso回归的损失函数表达式以下:
\(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \alpha||\theta||_1\)
其中n为样本个数,\(\alpha\)为常数系数,须要进行调优。\(||\theta||_1\)为L1范数。
Lasso回归可使得一些特征的系数变小,甚至仍是一些绝对值较小的系数直接变为0。加强模型的泛化能力。
Lasso回归的求解办法通常有坐标轴降低法(coordinate descent)和最小角回归法( Least Angle Regression),因为它们比较复杂,在个人这篇文章单独讲述: 线程回归的正则化-Lasso回归小结
线性回归的L2正则化一般称为Ridge回归,它和通常线性回归的区别是在损失函数上增长了一个L2正则化的项,和Lasso回归的区别是Ridge回归的正则化项是L2范数,而Lasso回归的正则化项是L1范数。具体Ridge回归的损失函数表达式以下:
\(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \frac{1}{2}\alpha||\theta||_2^2\)
其中\(\alpha\)为常数系数,须要进行调优。\(||\theta||_2\)为L2范数。
Ridge回归在不抛弃任何一个特征的状况下,缩小了回归系数,使得模型相对而言比较的稳定,但和Lasso回归比,这会使得模型的特征留的特别多,模型解释性差。
Ridge回归的求解比较简单,通常用最小二乘法。这里给出用最小二乘法的矩阵推导形式,和普通线性回归相似。
令\(J(\mathbf\theta)\)的导数为0,获得下式:
\(\mathbf{X^T(X\theta - Y) + \alpha\theta} = 0\)
整理便可获得最后的\(\theta\)的结果:
\(\mathbf{\theta = (X^TX + \alpha E)^{-1}X^TY}\)
其中E为单位矩阵。
除了上面这两种常见的线性回归正则化,还有一些其余的线性回归正则化算法,区别主要就在于正则化项的不一样,和损失函数的优化方式不一样,这里就不累述了。
(欢迎转载,转载请注明出处。欢迎沟通交流: 微信:nickchen121)