大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
回归直线方程
线性回归方程的公式
一个简单实现代码
//************************************
// 函数名称: GetLineEquationDouble0
// 函数说明: 求线性回归方程 // 参 数:
// const SPoint inPoint[MAX_PLATE_HEIGHT] [in] 数据点 // const int length [in] 点的数量 // double * k [out] 直线斜率 // double * b [out] 直线截距 // 返回值: byte
//************************************
byte GetLineParam(const SPoint *inPoint,constint length,double*k,double*b) { int i=0; int sumX=0, sumY=0; double xavg=0, yavg=0; int sumXX =0; int sumXY =0; int tempK1 =0; double tempK =0; double tempB =0;
if(length ==0) { *k =0; *b =0; return1; }
sumX =0; sumY =0; sumXX =0; sumXY =0; for(i=0; i<length; i++) { sumX += inPoint[i].x; sumY += inPoint[i].y; sumXX += inPoint[i].x * inPoint[i].x; sumXY += inPoint[i].x * inPoint[i].y; }
xavg = sumX / length; yavg = sumY / length;
tempK1 = sumXX – length * xavg * xavg;
if(tempK1 ==0) { *k =0; *b =0; return1;
}
tempK =(sumXY – length * xavg * yavg)/ tempK1;
tempB = yavg – tempK * xavg;
*k = tempK; *b = tempB;
return1; }
|
一个网上看的例子
某产品广告支出x万元,与销售额y万元之间有如下数据x=2,4,5,6,8y=30,40,60,50,70(1)求回归直线方程
(1)设回归线性方程为:y=bx+a
x的平均值=(2+4+5+6+8)/5=5
y的平均值=(30+40+60+50+70)/5=50
∑xi^2=2^2+4^2+5^2+6^2+8^2=145
∑xiyi=2*30+4*40+5*60+6*50+8*70=1380
根据公式:b=(1380-5*5*50)/(145-5*5^2)=6.5
a=50-6.5*5=17.5
则回归线性直线方程为:y=6.5x+17.5
简单的证明
用最小二乘法估计参数b ,分别求对a、b的偏导数并令它们等于零,得方程组并求解.
假设线性回归方程为: y=ax+b (1)
a,b为回归系数,要用观测数据(x1,x2,…,xn和y1,y2,…,yn)确定之.
为此构造 Q(a,b)=Σ(i=1->n)[yi-(axi+b)]^2 (2)
使Q(a,b)取最小值的a,b为所求.
令: ∂Q/∂a= 2Σ(i=1->n)[yi-(axi+b)](-xi)= 0 (3)
∂Q/∂b= 2Σ(i=1->n)[yi-(axi+b)] = 0 (4)
根据(3)、(4)解出a ,b就确定了回归方程(1):
a Σ (Xi)² + b Σ Xi = Σ Xi Yi (5)
a Σ Xi + b n = Σ Yi (6)
由(5)(6)解出a,b便是,其中化简过程要用到Σ(i=1->n) (xi) = n T (T为X数据的均值)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168265.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...