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

linear regreesion(线性回归)

我们将用来描述回归问题的标记如下:

m 代表训练集中实例的数量

n 代表特征的数量

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

x j ( i ) 表示特征矩阵中第 i 行的第 j 个特征,也就是第 i 个训练实例的第 j 个特征

y 代表目标变量,也就是输出变量

( x , y ) 代表训练集中的一个实例

( x ( i ) , y ( i ) ) 代表第 i 个观察实例

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

对于多变量线性回归,假设函数可以设为

h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n

为了使公式能够简化,引入 x 0 = 1 ,则假设函数变为
h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n
,进行向量化后,最终结果为
h θ ( x ) = θ T X

我们需要求出 θ ,使得对于每一个样本,带入到假设函数中,能得到对应的一个预测值,而我们的目标,是使求出的预测值尽可能的接近真实值

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

由于我们实际预测的值和真实值之间肯定会有误差,对于每个样本:

y ( i ) = θ T x ( i ) + ε ( i )
其中, y ( i ) 为当前样本实际真实值, θ T x ( i ) 为预测结果, ε ( i ) 即为预测误差

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

Y = θ T X + ε

误差 ε ( i ) 独立的并且具有相同的分布,并且服从均值为0,方差为 θ 2 正态分布
正态分布

由于误差服从正态分布,所以:

p ( ε ( i ) ) = 1 2 π σ e x p ( ε ( i ) ) 2 2 σ 2

带入得:
p ( y ( i ) x ( i ) ; θ ) = 1 2 π σ e x p ( y ( i ) θ T x ( i ) ) 2 2 σ 2

我们希望误差越接近0越好,由于误差服从均值为0的正态分布,所以对应误差越接近分布的中心处越好。我们可以近似的用对应概率 p 来表示当前正态分布的纵坐标值,则由于各个样本的误差互相独立,所以,将每个样本误差概率相乘,得总似然函数为:

L ( θ ) = i = 1 m p ( y ( i ) x ( i ) ; θ ) = i = 1 m 1 2 π σ e x p ( y ( i ) θ T x ( i ) ) 2 2 σ 2

我们的问题是希望找到合适的 θ ,与我们的数据组合后尽可能的接近真实值
所以我们需要求解上述似然函数的针对于 θ 最大值,即求解最大似然函数

由于上述似然函数中的累乘运算过于复杂,我们可以将其进行转换,变成对数似然,求加和,即:

l o g L ( θ ) = l o g i = 1 m 1 2 π σ e x p ( y ( i ) θ T x ( i ) ) 2 2 σ 2 = i = 1 m l o g ( 1 2 π σ e x p ( y ( i ) θ T x ( i ) ) 2 2 σ 2 ) = i = 1 m [ l o g ( 1 2 π σ ) + l o g ( e x p ( y ( i ) θ T x ( i ) ) 2 2 σ 2 ) ] = m l o g ( 1 2 π σ ) i = 1 m ( ( y ( i ) θ T x ( i ) ) 2 2 σ 2 ) = m l o g ( 1 2 π σ ) 1 2 σ 2 i = 1 m ( y ( i ) θ T x ( i ) ) 2

上述公式中, m , σ , y ( i ) , x ( i ) 都是已知的,只有 θ 是未知的。
所以我们的目标是 找出一组 θ ,使上述似然函数最大,即求最大似然函数。
由于只有 θ 是未知的。上述问题可以转换为,求 i = 1 m ( y ( i ) θ T x ( i ) ) 2 的最小值

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

J ( θ ) = 1 2 i = 1 m ( y ( i ) θ T x ( i ) ) 2 ( 1 / 2 便 )

进行向量化:

J ( θ ) = 1 2 ( X θ y ) T ( X θ y )

正规方程

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

θ J ( θ ) = θ ( 1 2 ( X θ y ) T ( X θ y ) ) = θ ( 1 2 ( θ T X T y T ) ( X θ y ) ) = θ ( 1 2 ( θ T X T X θ θ T X T y y T X θ + y T y ) ) = 1 2 ( 2 X T X θ X T y ( y T X ) T ) = X T X θ X T y

θ J ( θ ) = 0 ,得:
θ = ( X T X ) 1 X T y

虽然,通过正规方程,可以求得最优解,但是,在实际项目中,我们的样本数量以及每个样本的特征
数量非常大,这个时候,采用正规方程,算法的时间复杂度太高,耗时太高,甚至由于样本呢和特征过大,或者矩阵不可逆,导致无法计算。
尤其对于矩阵求逆来说更是如此。所以,一般对于样本数量和特征数量较少时可以采用此种求解方式。

对于一般情况,我们需要采用另外一种非常经典的优化算法,即
梯度下降法

梯度下降法

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

梯度下降背后的思想是:

开始时我们随机选择一组参数 θ 1 , θ 2 , θ 3 , . . . . . . θ n .计算对应代价函数,然后我们需要寻找下一组能让代价函数值下降最多的参数组合,一直迭代这个过程,直到最后代价函数值收敛,即找到一个局部最小值. 此时对应的 θ 1 , θ 2 , θ 3 , . . . . . . θ n 即为我们需要求的结果.

我们并没有尝试找出所有的 θ 参数组合,所以,不能确定我们得到的局部最小值是否是全局最小值。 但是,对于线性回归的代价函数来说,其实本身是个凸优化问题,所以局部最小值即为全局最小值!

换个思路来理解,比如,你现在站在山上某一点,你需要下山,到达山底(即需要找到最小值点)

批量梯度下降

批量梯度下降,其实就是在每次迭代中,在更新一组参数 θ θ 1 , θ 2 , θ 3 , . . . . . . θ n 中的任意一个时,都需要对整个样本的代价函数 J ( θ ) 求对应梯度
他的优点是 容易得到最优解,但是由于每次都需要考虑所有样本,所以速度很慢
下面看下具体数学表示

对于某次迭代

θ j := θ j α θ j J ( θ ) := θ j α θ j 1 2 m i = 1 m ( h θ ( x ( i ) ) y ( i ) ) 2 := θ j α 1 m i = 1 m ( h θ ( x ( i ) ) y ( i ) ) x j ( i )

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

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

θ := θ α 1 m X T ( X θ y )

随机梯度下降

随机梯度下降,其实就是在每次迭代中,在更新一组参数 θ θ 1 , θ 2 , θ 3 , . . . . . . θ n 中的任意一个时,只需要找一个样本求对应梯度,进行更新。
他的优点是 迭代速度快,但是不一定每次都朝着收敛的方向
具体数学表示为:

θ j := θ j α ( h θ ( x ( i ) ) y ( i ) ) x j ( i )

小批量梯度下降

批量梯度下降,其实就是在每次迭代中,在更新一组参数 θ θ 1 , θ 2 , θ 3 , . . . . . . θ n 中的任意一个时,找一部分样本求对应梯度,进行更新。

θ j := θ j α 1 64 k = i i + 63 ( h θ ( x ( k ) ) y ( k ) ) x j ( k )

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

学习率(步长)

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

如果学习率过小,则达到收敛(也就是近似接近于最小值)所需要的迭代次数会非常高。
学习率过大,则可能会越过局部最小值点,导致无法收敛

猜你喜欢

转载自blog.csdn.net/u010057965/article/details/80523796