机器学习算法 之 线性回归(linear regreesion)

相关文章目录:python

  1. 机器学习 之线性回归
  2. 机器学习 之逻辑回归及python实现
  3. 机器学习项目实战 交易数据异常检测
  4. 机器学习之 决策树(Decision Tree)
  5. 机器学习之 决策树(Decision Tree)python实现
  6. 机器学习之 PCA(主成分分析)
  7. 机器学习之 特征工程

linear regreesion(线性回归)

咱们将用来描述回归问题的标记以下:算法

m 表明训练集中实例的数量数组

n 表明特征的数量机器学习

x^{(i)} 表示第i个训练实例,是特征矩阵的第i行,是一个向量函数

x_j^{(i)} 表示特征矩阵中第i行的第j个特征,也就是第i个训练实例的第j个特征post

y 表明目标变量,也就是输出变量学习

(x,y) 表明训练集中的一个实例优化

(x^{(i)},y^{(i)}) 表明第i个观察实例cdn

h 表明学习算法的函数,或者加假设(hypothesis)blog

对于多变量线性回归,假设函数能够设为

h_{\theta}(x) = \theta_0+\theta_1x_1 + \theta_2x_2 +...+\theta_nx_n

为了使公式可以简化,引入 x_0=1 则假设函数变为

h_{\theta}(x) = \theta_0x_0+\theta_1x_1 + \theta_2x_2 +...+\theta_nx_n

进行向量化后,最终结果为

h_{\theta}(x) = \theta^TX

咱们须要求出\theta,使得对于每个样本,带入到假设函数中,能获得对应的一个预测值,而咱们的目标,是使求出的预测值尽量的接近真实值

经过最大似然估计来推导目标函数

因为咱们实际预测的值和真实值之间确定会有偏差,对于每一个样本:

y^{(i)} = \theta^Tx^{(i)} + \varepsilon^{(i)}

其中,y^{(i)}为当前样本实际真实值,\theta^Tx^{(i)}为预测结果,\varepsilon^{(i)}即为预测偏差

对于整个数据集来讲,则:

Y =  \theta^TX + \varepsilon

偏差\varepsilon^{(i)}独立的而且具备相同的分布,而且服从均值为0,方差为\theta^2正态分布

因为偏差服从正态分布,因此:

p(\varepsilon^{(i)}) = \frac{1}{\sqrt{2\pi}\sigma}exp\lgroup-\frac{(\varepsilon^{(i)})^2}{2\sigma^2}\rgroup

带入得:

p(y^{(i)}\bracevert x^{(i)};\theta) = \frac{1}{\sqrt{2\pi}\sigma}exp\lgroup-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2}\rgroup

咱们但愿偏差越接近0越好,因为偏差服从均值为0的正态分布,因此对应偏差越接近分布的中心处越好。咱们能够近似的用对应几率p来表示当前正态分布的纵坐标值,则因为各个样本的偏差互相独立,因此,将每一个样本偏差几率相乘,得总似然函数为:

L(\theta) = \prod_{i=1}^{m} p(y^{(i)}\bracevert x^{(i)};\theta) =  \prod_{i=1}^{m}\frac{1}{\sqrt{2\pi}\sigma}exp\lgroup-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2}\rgroup

咱们的问题是但愿找到合适的\theta,与咱们的数据组合后尽量的接近真实值 因此咱们须要求解上述似然函数的针对于\theta最大值,即求解最大似然函数

因为上述似然函数中的累乘运算过于复杂,咱们能够将其进行转换,变成对数似然,求加和,即:

上述公式中,m,\sigma,y^{(i)},x^{(i)} 都是已知的,只有\theta 是未知的。 因此咱们的目标是 找出一组\theta,使上述似然函数最大,即求最大似然函数。 因为只有\theta 是未知的。上述问题能够转换为,求 \sum_ {i=1}^m(y^{(i)}-{\theta^T}x^{(i)})^2 的最小值

最终,得出咱们的目标函数(也称为代价函数)为:

J(\theta) = \frac{1}{2}\sum_ {i=1}^m(y^{(i)}-{\theta^T}x^{(i)})^2 \,\,(此处加上1/2是为了求偏导时计算方便)

进行向量化:

J(\theta) =\frac{1}{2}(X\theta - y)^T(X\theta - y)

正规方程

要求J(\theta)取得最小值时对应的\theta值,一个办法就是求偏导。因为J(\theta)为凸函数,因此在偏导等于0处取得最小值,此时的\theta即为咱们所须要的,而且也是最优解 这种直接令偏导等于0,解方程得出\theta的方法称为正规方程

\begin{align*}
\nabla_{\theta}J(\theta) &= \nabla_{\theta}(\,\frac{1}{2}(X\theta - y)^T(X\theta - y)\,) \\
&=\nabla_{\theta}(\,\frac{1}{2}(\theta^TX^T - y^T)(X\theta - y)\,)   \\
&=\nabla_{\theta}(\,\frac{1}{2}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta+y^T y)\,)   \\
&=\frac{1}{2}(\,2X^TX\theta-X^Ty-(y^TX)^T\,) \\
&= X^TX\theta-X^Ty
\end{align*}

\nabla_{\theta}J(\theta) = 0,得:

\theta = (X^TX)^{-1}X^Ty

虽然,经过正规方程,能够求得最优解,可是,在实际项目中,咱们的样本数量以及每一个样本的特征 数量很是大,这个时候,采用正规方程,算法的时间复杂度过高,耗时过高,甚至因为样本呢和特征过大,或者矩阵不可逆,致使没法计算。 尤为对于矩阵求逆来讲更是如此。因此,通常对于样本数量和特征数量较少时能够采用此种求解方式。

对于通常状况,咱们须要采用另一种很是经典的优化算法,即 梯度降低法

梯度降低法

对于直接求解正规方程的方式,首先,并不必定可解,另外,时间复杂度太高。 而机器学习的常规套路,都是使用梯度降低法,去求解最小值问题。

梯度降低背后的思想是:
开始时咱们随机选择一组参数(\theta_1,\theta_2,\theta_3,......\theta_n).计算对应代价函数,而后咱们须要寻找下一组能让代价函数值降低最多的参数组合,一直迭代这个过程,直到最后代价函数值收敛,即找到一个局部最小值. 此时对应的(\theta_1,\theta_2,\theta_3,......\theta_n)即为咱们须要求的结果.
咱们并无尝试找出全部的\theta参数组合,因此,不能肯定咱们获得的局部最小值是不是全局最小值。 可是,对于线性回归的代价函数来讲,其实自己是个凸优化问题,因此局部最小值即为全局最小值!

换个思路来理解,好比,你如今站在山上某一点,你须要下山,到达山底(即须要找到最小值点)<br> 在梯度降低算法中,你要作的就是,环顾四周,找到一个方向,往下走一步,而后再从新查找方向,往下走一步,以此循环,直到到达山底。<br> 上述场景中,影响到达山底的因素有两个,一个是方向,另一个是步长。<br> 要想能快速到底山底,咱们首先须要保证每步走的都是最陡的方向,而后步子迈大点。 而最陡的方向,即为梯度,又由于是找最小值,因此得沿着负梯度的方向,这就是梯度降低法

下面,咱们正式说下<br> 梯度降低法的基本结构(最小化J(\theta)) (下面表述中的k表示第几回迭代)<br>

  1. 选择一个初始点,即选择一组参数\theta(\theta_1,\theta_2,\theta_3,......\theta_n)
  2. 选取搜索方向d_k = -g(\theta_k),使得函数降低最快
  3. 决定步长\alpha_k,使得J(\theta_k +\alpha_kd_k)对于\alpha_k >= 0最小化,构建\theta_{k+1} = \theta_k + \alpha_kd_k
  4. 能够开始时设置一个阈值\epsilon,若是 \Arrowvert d_k \Arrowvert <=\epsilon,则中止迭代,输出解\theta_{k+1},不然继续重复迭代。 固然咱们也能够直接设置迭代次数。<br><br> 须要注意下,上述中的\theta_k 指的是第k次迭代时的一组参数,即(\theta_1,\theta_2,\theta_3,......\theta_n)_k

下面说下,梯度降低中的三种方式,即:批量梯度降低,随机梯度降低和小批量梯度降低

批量梯度降低

批量梯度降低,其实就是在每次迭代中,在更新一组参数\theta(\theta_1,\theta_2,\theta_3,......\theta_n)中的任意一个时,都须要对整个样本的代价函数J(\theta) 求对应梯度 <br> 他的优势是 容易获得最优解,可是因为每次都须要考虑全部样本,因此速度很慢

下面看下具体数学表示

对于某次迭代

\begin{align*}
\theta_j &:= {\theta_j} - \alpha\frac{\partial}{\partial\theta_j}J(\theta)  \\
&:=\theta_j -\alpha\frac{\partial}{\partial\theta_j}\frac{1}{2m}\sum_ {i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)})^2 \\
&:= {\theta_j} -\alpha\frac{1}{m}\sum_ {i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)})x_j^{(i)} 
\end{align*}

其中,j = 0,1,2,3,...n,即特征个数

进行向量化后,对于每次迭代

\theta := \theta - \alpha\frac{1}{m}X^T(X\theta - y)

随机梯度降低

随机梯度降低,其实就是在每次迭代中,在更新一组参数\theta(\theta_1,\theta_2,\theta_3,......\theta_n)中的任意一个时,只须要找一个样本求对应梯度,进行更新。 他的优势是 迭代速度快,可是不必定每次都朝着收敛的方向
具体数学表示为:

\theta_j := \theta_j - \alpha(h_{\theta}(x^{(i)}) - y^{(i)})x_j^{(i)}

小批量梯度降低

小批量梯度降低,其实就是在每次迭代中,在更新一组参数\theta(\theta_1,\theta_2,\theta_3,......\theta_n)中的任意一个时,找一部分样本求对应梯度,进行更新。

\theta_j := {\theta_j} -\alpha\frac{1}{64}\sum_ {k = i}^{i+63}(h_{\theta}(x^{(k)}) - y^{(k)})x_j^{(k)}

小批量梯度降低 其实就是上述两种方法的权衡,实际应用中,大部分也都用此算法

学习率(步长)

梯度降低法中有两个因素,一个是方向,即梯度,另一个就是学习率\alpha,也就是步长。

若是学习率太小,则达到收敛(也就是近似接近于最小值)所须要的迭代次数会很是高。 学习率过大,则可能会越过局部最小值点,致使没法收敛

欢迎关注个人我的公众号 AI计算机视觉工坊,本公众号不按期推送机器学习,深度学习,计算机视觉等相关文章,欢迎你们和我一块儿学习,交流。

相关文章
相关标签/搜索