机器学习实战中这一章总的来说还算好理解,统计学习方法中没有这一章,因此我对数学推导部分进行简述。
首先要理解回归这一章的目的是在做什么。之前的算法做的事情是分类,学习这一系列数据的各项特征和对应的分类结果,大概明确具有怎样的特征可以分得怎样的结果,据此进行分类。
而回归系数这一章想解决的情况是,所有数据的结果不是二项分布的1/-1两种,而是一系列可能不同的数值,那么我们现在就想要找到特征值和结果之间的关系。比如说,一个小孩子有3个糖,5个孩子15个,3个孩子9个,我们能一眼看出规律似乎是平均每个孩子3个糖。根据不同的输入:孩子个数,预测对应的结果:孩子人数*3 块糖。
而当这些数据散点分布在xy轴上时,我们发现它们可能很难用一条直线进行拟合,于是采取了近似拟合的手法。如何近似拟合结果最佳呢?预测函数为f(x)=k*x+b中,对应所有的数据点x,所预测f(x)-y(x)差值的平方和最低,则认为是最佳回归曲线,其中,k和b被认为是回归系数,也就是机器学习中的w。注意书中的w是两项,所有的数据点也是两项,其中一项为1,这一项是与b相乘,即常数项。在本章节中通过这样的方法将常数项考虑进去,实际问题中可能仅给出一项x的数值,因此使用时需要先进行处理。
利用矩阵,不难写出所有预测值与真实结果差值平方之和的结果,对其求导取值为0,求得此时的w公式,这里属于矩阵学习,我推导的时候发现求导结果中少了-2,但由于值为0时为极值,故书中省略不提亦可。小提醒:如果有人也想自己推导的话,建立求导从原函数公式来,求导后再化成矩阵形式,不要直接对平方和的矩阵写法求导,会引入很大的困扰。特别是x的逆矩阵是因为这里的x由两项构成,一项是我们f(x)中的x,一项是1,所以它的逆是表示将2*1的行列式转化为1*2 的形式,与X的逆矩阵没有关系,X是指所有x的集合。
下面来看书中源代码的各个函数:
loadDataSet(fileName) 函数和之前的一样,读取文件,分别储存数据的特征及结果。
standRegres(xArr,yArr) 函数则是根据输入的一系列x(有两项值,分别和k和b乘的两项)和对应的结果y值,输出最佳预测回归系数ws,即包括k和b。在测试中,我们根据输出的回归系数乘以ws,则能得到一系列预测的y值,与实际y值可以做误差平方和进行估计。