最小二乘法及算法实现
来源:互联网 发布:type3浮雕雕刻软件 编辑:程序博客网 时间:2024/06/05 11:03
最小二乘法
- 最小二乘法
- 线性函数模型
- 矩阵表达形式
- 代码
最小二乘法是一种优化方法。通过最小化误差的平方和来寻找数据的最佳函数进行匹配。
线性函数模型:
线性函数模型:
残差形式写为:
可将
e_i为样本
所以,平方损失函数可以表示为
即,使Q最小确定直线,Q可看作是以
问题转换成一个极值问题:
再对Q求偏导。
解得
矩阵表达形式
推广到一般情况下,假如有更多的模型变量
对于n个样本来说,可以用如下线性方程组表示:
将上式记为矩阵形式为:
最终形式为
最小二乘形式,可以表示为:
最优解为:
代码
/*最小二乘法的实现C++版命令行输入数据文件最后输入x得到预测的y值*/#include<iostream>#include<fstream>#include<vector>using namespace std;class LeastSquare { double b0, b1;public: LeastSquare(const vector<double>& x, const vector<double>& y) { double t1 = 0, t2 = 0, t3 = 0, t4 = 0; for (int i = 0; i<x.size(); ++i) { t1 += x[i] * x[i]; t2 += x[i]; t3 += x[i] * y[i]; t4 += y[i]; } b0 = (t1*t4 - t2*t3) / (t1*x.size() - t2*t2); // 求得 B0 b1 = (t3*x.size() - t2*t4) / (t1*x.size() - t2*t2); // 求得 B1 } double getY(const double x) const { return b0+b1*x; } void print() const { if (b1>=0) cout << "y = " << b0 << "+" << b1 << 'x' << "\n"; else cout << "y = " << b0 << "" << b1 << 'x' << "\n"; }};int main(int argc, char *argv[]){ if (argc != 2) { cout << " data.txt don't exit " << endl; return -1; } else { vector<double> x; vector<double> y; int count = 1; ifstream in(argv[1]); for (double d; in >> d; count++) if (count % 2 == 1) x.push_back(d); else y.push_back(d); LeastSquare ls(x, y); ls.print(); cout << "Input x:\n"; double x0; while (cin >> x0) { cout << "y = " << ls.getY(x0) << endl; cout << "Input x:\n"; } } int endline; cin >> endline;}
int main(int argc,char* argv[])
argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数
比如:
int main(int argc, char* argv[])
{
}
两种方法:
第一种:
无需调试的情况:
直接用dos命令进入到.exe目录下然后输入:*.exe pra1 pra2
第二种:
需要调试的情况:
i.先选择项目-〉右键-〉属性
ii.调试 -〉命令行参数
在命令行参数里面输入命令行参数即可。
需要注意的是,不需要像第一种那样样输入*.exe了。只需要输入 pra1 pra2 ,中间用空格隔开。
例如:以上实现代码,需要输入一个data.txt,输入格式是(x,y)的点值。1 02 1 3 2 0 1 1 2 2 3
阅读全文
0 0
- 最小二乘法及算法实现
- 最小二乘法及C++实现
- 最小二乘法及C语言实现
- 回归算法-最小二乘法及梯度下降
- 用C语言实现最小二乘法算法
- 【算法研究与实现】最小二乘法直线拟合
- 算法精解:最小二乘法C实现
- 【算法研究与实现】最小二乘法直线拟合
- 线性回归算法实现(最小二乘法, 梯度下降)
- 最小二乘法拟合圆公式推导及vc实现[转]
- 最小二乘法拟合直线公式推导及vc实现[转]
- 转:最小二乘法拟合圆公式推导及vc实现
- 最小二乘法拟合直线公式推导及vc实现[转]
- 最小二乘法拟合圆公式推导及vc实现
- 最小二乘法拟合圆公式推导及vc实现
- 最小二乘法拟合圆公式推导及vc实现
- 最小二乘法拟合圆公式推导及vc实现
- 最小二乘法多次曲线拟合算法
- LeetCode160. Intersection of Two Linked Lists
- 理解泰勒公式·漫画
- Android 通用流行框架大全
- Matlab:不包含边界和工具栏的figure(移除保存图片的白边)
- 文件的创建、关闭及相关指令
- 最小二乘法及算法实现
- php 去掉图片的宽度、高度设置
- 安卓Retrofit post请求 带参数
- FTM下执行full test,进入camera test卡住,稍后手机重启
- 利用TCP/UDP完成文件传输的设计和实现
- JQuery 制作文字轮播
- Redis集群
- resultType与resultMap区别
- 把Boostnote内的数据在云平台同步的方法