机器学习 -- 最小二乘法与梯度下降法
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#):
本例中的求导简单的使用了求导的定义:f(x)' = [f(x+h)-f(x)]/h ,其中h设为0.00000001。
设方程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。
相关文章推荐
- Java中 运算符 与(&)、非(~)、或(|)、异或(^)
- string类封装
- Windows操作系统下给文件夹右键命令菜单添加启动命令行的选项
- Comparable与Comparator浅析
- 使用WebRTC搭建前端视频聊天室——信令篇
- 第三方登录 分享
- leetcode记录 171. Excel Sheet Column Number
- Java并发编程:线程、进程的创建
- CodeForces 599C Day at the Beach(RMQ)
- C#模拟POST提交表单(一)--WebClient
- 海尔嫩烤箱T-3亮相CES及烘焙展 着力打造烘焙生态圈
- Log4Net使用指南
- springMVC两种方式实现多文件上传及效率比较
- 关于log4cpp
- RobotFrameWork WebService Soap接口测试 (一)
- centos7里默认python升级到2.7.11
- 重建二叉树(中后序求前序)
- unity3d消除你不想要的黄色警告
- Maven的安装和settings.xml的配置
- Android Viewpager拦截 左右滑动