【实战演练】机器学习系列05-浅谈线性回归与梯度下降算法

上一篇介绍了机器学习的一些基本概念,其中有感知机与线性回归算法的介绍。在介绍中,应该令人最不可思议的就是,为啥这样的一堆

y = x1*w1+x2*w2+x3*w3.....+xn*wn,通过机器学习,最终可以拟合出正确的模型呢?

其实机器学习,搭建了人工神经网络,结合线性回归方程与梯度下降算法,通过不停的输入训练数据,回顾计算结果,调整计算参数,最终才能达到目标。我们先从基本概念讲起:


1、瞎猜方程解

假设现在有y = ax,我们知道x=10的时候,y=35。那么,怎么计算常数a呢?我们可以靠瞎猜来尝试。

a)例如先将a=3,然后代入测试。x*a=10*3=30,而y应该是35,所以明显a偏小了。

b)因为a偏小,我们将a变为4,代入再次测试,x*a=10*4=40,而y是35,所以明显a偏大了。

c)a=3偏小,a=4偏大,我们拿个a=3.5平均值试试,结果发现x*a=10*3.5=35,y=35,撞中了。

当然现实y可能不是35整,例如是38,那么a可能要多撞很多次。


2、推广到多组数据的情况

按照上面的思路,其实只要有足够的数据(足够的x、y对应数据),我们是可以撞得出方程解。

例如下面的一堆散点,其实页可以按照上面那样撞,把a撞出来。

当然,我们知道2点可以确定一条直线,所以,也可以随便选2组(x,y),然后求解二元一次方程,得出1条直线。对于不同的2组(x,y),可以求解出N条不同的直线。

1001.jpg


直线可以是这样

1002.jpg

也可以是这样

1003.jpg

当然也可以是这样

1004.jpg

那么,有没有什么评价体系,可以评价上面的所有曲线,那一条对于上面所有的散点,拟合度最佳呢?(即采用这条方程,输入x计算出来的y,计算出来误差最小)

最理想的方法,选定了1条方程,对每个x求解对应的y值(假设称y'),而每个x对应的实际y值,减去y‘,然后对所有的差值进行合计(∑|y-y'|),哪条直线方程的合计差值最小,哪条就是拟合度最高的方程。

而由于y’可能大于或者小于实际值y,所以差值会出现正负,所以使用了绝对值来计算,但是这样会对实际计算提高难度,因此,一般使用差值的平方进行计算,平方之后都为正值,就不存在符号的问题了。

将实际值与计算值的差值取平方,然后求和,就是评估拟合度的核心,结果越小越好。(这个就是损失函

1005.jpg

如果把x代入y,则会有如下公式

1006.jpg

值得注意的是,这里从i到n的x与y,都只是同一个影响因素不同取值而已。如果拿房价来举例,如果房屋面积拿x来表示,那么这里的x1,x2,x3,都只是不同的面积的大小。

但是房价肯定不止面积一个影响因素,肯定还有其他影响因素,例如地段、楼龄、城市、是否带电梯等,那么还需要其他种类的x表示,而每个种类的x也有x1,x2~xn的数据,因此,我们按照如下记数。

1007.jpg

推广到m的情况,则可以记作

1008.jpg

由于这样记数很复杂,所以可以使用矩阵来进行记数。

1009.jpg

同理,无论有多少种影响因素,核心都是求损失函数最小值


3、损失函数求最小值

1010.jpg

对于损失函数,我们看到是一个关于x的二次方程,所以其实就是一条抛物线。

1011.jpg

在高中数学里面学过,对f(x)求导(记作f'(x)),求导的结果就是某个x值的点,与曲线相切的直线的斜率。

而我们观察曲线的图形,可以看到,当f(x)最小的时候,就是在最低点,而最低点的斜率是等于0的。

因此,如果a与b都知道,其实现在要求f'(x)=0,就是直接利用求导的公式,将关于x的二次方程变为一次方程,并且结果等于0,就可以解出确定的x值,并且将求得的x值导入f(x)公式后,算出的f(x)值就是整个函数的最小值。这是高中数学里面出题方式与解题思路。

然而,现在情况有点不同,现在我们的a与b都是未知数,而反而我们手上有很多的x与对应的y的数据。那么有没有办法可以从而求出a与b呢?

答案是否定的。因为我们手上的数据x,计算出来的y',是不相等的。所以f(x)永远不可能等于0,并且例如你代入2个确定的x,算出来2个确定的y',然后通过f(x)=0的两条等式,就算出a与b的确定值,但是代入第三个x,代入计算出来的a、b确定值,再次计算,又发现y与y'不相等了,所以是不能这样算出确定解的。

那么,怎样才能计算出最小值呢,其实与上面思想一样,那就是求导。这就涉及高等数学的内容,求偏导,以及微积分里面的“最小二乘法”。

再次看上面的损失函数,其实x,y我们有数据源,所以它们变成了常量,而a与b才是新的变量,因此,我们需要对a与b分表作为自变量来求导,这就是求偏导。

经过求导的公式计算,最小二乘法最终是可以把f(x)对a的求导与f(x)对b的求导推导出来一个公式的:

1003.png

1004.png

spacer.gif1002.png

那么其实a与b,在给予一堆x与y的数据的前提下,是可以计算出相对的确定解的。我们来做个实际一点的习题。

假设广告费支出x,销售额为y,它们对应关系如下。

x 2 4 5 6 8
y 30 40 60 50 70

求线性归回方程。

我们按照公式进行计算。

x平均=(2+4+5+6+8)/5=5

y平均=(30+40+60+50+70)/5=50

x求和=25

y求和=250

x平方求和=2*2+4*4+5*5+6*6+8*8=145

x*y求和=2*30+4*40+5*60+6*50+8*70=1380

假设y=ax+b,代入上述最小二乘法公式,a=(1380-125)/(145-125)=6.5,b=50-6.5*5=17.5

那么拟合的线性回归方程就是y=6.5x+17.5

所以根据上面的最小二乘法,只要样本数量充足,其实是可以算出使损失函数最小的拟合曲线的。


4、神经网络与后向传播

人的神经系统是有神经网络的,通过树突去感知,通过轴突传输神经信号到大脑。

人工智能专家,从这里得到启发,开始尝试模仿人的神经系统,构建机器的人工神经网络。

10004.png

通过不同的输入,乘以不同的权重,得出最后的output。

10005.png

10010.png

根据上面最小二乘法的原则,需要f(x)最小,就要对f(x)求导,求f'(x)。注意此时x全都是常量,所有的ω都是变量(可以理解为ω1就是x,ω2就是y,ω3就是z等,需要分别求偏导),因此对f(x)求导,就是需要对所有ω求偏导。根据数学的高等数学的链式法则

10011.png

猜你喜欢

转载自blog.51cto.com/14423403/2420249
今日推荐