吴恩达机器学习之单变量线性回归实现部分
C++实现
- 代码实现
“linear_regression.h”
//单变量线性回归模型
struct elem_var1
{double x, y; //训练集元素数据:自变量、因变量
};class var1_lin_reg
{
public:var1_lin_reg(const elem_var1* p, int size, double rate); //初始化~var1_lin_reg(); //析构double cost_fuction(); //返回当前预测方程对应代价函数的值void update(); //同时更新方程参数void find(); //最小化代价函数,找到收敛点时对应的方程参数void get_par(double &_par1, double &_par0); //获得当前方程的参数double est_val(double x); //使用拟合后的回归方程进行预测private:const elem_var1 * tran_set; //训练集int setsize; //训练集数据量double par1, par0; //单变量线性回归方程:h(x)=par1*x+par0double learn_rate; //学习速率
};
“linear_regression.cpp”
//单变量线性回归
var1_lin_reg::var1_lin_reg(const elem_var1* p, int size, double rate)
{//参数列表:训练集数组地址,训练集数据量,学习速率setsize = size; //获取训练集大小tran_set = p; //指针指向训练集数组learn_rate = rate; //设置学习速率par1 = 0; //线性回归方程参数初始化为0par0 = 0;
}var1_lin_reg::~var1_lin_reg()
{tran_set = NULL;setsize = 0;
}double var1_lin_reg::cost_fuction()
{//假设函数为h(x)=kx+bdouble hx, sum = 0;for (int i = 0;i < setsize;i++){hx = par1 * tran_set[i].x + par0;sum += (hx - tran_set[i].y)*(hx - tran_set[i].y);}return (sum / 2.0 / setsize);
}void var1_lin_reg::update()
{//两参数(par0和par1)同时更新(关键是对微分项的处理)double hx, sum0 = 0, sum1 = 0;for (int i = 0;i < setsize;i++){hx = par1 * tran_set[i].x + par0;sum0 += hx - tran_set[i].y;sum1 += (hx - tran_set[i].y)*tran_set[i].x;}sum0 = learn_rate * sum0 / (double)setsize;sum1 = learn_rate * sum1 / (double)setsize;par0 -= sum0;par1 -= sum1;
}void var1_lin_reg::find()
{//寻找代价函数最小化时对应的单变量线性回归函数的参数(代价函数收敛点)double cost_pre, cost_last;cost_pre = cost_fuction();update(); //更新参数cost_last = cost_fuction();while (cost_pre != cost_last){//寻找收敛点cost_pre = cost_last;update();cost_last = cost_fuction();}//获得假设函数最优拟合时的参数
}void var1_lin_reg::get_par(double &_par1,double &_par0)
{//获取回归方程参数_par1 = par1;_par0 = par0;
}double var1_lin_reg::est_val(double x)
{//返回预测值find(); //获得假设函数最优拟合时的参数 double hx;hx = par1 * x + par0; //计算估计值return hx;
}
“主函数部分”
#include "linear_regression.h"using namespace std;int main()
{elem_var1 transet[200];memset(transet, 0, sizeof(transet));int size;double x;double par1, par0;cout << "请输入训练集容量:";cin >> size;cout << "请输入训练集数据:" << endl;for (int i = 0;i < size;i++){cout << "数据项" << i + 1 << ": ";cin >> transet[i].x >> transet[i].y;}var1_lin_reg obj1(transet, size, 0.001);cout << "请输入待预测数据:";cin >> x;cout << "预测数据为:" << obj1.est_val(x) << endl;obj1.get_par(par1, par0);if(par0>0)cout << "h(x)=" << par1 << "*x+" << par0 << endl;else{if(par0<0)cout << "h(x)=" << par1 << "*x" << par0 << endl;elsecout << "h(x)=" << par1 << "*x" << endl;}return 0;
}
-运行结果
以吴恩达老师的ex1data1.txt数据集为例:
用octave数据可视化:
线性拟合应该还可以。。。。。。
吴恩达机器学习之单变量线性回归实现部分相关推荐
- 吴恩达机器学习2——单变量线性回归
吴恩达机器学习2--单变量线性回归 监督学习工作模式 训练集中同时给出了输入输出,即人为标注的"正确结果"喂给学习算法,得到一个函数h,h 可以根据输入的x得到一个y,因此h是x到 ...
- 吴恩达机器学习1——单变量线性回归、梯度下降
目录 吴恩达机器学习第一周 一.什么是机器学习? 二.机器学习的分类 1. 监督学习 2. 非监督学习 3. 监督学习和非监督学习的举例 三.单变量线性回归(**Linear Regression w ...
- 吴恩达机器学习之单变量线性回归理论部分
理论部分 1.方程形式 在进行数据处理过程中,有时数据图像可拟合成单变量线性函数,即 2.如何拟合 此时,我们虽知道拟合函数的形式,但如何拟合仍是个问题,怎样拟合可以最接近实际数据情况呢? 最小二乘法 ...
- 吴恩达机器学习训练1:线性回归(多变量)
吴恩达机器学习训练1:线性回归(多变量) 本小节为练习1中选做题,为多变量(多特征参数)的线性回归计算. 还是预测房价的例子,假设已经两个特征参数,分别是房子的尺寸和卧室的数量,在数据的第一列和第二列 ...
- Linear Regression 吴恩达机器学习实验一(线性回归)
Linear Regression with one variable 实验要求 """ 在这部分练习中,您将使用一个变量实现线性回归,以预测食品卡车的利润. 假设你是一 ...
- 吴恩达机器学习笔记 —— 5 多变量线性回归
http://www.cnblogs.com/xing901022/p/9321045.html 本篇主要讲的是多变量的线性回归,从表达式的构建到矩阵的表示方法,再到损失函数和梯度下降求解方法,再到特 ...
- 吴恩达机器学习ex5:正则化线性回归和方差与偏差
1.正则化线性回归 1.1.数据集的可视化 训练数据集:X表示水位变化的历史记录,y表示流出大坝的水量: 交叉验证数据集:Xval,yval: 测试数据集:Xtest,ytest: 其中,训练数据集1 ...
- 用懊悔法学习吴恩达机器学习【2】-----线性回归的梯度下降
以下英文文档皆出自课程配套笔记 课9 代价函数二 这一课时考虑使用两个参数来描述代价函数.此时等价函数是一个碗形,碗底点为最小值,将碗形用等高线表示,等高线中心就是代价函数的最小值.所以距离等高线中心 ...
- 吴恩达机器学习(六)线性回归的梯度下降
文章目录 1.先导知识 2.线性回归的梯度下降 1.先导知识 之前学习的内容: 2.线性回归的梯度下降 我们要做的是将梯度下降法应用到最小化平方差代价函数, 我们解决过的梯度下降问题之一就是它容易陷入 ...
最新文章
- 微软洪小文:制造业是最先享受AI成果的领域
- OPENCV已知内参求外参
- 如何生成表_SPSS简单操作 | 如何生成交叉表?
- python爬虫requests-Python爬虫之requests介绍
- iOS应用跳转qq指定联系人聊天
- Boost:双图bimap与mi_bidirectional地图的测试程序
- python通过内置函数测试对象类型_Python的内置函数
- ListT.Find用法学习
- 高德,百度,Google地图定位偏移以及坐标系转换
- FPGA常用FIFO简介
- 智慧树omg期末测试答案_智慧树求职omg第十五章节测试答案
- 泛函分析笔记(十七) 弱偏导数
- 断章取义:时光不负有心人
- LDO和BUCK降压稳压器对比
- 技术之路如何成长而不迷茫
- 和平精英电脑版服务器未响应,和平精英电脑版为什么卡顿 电脑版卡顿解决方法...
- 2021年江苏省高考成绩查询时间,2021年江苏高考成绩什么时候出来 公布时间
- XML中配置网易云歌手详情滑动效果
- mac壁纸文件夹没有怎么办?mac动态壁纸怎么设置
- php解析视频_【教程】php实现百度网盘视频解析