关于梯度下降算法的理解

最近在看斯坦福大学的机器学习公开课,看了第二节课,看完就已经迷糊了,都没怎么看懂,然后我搜了一下那节课讲的内容,发现原来讲的是线性回归,梯度下降还有正规方程组三个概念。

这里我讲一下梯度下降的理解。

以一个例子来说明,给定一组x0,x1还有y,我们要求一个函数h(x)=w0x0+w1x1;求出两个参数w0,w1,使之拟合的更好。

然后就有一个loss function   ,这个拟合的更好,从Loss function来看,就是Ew的值最小。

求这个w0与w1的过程就是不断的迭代的过程,拿上一次迭代的w0,w1来进行本次的迭代,然后迭代用的方程就是

下面说一下批梯度下降与随机梯度下降的区别,拿过程来说,就是梯度下降有一个迭代过程,每个迭代过程都有实例。然后批梯度下降的迭代过程就是对一组样本中的所育与实例进行迭代,随机梯度下降就是对一组样本中的部分实例进行迭代。

/*
* pi梯度下降实验:
* 训练集输入为矩阵:
* 1,4
* 2,5
* 5,1
* 4,2
* 输出结果为:
* 19
* 26
* 19
* 20
* 需要参数为theta:
* ?
* ?
*
* 目标函数:y=theta0*x0+theta1*x1;
*
*
* */
#include<iostream>
using namespace std;
int main()
{
	double matrix[4][2] = { { 1, 4 }, { 2, 5 }, { 5, 1 }, { 4, 2 } };
	double result[4] = { 19, 26, 19, 20 };
	double w[2] = { 0, 0 };//初始为零向量  
	double loss = 10.0;
	for (int i = 0; i < 100; i++)
	{
		double sum0 = 0.0;
		double sum1 = 0.0;
		for (int j = 0; j < 4; j++)
		{
			sum0 += (result[j] - (w[0] * matrix[j][0] + w[1] * matrix[j][1]))*matrix[j][0];
			sum1 += (result[j] - (w[0] * matrix[j][0] + w[1] * matrix[j][1]))*matrix[j][1];
		}
		w[0] = w[0] + 0.01*sum0;
		w[1] = w[1] + 0.01*sum1;
		loss = 0;
		for (int j = 0; j<4; j++)
		{
			double sum = 0;
			for (int k = 0; k<2; k++)
			{
				sum += matrix[j][k] * w[k];
			}
			loss += (sum - result[j])*(sum - result[j]);
		}
		loss /= 4.0;
		printf("%lf\n", loss);
	}
	cout << w[0] << " " << w[1] << endl;
}


参考:斯坦福机器学习讲义+视频公开课

            看的别人的博客    http://blog.csdn.net/crcr/article/details/39481057


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值