最小二乘法实现C++

来源:http://blog.csdn.net/qll125596718/article/details/8248249

?
?

求a、b的值:

// Ordinary Least Square.cpp : 定义控制台应用程序的入口点。

//

?

#include
"stdafx.h"

#include
<iostream>

#include
<fstream>

#include
<vector>

using
namespace std;

?

class LeastSquare

{

????double a, b;

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];

????????}

????????a = (t3 * x.size() - t2 * t4) / (t1 * x.size() - t2 * t2);

????????b = (t1 * t4 - t2 * t3) / (t1 * x.size() - t2 * t2);

????}

?

????double getY(const
double x) const

????{

????????return a * x + b;

????}

?

????void print() const

????{

????????cout << "y = " << a << "x + " << b << endl;

????}

?

};

?

?

int _tmain(int argc, _TCHAR* argv[])

{

????if (argc != 2)

????{

????????cout << "Usage: DataFile.txt" << endl;

????????return -1;

????}

????else

????{

????????vector<double> x;

????????ifstream in(argv[1]);

????????for (double d; in >> d;)//将读取出来的数值全部存入容器X中

????????{

????????????x.push_back(d);//push_back()是把一个元素,放入这个容器的末尾,相当于末尾添加一个元素

?

????????}

????????int sz = x.size();

?

????????vector<double> y(x.begin() + sz / 2, x.end());//把余下的容器X中的元素全部放进容器Y

????????x.resize(sz / 2);//调整容器X的长度大小,超过当前size的元素删除

????????LeastSquare ls(x, y);//调用最小二乘法求a和b

????????ls.print();

?

????????cout << "Input x:\n";

????????double x0;

?

????????while (cin >> x0)

????????{

????????????cout << "y = " << ls.getY(x0) << endl;

????????????cout << "Input x:\n";

????????}

????}

????return 0;

}

?

实验模拟数据:


10


15


20


25


30


35


40


45


2000.36


2000.50


2000.72


2000.80


2001.07


2001.25


2001.48


2001.60

实验结果:

时间: 2024-10-06 01:19:09

最小二乘法实现C++的相关文章

最小二乘法的推导证明

1.附加题:推导线性最小二乘法过程 上述式子求解b 时最后一步用到求和性质,事实上 同理可证分子部分,具体请参考<计量经济学导论(第四版)Introductory Econometrics A Modern Approach Fourth Edition · 杰弗里·M·伍德里奇(Jeffrey M. Wooldridge)著>中的附录A 基本数学工具 . 2.赛马问题 问:36匹马,6条跑道,无计时器,最少几次比赛可以选出前3名? 答案是8次,思路如下: (1)把36匹马分成6组,分别进行6

Partial least squares regression(偏最小二乘法回归)

偏最小二乘法(PLS)是近年来发展起来的一种新的多元统计分析 http://en.wikipedia.org/wiki/Partial_least_squares_regression Partial least squares regression(偏最小二乘法回归),布布扣,bubuko.com

基于 移动最小二乘法(MLS) 的三维数据拟合

项目介绍: 1. 需要预测的数据: 2. 采用的权函数以及形函数: 3. 求解的形函数曲线结果: 4. 算法流程图: 5. 预测结果: x=[234 255 255 76 12];y=[162 242 176 54 55];z=[199 200 57 50 73]; 对应的预测结果为: >> MLS_Output Esti_ux = 53.3651 73.8599 54.2216 5.9668 9.0063 Esti_uy = 43.9818 77.5332 48.3499 5.2517 11

最小二乘法

            1.前言:                    a.本文中主要讲解线性最小二乘的标准形式及求解方法.                    b.在同类问题的求解方法中,RANSAC算法是另一种求解思路,它们各有优点与缺点.                     --当测量数据 x 属于高斯分布(期望为x的真值,或者说期望为0误差符合高斯分布)时,此时应选择最小二乘法求解.                        因为误差服从高斯分布的情况下, 最小二乘法等价于极

一元线性回归模型与最小二乘法及其C++实现

原文:http://blog.csdn.net/qll125596718/article/details/8248249 监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归.回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析.如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析.对于二维空间线性是一条直线:对于三维空间线性是一

最小二乘法学习一

本文主要讲解基本最小二乘法和带有约束条件的最小二乘法. 一  基本最小二乘法 最小二乘法是回归中最为基础的算法.它是对模型的输出和训练样本输出的平方误差(这里还乘以了1/2只是为了求导简化)为最小时的参数 进行学习. 特别地,对于线性模型有: 求导可得: 其中设计矩阵: %基本最小二乘法 clear all; close all; n = 50; N = 1000; x = linspace(-3,3,n)'; X = linspace(-3,3,N)'; y = x.^2 + 2*x + 3

机器学习(3)之最小二乘法的概率解释

机器学习(3)之最小二乘法的概率解释 在前面梯度下降以及正规方程组求解最优解参数Θ时,为什么选择最小二乘作为计算参数的指标,使得假设预测出的值和真正y值之间面积的平方最小化? 我们提供一组假设,证明在这组假设下最小二乘是有意义的,但是这组假设不唯一,还有其他很多方法可以证明其有意义. (1)      假设1: 假设输入与输出为线性函数关系,表示为: 其中,为误差项,这个参数可以理解为对未建模效应的捕获,如果还有其他特征,这个误差项表示了一种我们没有捕获的特征,或者看成一种随机的噪声. 假设服从

最小二乘法多项式曲线拟合原理与实现

概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] 给定数据点pi(xi,yi),其中i=1,2,…,m.求近似曲线y= φ(x).并且使得近似曲线与y=f(x)的偏差最小.近似曲线在点pi处的偏差δi= φ(xi)-y,i=1,2,...,m. 常见的曲线拟合方法: 1.使偏差绝对值之和最小 2.使偏差绝对值最大的最小       3.使偏差平方

算法------回归之最小二乘法

线性回归是指,试图学得一个线性模型以尽可能准确的预测实值输出标记. 最小二乘法:基于均方误差最小化来进行模型求解的方法. 通过变成实现最小二乘法(可能不是最简化的,有待提高编程能力) /* * 这是一个最小二乘法的一个线性回归问题 */ class LinearRegression { double a; double b; int n; public LinearRegression(double[] arrx, double[] arry) { // TODO Auto-generated

Python闲谈(二)聊聊最小二乘法以及leastsq函数

1 最小二乘法概述 自从开始做毕设以来,发现自己无时无刻不在接触最小二乘法.从求解线性透视图中的消失点,m元n次函数的拟合,包括后来学到的神经网络,其思想归根结底全都是最小二乘法. 1-1 “多线→一点”视角与“多点→一线”视角 最小二乘法非常简单,我把它分成两种视角描述: (1)已知多条近似交汇于同一个点的直线,想求解出一个近似交点:寻找到一个距离所有直线距离平方和最小的点,该点即最小二乘解: (2)已知多个近似分布于同一直线上的点,想拟合出一个直线方程:设该直线方程为y=kx+b,调整参数k