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

原文:http://blog.csdn.net/qll125596718/article/details/8248249

监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归。回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。对于二维空间线性是一条直线;对于三维空间线性是一个平面,对于多维空间线性是一个超平面...这里,谈一谈最简单的一元线性回归模型。

1.一元线性回归模型

模型如下:

总体回归函数中Y与X的关系可是线性的,也可是非线性的。对线性回归模型的“线性”有两种解释:

(1)就变量而言是线性的,Y的条件均值是 X的线性函数

(2)就参数而言是线性的,Y的条件均值是参数的线性函数

线性回归模型主要指就参数而言是“线性”,因为只要对参数而言是线性的,都可以用类似的方法估计其参数。

2.参数估计——最小二乘法

对于一元线性回归模型, 假设从总体中获取了n组观察值(X1,Y1),(X2,Y2), …,(Xn,Yn)。对于平面中的这n个点,可以使用无数条曲线来拟合。要求样本回归函数尽可能好地拟合这组值。综合起来看,这条直线处于样本数据的中心位置最合理。 选择最佳拟合曲线的标准可以确定为:使总的拟合误差(即总残差)达到最小。有以下三个标准可以选择:

(1)用“残差和最小”确定直线位置是一个途径。但很快发现计算“残差和”存在相互抵消的问题。
        (2)用“残差绝对值和最小”确定直线位置也是一个途径。但绝对值的计算比较麻烦。
        (3)最小二乘法的原则是以“残差平方和最小”确定直线位置。用最小二乘法除了计算比较方便外,得到的估计量还具有优良特性。这种方法对异常值非常敏感。

最常用的是普通最小二乘法( Ordinary  Least Square,OLS):所选择的回归模型应该使所有观察值的残差平方和达到最小。(Q为残差平方和)

样本回归模型:

残差平方和:

则通过Q最小确定这条直线,即确定,以为变量,把它们看作是Q的函数,就变成了一个求极值的问题,可以通过求导数得到。求Q对两个待估参数的偏导数:

解得:

3.最小二乘法c++实现

[cpp] view plaincopy

    1. #include<iostream>
    2. #include<fstream>
    3. #include<vector>
    4. using namespace std;
    5. class LeastSquare{
    6. double a, b;
    7. public:
    8. LeastSquare(const vector<double>& x, const vector<double>& y)
    9. {
    10. double t1=0, t2=0, t3=0, t4=0;
    11. for(int i=0; i<x.size(); ++i)
    12. {
    13. t1 += x[i]*x[i];
    14. t2 += x[i];
    15. t3 += x[i]*y[i];
    16. t4 += y[i];
    17. }
    18. a = (t3*x.size() - t2*t4) / (t1*x.size() - t2*t2);
    19. //b = (t4 - a*t2) / x.size();
    20. b = (t1*t4 - t2*t3) / (t1*x.size() - t2*t2);
    21. }
    22. double getY(const double x) const
    23. {
    24. return a*x + b;
    25. }
    26. void print() const
    27. {
    28. cout<<"y = "<<a<<"x + "<<b<<"\n";
    29. }
    30. };
    31. int main(int argc, char *argv[])
    32. {
    33. if(argc != 2)
    34. {
    35. cout<<"Usage: DataFile.txt"<<endl;
    36. return -1;
    37. }
    38. else
    39. {
    40. vector<double> x;
    41. ifstream in(argv[1]);
    42. for(double d; in>>d; )
    43. x.push_back(d);
    44. int sz = x.size();
    45. vector<double> y(x.begin()+sz/2, x.end());
    46. x.resize(sz/2);
    47. LeastSquare ls(x, y);
    48. ls.print();
    49. cout<<"Input x:\n";
    50. double x0;
    51. while(cin>>x0)
    52. {
    53. cout<<"y = "<<ls.getY(x0)<<endl;
    54. cout<<"Input x:\n";
    55. }
    56. }
    57. }
时间: 2024-10-21 13:14:36

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

机器学习之一元线性回归模型

一元线性回归模型 样本数量m            输入变量x               输出变量y               训练样本(x,y)                   第i个训练样本(,) 假设函数:        模型参数 代价函数: 优化目标: 算法: 1.梯度下降法 具体解法: 2.正规方程法 原文地址:https://www.cnblogs.com/yuqiujie/p/8893660.html

01_有监督学习--简单线性回归模型(最小二乘法代码实现)

有监督学习--简单线性回归模型(最小二乘法代码实现)0.引入依赖1.导入数据(data.csv)2.定义损失函数3.定义模型拟合函数4.测试:运行最小二乘算法,计算 w 和 b5.画出拟合曲线6.附录-测试数据 有监督学习--简单线性回归模型(最小二乘法代码实现) 0.引入依赖 import numpy as npimport matplotlib.pyplot as plt 1.导入数据(data.csv) points = np.genfromtxt('data.csv', delimite

R语言解读一元线性回归模型

前言 在我们的日常生活中,存在大量的具有相关性的事件,比如大气压和海拔高度,海拔越高大气压强越小:人的身高和体重,普遍来看越高的人体重也越重.还有一些可能存在相关性的事件,比如知识水平越高的人,收入水平越高:市场化的国家经济越好,则货币越强势,反而全球经济危机,黄金等避险资产越走强. 如果我们要研究这些事件,找到不同变量之间的关系,我们就会用到回归分析.一元线性回归分析是处理两个变量之间关系的最简单模型,是两个变量之间的线性相关关系.让我们一起发现生活中的规律吧. 由于本文为非统计的专业文章,所

从统计看机器学习(一) 一元线性回归

从统计学的角度来看,机器学习大多的方法是统计学中分类与回归的方法向工程领域的推广. “回归”(Regression)一词的滥觞是英国科学家Francis Galton(1822-1911)在1886年的论文[1]研究孩子身高与父母身高之间的关系.观察1087对夫妇后,得出成年儿子身高=33.73+0.516*父母平均身高(以英寸为单位).他发现孩子的身高与父母的身高相比更加温和:如果父母均非常高,那么孩子身高更倾向于很高但比父母矮:如果父母均非常矮,那么孩子身高更倾向于很矮但比父母高.这个发现被

R语言——一元线性回归

1 一元线性回归 高尔顿被誉为现代回归的创始人,"回归效应"的发现源于高尔顿的豌豆遗传试验.在这个试验中,高尔顿发现,并非尺寸大的豌豆,其后代尺寸也大,尺寸小的豌豆,其后代尺寸也小.而是具有一种不同的趋势,即尺寸大的豌豆趋向于得到尺寸更小的子代,而尺寸小的豌豆趋向于得到尺寸更大的后代.高尔顿把这一现象称为"返祖",后来又称为"向平均值回归"."回归效应"的应用非常广泛,生活中随处可见这样的例子. 1.1 变量之间的关系的度量

线性回归模型原理及其应用

前言 最近有在学习网易云课堂上<吴恩达机器学习>这门课程, 受益匪浅, 然后打算将有关线性回归模型的知识点总结下来, 也就有了本文. 若存在错误的地方, 还请指正, 谢谢! 目录 1. 一元线性回归 2. 多元线性回归 3. 两大算法优缺点 4. 算法优化问题 5. 多元线性回归应用 正文 线性回归, 是回归分析中的一种, 其表示自变量与因变量之间存在线性关系. 回归分析是从数据出发, 考察变量之间的数量关系, 并通过一定的数学关系式将这种关系描述出来, 再通过关系式来估计某个变量的取值, 同

机器学习--线性回归模型原理

线性回归, 是回归分析中的一种, 其表示自变量与因变量之间存在线性关系. 回归分析是从数据出发, 考察变量之间的数量关系, 并通过一定的数学关系式将这种关系描述出来, 再通过关系式来估计某个变量的取值, 同时给出该估计的可靠程度. 下面我们从一元线性回归开始说起. 1. 一元线性回归 在回归分析中如果只涉及一个自变量(用来预测的变量)和一个因变量(要预测的变量), 这时就称为一元回归, 如果自变量与因变量之间存在线性关系, 那么此时的回归就称为一元线性回归. 1.1 模型 假设自变量x和因变量y

一元线性回归

1.概念 一元线性回归是最简单的一种模型,但应用广泛,比如简单地预测商品价格.成本评估等,都可以用一元线性模型,本节主要讲解scikit-learn一元线性回归的使用以及作图说明. y=f(x)叫做一元函数,回归的意思就是根据已知数据复原某些值,线性回归(regression)就是用线性的模型做回归复原. 那么一元线性回归就是:已知一批(x,y)值来复原另外未知的值. 比如:告诉你(1,1),(2,2),(3,3),那么问你(4,?)是多少,很容易复原出来(4,4),这就是一元线性回归问题的求解

R语言解读多元线性回归模型

转载:http://blog.fens.me/r-multi-linear-regression/ 前言 本文接上一篇R语言解读一元线性回归模型.在许多生活和工作的实际问题中,影响因变量的因素可能不止一个,比如对于知识水平越高的人,收入水平也越高,这样的一个结论.这其中可能包括了因为更好的家庭条件,所以有了更好的教育:因为在一线城市发展,所以有了更好的工作机会:所处的行业赶上了大的经济上行周期等.要想解读这些规律,是复杂的.多维度的,多元回归分析方法更适合解读生活的规律. 由于本文为非统计的专业