标准方程法
简单介绍:
机器学习常用的减小代价函数的值的方法是梯度下降法,除此之外,还有一个常用的方法是标准方程法。
让我们看看下面这个例子:
x0是偏置值,都为1;x1是房子面积;x2,x3,x4是房间卧室数量和房屋年龄等特征;y是房子的价格。
然后把这些数值用X矩阵表示出来,w是这几个参数的权值,y就是价格。那么该如何用函数图像表示呢?
这里用到的方法就是标准方程法。
首先还是用最小二乘法作为代价函数,但是参数传进去的时候有点不一样。这里的参数是矩阵,所以其中一个要变为转置矩阵,这样相乘就会得到一个具体的数值。接下来也是和梯度下降法一样,让这个值对w进行求导。
先展开:再化简:
因为这是分母布局,所以求导的结果为:
这样就可以计算w的值:
而w是权值,把w求解出来,那么就可以进行图像的绘制,问题也就解决了。但是,这里有一个问题,就是w是通过乘上一个逆矩阵然后才得到一个具体的数值,所以会存在矩阵不可逆的情况,比如:
第一种情况知道的两个特征其实就是一个特征,即多重共线性,第二种情况就是特征数据比样本数据还多,这些情况是不能使用标准方程法的。
那么我们来比较一下梯度下降法和标准方程法:
可以看到,梯度下降法是当很多特征时也可以很好计算,但是不一定能得到全局最优解,大多数情况是局部最优解,适用于深度学习需要多个特征;标准方程法是直接得到全局最优解,但是特征较多时耗费时间很长,甚至计算不出,所以适用于回归问题这种特征较小的情况。
python实现标准方程法:
导入数据,看看数据的样子
程序主体部分:
结果,我们可以看到ws有两个值,对应X_data的两列数据,多少列就有多少个值
最终结果和梯度下降法的结果是一样的。
特征缩放,交叉验证法
接下来我们说一下回归中的一些基础知识,首先是特征缩放。举个例子:
如果不进行数据的处理,那么可以想象会得到一个特别长又窄的图像,会很影响梯度下降法的准确性。所以要用到数据归一化来特征缩放:
或者使用均值标准化:
这样就可以进行特征缩放,避免出现特征数量相差较大的情况。
交叉验证法
当我们的数据比较少的时候,我们不管怎么划分训练集和测试集,结果都不太理想,这时候就要用到交叉验证法。不管数据多少都统一分为十份,然后先取第一份数据作为测试集,剩下的数据作为训练集,然后得到一个误差,接着取第二份数据作为测试集,剩下数据作为训练集,然后得到一个误差,以此类推得到10个误差,然后再求这十个误差的平均值。
当然不一定分为10份,也可以20份等等,也不一定要只取一份数据作为测试集,可以取多份数据作为测试集,然后剩下的作为训练集即可。本质是让所有的数据都作为训练集和测试集就可。
过拟合,正则化
我们先来了解拟合的三种情况:
我们的目的是得到正确拟合的结果,为什么不是过拟合呢?看起来似乎过拟合比较好,其实不然,因为这里的过拟合是训练集的情况,到测试集的时候就不会有这种效果,而是非常差,过拟合也是机器学习中比较常见的一种情况,那么怎么解决呢,可以减少特征,或者增加数据量,或者正则化。
正则化是在原来的基础上加上一点变化:
这里的λ 是正则参数。第一种是参数求平方再累加,第二种是绝对值累加。