资源简介
梯度下降C++的简单实现,没有做优化,包含源码,可执行程序以及测试集、训练集和结果。
代码片段和文件信息
/*
*@AUTHOR: Foolment
*@DATE: 2013-3-25
*@DESCRIBE: Implement the algorithm of gradient descent.
*/
#include
#include
#include
#include
#include
#include
using namespace std;
#define _TRAIN_FILE_NAME “train.csv“ //训练集文件名
#define _TEST_FILE_NAME “test.csv“ //测试集文件名
#define _OUTPUT_FILE_NAME “output.csv“ //输出文件名
#define _CUT_OFF_CHAR ‘‘ //读入文件分隔符
const double __ALPHA = 0.001; //步长
const int _DIMENSION = 47; //向量维度,第一维为1
const int _TRAIN_FILE_ROW = 9127; //训练集数据行数,包括第一行
const int _TEST_FILE_ROW = 6085; //测试集数据行数,包括第一行
const int _ITERATIONS = 10000; //迭代次数
const int _TRAIN_ROW = _TRAIN_FILE_ROW - 1; //实际训练集数据行数,去掉第一行
const int _TEST_ROW = _TEST_FILE_ROW - 1; //实际测试集数据行数,去掉第一行
double TrainData[_TRAIN_ROW][_DIMENSION]; //存储训练集二维数组
double Y[_TRAIN_ROW]; //存储训练集label向量,训练集的结果
double Theta[_DIMENSION]; //预测函数的系数theta,梯度下降要求的向量
double ThetaTemp[_DIMENSION]; //临时theta,保护每一次迭代时所有theta是同时更新
double Derivative[_DIMENSION]; //偏导数(这里用数组的原因是为了以后的优化)
double TestData[_TEST_ROW][_DIMENSION]; //测试集数据
double Result[_TEST_ROW]; //存储预测结果
void readTrainData(); //读入训练集数据
void readTestData(); //读入测试集数据
void gradientDescent(); //梯度下降算法
double getPartialDerivative(int); //计算偏导数的值
double H(int double[][_DIMENSION]); //求函数值
void predict(); //预测测试集
void outputResult(); //输出结果
int main()
{
memset(Theta 0 sizeof(Theta));
readTrainData();
readTestData();
gradientDescent();
predict();
outputResult();
system(“pause“);
return 0;
}
void readTrainData()
{
ifstream fin;
fin.open(_TRAIN_FILE_NAME);
string str;
const char* cstr;
double n;
//跳过第一行
getline(fin str);
for (int i = 0; i < _TRAIN_ROW; i++)
{
TrainData[i][0] = 1;
for (int j = 0; j < _DIMENSION; j++)
{
if (j == _DIMENSION - 1)
getline(fin str);
else
getline(fin str _CUT_OFF_CHAR);
cstr = str.c_str();
n = atof(cstr);
if (j == 0)
{
Y[i] = n;
}
else
{
TrainData[i][j] = n;
}
}
}
fin.close();
}
void readTestData()
{
ifstream fin;
fin.open(_TEST_FILE_NAME);
string str;
const char* cstr;
double n;
//跳过第一行
getline(fin str);
for (int i = 0; i < _TEST_ROW; i++)
{
TestData[i][0] = 1;
for (int j = 1; j < _DIMENSION; j++)
{
if (j == _DIMENSION - 1)
getline(fin str);
else
getline(fin str _CUT_OFF_CHAR);
cstr = str.c_str();
n = atof(cstr);
TestData[i][j] = n;
}
}
fin.close();
}
void gradientDescent()
{
for (int i = 0; i < _ITERATIONS; i++)
{
for (int j = 0; j < _DIMENSION; j++)
{
Derivative[j] = getPartialDerivative(j);
ThetaTemp[j] = Theta[j] - __ALPHA * Derivative[j];
}
for (int j = 0; j < _DIMENSION; j++)
{
Theta[j] = ThetaTemp[j];
}
}
}
double getPartialDerivative(int index)
{
double sum = 0;
for (int
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 62209 2013-03-27 12:08 output.csv
文件 1448365 2013-03-23 14:53 test.csv
文件 2186370 2013-03-23 14:53 train.csv
文件 4031 2013-03-27 12:44 main.cpp
文件 58870 2013-03-27 11:46 main.exe
----------- --------- ---------- ----- ----
3759845 5
- 上一篇:操作系统—页面置换算法C++实现
- 下一篇:C++ 教学管理系统
相关资源
- 操作系统—页面置换算法C++实现
- VC6.0进程调度算法实现,作业调度 有
- sart算法重建程序c++
- c++写的fcm算法程序
- (LSB算法)数字水印的嵌入和提取V
- 数据结构课程设计(C++代码+报告)
- 自编八皇后问题递归、非递归算法
- 《算法珠玑》Java版本 一个最精简的题
- 数据结构与算法分析 C++语言描述 第二
- MOPSO多目标粒子群优化算法c++实现内附
- 银行家算法c语言实现+实验报告
- C语言实现LZ77压缩算法
- 数据结构与算法分析(C++版)张铭译
- TSP 蚁群算法 MFC实现
- 银行家算法 mfc 含源代码 界面 操作系
- C++数字图像处理典型算法及实现--图像
- 密码学:分组密码DES算法C语言版
- 多边形扫描转换算法
- 计算机图形学多边形种子填充算法
- 数据结构与算法分析:C语言描述(原书
- 银行家算法 死锁避免 可视化 MFC
- 经典的分形入门程序-Koch曲线的递归算
- Hash算法之SHA1实现c++
- Bezier曲线曲面算法实现代码
- leetcode算法题答案PDF
- jbig二值图像压缩算法编码实现
- svm算法源代码VC++实现
- (LSB算法)数字水印的VC++实现
- C语言经典算法100例.pdf
- C++二维基本几何变换算法
评论
共有 条评论