批量梯度下降算法和随机梯度下降算法的代码实现
2016-03-07 20:59
477 查看
批量梯度下降算法和随机梯度下降算法的代码实现
随机梯度下降和批量梯度下降都是梯度下降方法的一种,都是通过求偏导的方式求参数的最优解。批量梯度下降算法:,。是通过对每一个样本求偏导,然后挨个更新。(对于大样本的实验,这种方法效率太低),而随机梯度下降算法则是从其中的所有样本中取出部分样本求偏导,对参数进行更新。
随机梯度下降和批量梯度下降都是梯度下降方法的一种,都是通过求偏导的方式求参数的最优解。批量梯度下降算法:,。是通过对每一个样本求偏导,然后挨个更新。(对于大样本的实验,这种方法效率太低),而随机梯度下降算法则是从其中的所有样本中取出部分样本求偏导,对参数进行更新。
#include "stdio.h" #include<iostream> using namespace std; void main() { float matrix[4][2] = { { 1, 4 }, { 2, 5 }, { 5, 1 }, { 4, 2 } }; float result[4] = { 19, 26, 19, 20 }; float theta[2] = { 2, 5 }; float learning_rate = 0.001; float loss = 100.0; for (int i = 1; i<500 && loss>0.001; i++) { float error_sum[2] = { 0.0, 0.0 }; for (int j = 0; j < 4; ++j) { float h = 0.0; for (int k = 0; k < 2; ++k) { h += matrix[j][k] * theta[k]; } for (int k = 0; k < 2; ++k) { error_sum[k] += (result[j] - h)*matrix[j][k]; } } for (int k = 0; k < 2; ++k) { theta[k] += error_sum[k] * learning_rate; } cout << "theta[2]= " << theta[0] << "," << theta[1] << endl; float loss = 0.0; for (int j = 0; j < 4; ++j) { float h = 0.0; for (int k = 0; k < 2; ++k) { h += matrix[j][k] * theta[k]; } loss += (result[j] - h)*(result[j] - h); } cout << "error of this algorithms is" << loss << endl; } system("pause"); }
相关文章推荐
- 3.5 java基础总结日期相关类①Date②Calender
- 228. Summary Ranges leetCode[Java]
- python 系列之 - 异常处理
- C++ STL--stack/queue 的使用方法
- [Java开发之路](18)关于Class.getResource和ClassLoader.getResource的路径问题
- 白话Spring(基础篇)---声明式事务(2)
- 关于C++的问题
- Java8 十大新特性
- 二.djangoECHO项目的建立
- 【转】Java中如何遍历Map对象的4种方法
- 常用java正则表达式
- 3.3 java基础总结①异常②自定义异常
- ubuntu中各个版本java的安装
- Spring定时器的简单使用
- Android Studio将Eclipse的项目作为module的依赖库
- win8安装python2.7.msi出错的解决方法
- 1102. Invert a Binary Tree (25)
- LeetCode : Generate Parentheses [java]
- python的性能优化
- thinking in java 04