?E(w,b)?wj?E(w,b)?b=2∑i=12[(w1x1i+w2x2i+b)?yi]xji=[(w1x1+w2x21+b)?y1]xj1+[(w1x2+w2x22+b)?y2]xj2=2∑i=12[(w1x1i+w2x2i+b)?yi]=[(w1x1+w2x21+b)?y1]+[(w1x2+w2x22+b)?y2]
?E(w,b)?wj=2∑i=12[(w1xi1+w2xi2+b)?yi]xij=[(w1x1+w2x12+b)?y1]x1j+[(w1x2+w2x22+b)?y2]x2j?E(w,b)?b=2∑i=12[(w1xi1+w2xi2+b)?yi]=[(w1x1+w2x12+b)?y1]+[(w1x2+w2x22+b)?y2]
将点(2,3),(5,8)(2,3),(5,8)带入方程,可以得到3个方程,
2b+7w1+29w2=117b+29w1+133w2=4629b+133w1+641w2=212
2b+7w1+29w2=117b+29w1+133w2=4629b+133w1+641w2=212
联立这三个方程求解,发现有无穷多的解,只能得到3w1+21w2=53w1+21w2=5,这三个方程是线性相关的,故没有唯一解 。
??该方法通过求偏导 , 再联立方程求解,比较复杂,看着也很不美观 。那么有没有更加方便的方法呢?
3.2 最小二乘法
?? 其实求解该最优化问题(平方和的最小值)一般会采用最小二乘法(其实最小二乘法和求偏导再联立方程求解的方法无本质区别,求偏导也是最小二乘法,只是这里介绍最小二乘的矩阵形式而已) 。最小二乘法(least squares),从英文名非常容易想到,该方法就是求解平方和的最小值的方法 。
??可以将误差函数以矩阵的表示(NN个点,最高MM阶)为:
∥Xw?y∥2
‖Xw?y‖2
其中,把偏置bb融合到了参数ww中,
w={b,w1,w2,...,wM}
w={b,w1,w2,...,wM}
XX则表示输入矩阵,
??????11...1x1x2...xNx21x22...x2N............xM1xM2...xMN??????
[1x1x12...x1M1x2x22...x2M...............1xNxN2...xNM]
yy则表示标注向量,
y={y1,y2,...,yN}T
y={y1,y2,...,yN}T
因此,最优化问题可以重新表示为
minw∥Xw?y∥2
minw‖Xw?y‖2
对其求导,
?∥Xw?y∥2?w=?(Xw?y)T(Xw?y)?w=?(wTXT?yT)(Xw?y)?w=?(wTXTXw?yTXw?wTXTy+yTy)?w
?‖Xw?y‖2?w=?(Xw?y)T(Xw?y)?w=?(wTXT?yT)(Xw?y)?w=?(wTXTXw?yTXw?wTXTy+yTy)?w
在继续对其求导之前,需要先补充一些矩阵求导的先验知识(常见的一些矩阵求导公式可以参见转载的博客),如下:
?xTa?x=a?ax?x=aT?xTA?x=Ax+ATx
?xTa?x=a?ax?x=aT?xTA?x=Ax+ATx
根据上面的矩阵求导规则,继续进行损失函数的求导
?∥Xw?y∥2?w=?(wTXTXw?yTXw?wTXTy+yTy)?w=XTXw+(XTX)Tw?(yTX)T?XTy=2XTXw?2XTy
?‖Xw?y‖2?w=?(wTXTXw?yTXw?wTXTy+yTy)?w=XTXw+(XTX)Tw?(yTX)T?XTy=2XTXw?2XTy
其中XTXw=(XTX)TwXTXw=(XTX)Tw.令求导结果等于0 , 即可以求导问题的最小值 。
2XTXw?2XTy=0w=(XTX)?1XTy
2XTXw?2XTy=0w=(XTX)?1XTy
??再利用最小二乘法的矩阵形式对前面的例子进行求解,用二阶多项式拟合即两个点(2,3),(5,8)(2,3),(5,8) 。
表示输入矩阵 XX和标签向量yy
X=[1125425]y=[38]T
X=[1241525]y=[38]T
计算XTXXTX
XTX=???272972913329133641???
【python对函数求偏导 python partial偏函数及用法】XTX=[272972913329133641]
矩阵求逆,再做矩阵乘法运算
但 XTXXTX不可逆,故无唯一解 。
??关于矩阵的逆是否存在 , 可以通过判断矩阵的行列式是否为0(det(A)=?0det(A)=?0 来判断,也可以通过初等行变换,观察矩阵的行向量是否线性相关,在这个例子下,矩阵不可逆 , 故有无穷多解 。但如果新增一个点(4,7)(4,7),则就可以解了 。
??其实这和数据集的点数和选择的阶数有关,如果点数小于阶数则会出现无穷解的情况,如果点数等于阶数 , 那么刚好有解可以完全拟合所有数据点,如果点数大于阶数,则会求的近似解 。
??那么对于点数小于阶数的情况,如何求解?在python的多项式拟合函数中是可以拟合的,而且效果不错 , 具体算法不是很了解,可以想办法参考python的ployfit()函数的实现 。
4. 拟合阶数的选择
推荐阅读
- 学html5用什么书比较好,html5哪本书好
- 外卖新人如何做推广的,外卖需要怎么去推广
- ios主屏幕字体怎么换,苹果手机怎样在主屏幕上设置字体
- 营销如何组建团队,组建营销团队方案范文
- p0flinux命令 linux floppy
- 手机视频信息费是什么,手机视频信息费是什么意思
- jquery中局部刷新,javascript局部刷新
- 微信如何开启视频直播权限,微信视频怎么开直播美颜功能
- 包含哪些软件是vb.net的词条