最小二乘法,相信大家都不陌生,统计学中很是常见,而且其理论相对简单,用途也很广泛。今天小编就给大家具体介绍一下最小二乘法。
一、最小二乘概念
最小二乘,或者也可以叫做最小平方和,它目的就是通过最小化误差的平方和,使得拟合对象无限接近目标对象。也就意味着,最小二乘法可以用于对函数的拟合。
最小二乘法是勒让德( A. M. Legendre)于1805年在其著作《计算慧星轨道的新方法》中提出的。
在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线的欧氏距离之和最小。更直观的解释:
假设有一条直线y=ax+b,要在这条直线上找到一点,距离(x0.y0)这个点的距离最短。如果用绝对值的方法寻找,也就是取min(|y−y0|+|x−x0|),由于绝对值最小为0.所以最小的情况就是x=x0或者y=y0处。
如果用平方和的方法寻找,就是取min(y−y0)2+(x−x0)2.可以看出该式是两点间距离公式,也就是距离的概念。那么最短的距离,就是点到直线的垂线。
二、最小二乘核心思想
最小二乘的主要思想就是求解未知参数,使得理论值与观测值之差(即误差,或者说残差)的平方和达到最小:
三、直线拟合/多元线性回归
求导计算最小值是通用解法,但矩阵法比代数法要简洁,且矩阵运算可以取代循环,所以现在很多书和机器学习库都是用的矩阵法来做最小二乘法。
故损失函数定义为:(系数1/2是为了简化计算添加的,求迹前和求迹后值不变)
应用矩阵迹的计算公式:
四、最小二乘法的适用场景
当样本量m很少,小于特征数n的时候,这时拟合方程是欠定的,需要使用LASSO。当m=n时,用方程组求解。当m>n时,拟合方程是超定的,可以使用最小二乘法。
但是同时最小二乘也具有局限性:
1.最小二乘法需要计算(XTX)−1逆矩阵,有可能逆矩阵不存在,这样就没有办法直接用最小二乘法。
2.如果是样本特征n非常的大的情况,计算逆矩阵是一个极为耗时的工作,甚至是不可行,通常不超过10000个特征。
3.若拟合函数不是线性的,则无法使用最小二乘法,这时就需要通过一些技巧转化为线性才能使用。
五、最小二乘实现
/* 最小二乘法的实现 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; }
数据分析咨询请扫描二维码
CDA数据分析师在中国航信高科技产业园进行了面向测试度量的数据分析培训课程,培训人数近2 ...
2024-05-01CDA数据分析师走进深圳迈瑞生物医疗电子股份有限公司,在迈瑞总部展开了为期两天的培训,本次课程参训人员线上及线下近百人, ...
2024-05-01CDA数据分析师在合肥市对合肥阳光新能源科技有限公司开展了为期8天的企业内训。 合肥阳光新能源科技 ...
2024-05-01CDA数据分析师走进海尔大学,进行了《数据治理与数据中台建设的道与术》专题培训,培训现场爆满,近百人参加了此次培训。 ...
2024-05-01在中国银行苏州分行培训中心开始数据分析师培训,此次培训课程共10天内容,包括Excel、MySQL、概率论与数理统计、SPSS等内容, ...
2024-05-01从实际的业务需求出发,结合行业的典型应用特点,围绕实际的商业问题,探讨数据挖掘、机器学习模型在金融领域的应用,包括获客、信用评分、细分画像、交叉销售、反欺诈、违规识别、时序预测、运筹优化、流程挖掘九个方面,形成 ...
2024-05-01本次培训课程为线上+线下的模式,由于学员编程能力不一、部分学员没有编程基础,故提供统计学、python基 ...
2024-05-01华夏银行信用卡中心-机器学习培训 1、课程亮点 取材于业界一流企业和顶级咨询公司的行业实践;已经被证明是人人 ...
2024-05-01主 题:数据中台建设及数据分析应用主题分享 1. 数据中台市场洞察 2. 主流数据中台产品比较 3. 某企业数据中 ...
2024-05-01围绕“数据驱动”战略,全力打造我行 300 人数字化人才梯队,着力培养数字化管理人才、大数据专业团队 ...
2024-05-01在当今数据驱动的商业环境中,数据分析成为了企业决策的重要依据。通过对大量数据的收集、处理和分析,企业能够更好地理解市场 ...
2024-04-29在人工智能(AI)的世界里,提示词(Prompt)是一种强大的工具,它能够引导AI按照用户的需求产生特定的输出。本文将深入探讨AI ...
2024-04-29CDA立足未来职场,拓展前沿视野——对外经贸大学保险学院举办“三全育人大讲堂”分享行业最新动态。 ...
2024-04-294月2日,CDA数据分析师创始发起人兼协会理事长赵坚毅博士受邀在浙江万里学院举办了一场以“数字化能力在职场中的作用” ...
2024-04-29随机森林(Random Forests)现在机器学习中比较火的一个算法,是一种基于Bagging的集成学习方法,能够很好地处理分类和回归的问 ...
2022-12-23方差分析是数据分析中常用的一种统计分析方法,接下来让我们简单了解一下方差分析的基本思想和原理吧。 方差分析(Analysis ...
2022-12-23来源:关于数据分析与可视化 关于streamlit-aggrid 数据排序 表格样式的调整 数据 ...
2022-08-03作者:麦叔 定义 「把上面晦涩的概念汇成一句话就是:」 ❝ 回调函数就是一个被作为参 ...
2022-08-03现今,高学历人群日益增多,物以稀为贵的高学历光环淡去。无论本科生还是研究生,甚至博士生,求职竞争力都大不如前,就业压力越来越大。
2022-06-01某家企业10个人面试,有9个本科生……如何脱颖而出,除得体的举止和良好的沟通力外,证书成重要筹码,这也是很多人考证的关键所在。
2022-04-14