京公网安备 11010802034615号
经营许可证编号:京B2-20210330
最小二乘法,相信大家都不陌生,统计学中很是常见,而且其理论相对简单,用途也很广泛。今天小编就给大家具体介绍一下最小二乘法。
一、最小二乘概念
最小二乘,或者也可以叫做最小平方和,它目的就是通过最小化误差的平方和,使得拟合对象无限接近目标对象。也就意味着,最小二乘法可以用于对函数的拟合。
最小二乘法是勒让德( 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; }
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
金融行业的运营风险贯穿业务全流程,涵盖交易欺诈、操作违规、流程漏洞、合规偏差、客户信用异常等多元场景,是银行、保险、证券 ...
2026-07-17财产保险作为金融行业的核心板块,涵盖车险、家财险、责任险、企财险等多元品类,是个人与企业抵御财产风险、经营风险的重要保障 ...
2026-07-17 很多数据分析师能熟练写SQL、做透视表,但当被问到“数据是从哪里来的?经过哪些加工才进入数据仓库?ETL具体做了什么?”时 ...
2026-07-17【核心关键词】模块、餐饮、客户、门店、企业、订单、供应链、多样化、产品、生产计划、数据分析、生产管理、物料管理、业务分 ...
2026-07-16在数字化分析时代,原始数据本身不具备业务价值,只有通过科学的统计学方法加工、拆解、验证与解读,才能挖掘数据背后的规律、差 ...
2026-07-16 很多数据分析师能熟练地写SQL、做透视表、算描述性统计,但当被问到“如何预测用户流失概率”“如何归因销量下滑的关键因素 ...
2026-07-16在描述性统计分析、数据预处理、异常值排查与多组数据分布对比工作中,箱线图(Box Plot)是应用最广泛的可视化与统计工具之一。 ...
2026-07-15在企业数据存储、业务统计与数据分析工作中,绝大多数业务数据都带有时间维度属性,例如订单创建时间、用户注册时间、支付完成时 ...
2026-07-15 很多数据分析师拿到数据就开始清洗、建模,但当被问到“这批数据属于什么类型——结构化还是非结构化?分类变量还是数值变量 ...
2026-07-15【核心关键词】产品、经营、客户、调研、销售额、宏观、会计行业、客户满意度、发展趋势、经营状况、数据分析、竞争对手、数据 ...
2026-07-14问卷调查是市场调研、用户研究、社会调研与产品分析的核心数据采集方式。问卷数据大多以分类数据为主,例如用户性别、年龄分层、 ...
2026-07-14 很多数据分析师画过趋势图、做过业绩预测,但当被问到“这个月销售额增长20%,到底是长期趋势自然增长,还是促销活动的短期 ...
2026-07-14在数据分析、业务效果验证、AB实验扩展、行业对比等场景中,我们经常需要对比三组及以上样本的均值差异,例如不同区域的客单价对 ...
2026-07-13在互联网产品运营、用户生命周期管理与商业化数据分析中,留存指标是判断产品价值、用户满意度与商业模式健康度的核心基准。常规 ...
2026-07-13 很多数据分析师做过按月份的销售额趋势图,画过按天的流量折线图,但当被问到“时间序列和普通数据有什么本质区别”“季节性 ...
2026-07-13【核心关键词】统计学、互联网、知识、课程、学生、数学、软件、招聘、数据分析、实习经历、机器学习、理论基础、业务思维、统 ...
2026-07-10在互联网运营、产品设计、市场营销与商业数据分析领域,所有转化、成交、复购行为的底层逻辑,都依托于用户决策流程。用户从产生 ...
2026-07-10 很多数据分析师能熟练地计算指标、搭建标签体系,但当被问到“画像到底在解决什么问题”“画像和标签是什么关系”“画像如何 ...
2026-07-10数据透视表是数据分析中最常用、最高效的汇总分析工具,具备快速分组、聚合计算、维度拆解、数据可视化等优势,能够轻松完成求和 ...
2026-07-09在统计学、CDA数据分析、机器学习与商业数据研究中,正态分布是最基础、最重要的数据分布形态。绝大多数参数检验、数据建模、指 ...
2026-07-09