这个系列是我学习coursera上《机器学习》课程的笔记,边学边练。上面有一些习题,课程要求用Octave(或Matlab)完成,但是这两个软件太强大,掩盖了很多细节,而且我写Octave代码的时候,总有种支离破碎的感觉,最后还是用C#去实现了,果然不适合当科学家,还是老老实实作码农吧。
界面使用WPF,我还自己写了个做图表的库,本来准备好好写写的,但是真的是太烦,特别是API的设计,因为是第一次设计,各种问题,自己用着都觉得翔气逼人。。不过作为演示还是可以的,勿喷。。。
一、线性回归
1.理论说明:
线性回归:Wiki上说:在统计学中,线性回归是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。
说白了,就是给你一大堆点,点由两个变量(先只考虑一元线性回归)决定;观察后,认为这两个变量应该是线性关系,于是就根据这堆点找出这个线性关系。
对于线性回归,有公式可以直接套,这里换种思路。
假设回归的函数为h(x) = a*x + b,这个是假设函数;回归的目的就是使假设函数靠谱,即对于测试数据(x1,y1),把x1代入假设函数,算出h(y1),然后h(x1)和y1越接近越好,两者的差距可以用( h(x1) - y1 )2来衡量。对于所有测试数据,就是求个和:
这个求和的式子就是一元线性回归的cost function(不知要怎么翻译),θ代指参数(这里是θ0是a,θ1是b),cost函数是与参数有关的函数,和x、y无关(这话要好好理解一下)。前面的1/2是为了以后求导方便,对结果没有影响(也可以接着除以测试数据的个数m,即前面的系数为1/2m);上标i表示第i个测试数据。cost函数表征了假设的函数与实际数据的偏差。要使偏差最小,问题最终转化为最小化cost函数。
看到这里,如