您的位置:首页 > 其它

机器学习 -- 最小二乘法与梯度下降法

2016-05-13 14:32 323 查看
最小二乘法:
设方程f(x,y)为损失函数,分别对x和y求偏导数,联立可求得回归直线方程。得到的是一个全局最优解。

梯度下降法:
对于线性不可分情况,需要使用梯度下降(或上升)求极值。大致步骤为:
对于起始点x,求导得到d(x)。
x需要移动的方向为的反方向,移动距离为定长len * (d(x)),因此这个步骤为x=x-len*(d(x))。
对比移动前后的函数值y,最够接近(设误差为0.00001)时,此时的y可以看做是最值。
迭代,直到y的差值小于误差为止。

实现代码 (C#):

void Main()
{
var Fx = new Func<double,double>((double d)=>{
return d * d - d + 4;
});

var deviation = 0.00001;
var len = 0.5;
var x=0.0;
var y0= Fx(x);
var y1=0.0;
while (true)
{
x -= len * Calculus(Fx, x);
y1 = Fx(x);
if (Math.Abs(y1-y0)<deviation)
{
break;
}
y0=y1;
}

Console.WriteLine("Min: {0} , x = {1}" , y1,x);
}

static double Calculus(Func<double,double> func, double x)
{
//the lesser the closer
var delta = 0.000000001;
return (func(x+delta)-func(x))/delta;
}


本例中的求导简单的使用了求导的定义:f(x)' = [f(x+h)-f(x)]/h ,其中h设为0.00000001。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: