线性(最小二乘)回归

        线性最小二乘回归的目的是用直线拟合一组成对出现的观测值:

(x_1, y_1),(x_2, y_2),...,(x_n,y_n)

直线的数学表示为:y = a_0+a_1x+ea_0a_1表示截距和斜率;e是模型和观测值之间的误差或残差,e=y-a_0-a_1x

最佳拟合条件为:S_r = \sum_{i=1}^{n}e_i^2=\sum_{i=1}^{n}(y_i-a_0-a_1x_i)^2

对上式求导:

\frac{\partial S_r}{\partial a_0}=-2\sum(y_i-a_0-a_1x_i)

\frac{\partial S_r}{\partial a_1}=-2\sum[(y_i-a_0-a_1x_i)x_i]

联立求解得:a_1=\frac {n\sum x_iy_i-\sum x_i\sum y_i}{n\sum x_i^2-(\sum x_i)^2}a_0 = \bar y - a_1 \bar x

实例:

在流体力学中,物体所受阻力与其速度的平方成正比:F_U=c_d v^2,在一风动实验中力和速度的测量数据如下:

v(m/s)1020304050607080
F(N)257038055061012208301450
x = [10 20 30 40 50 60 70 80];
y = [25 70 380 550 610 1220 830 1450];
n = length(x);
a1 = (n*sum(x.*y)-sum(x)*sum(y)) / (n*sum(x.^2)-(sum(x))^2);
ybar = sum(y) / n;
xbar = sum(x) / n;
a0 = ybar - a1*xbar;
plot(x, y, '*')
hold on
xhat = linspace(0, 80, 100);
yhat = a0 + a1*xhat;
plot(xhat, yhat)
xlabel('v(m/s)')
ylabel('F(N)')
set(gca, 'Fontname', 'Times', 'Fontsize', 9)

结果分析:

  1. 令:s_{y/x} = \sqrt {\frac {S_r}{n-2}},其中s_{y/x}称为估计值的标准误差,此处除数为n-2,在上一篇文章中,我们讨论了为什么统计量中的标准差除数为n-1,这里估计值的标准差自由度为n-2,另外,如果只有两个数据点,那么所求直线即为过这两个点的直线,也就不存在“数据分散”的问题了。“标准差”表示数据沿均值周围的分散情况,而“估计值的标准差”表示数据沿回归线周围的分散情况。
  2. r^2 = \frac {S_t - S_r}{S_t},r为相关系数,对于一次完美的拟合,有S_r = 0,r^2 = 1,直线百分百反映数据的变化情况,若S_r = S_t,r^2 = 0,表示直线拟合的结果与均值相比没有任何提高。

非线性关系的线性化:

指数模型:y = \alpha_1 e^{\beta_1 x},两边同时取自然对数:\ln y = \ln \alpha_1 + \beta_1x

幂方程:y = \alpha_2 x^{\beta_2},两边同时取对数:\log y = \log \alpha_2 + \beta_2 \log x

饱和增长率方程:y = \alpha_3 \frac {x}{\beta_3 + x},两边同时取倒数:\frac {1}{y} = \frac {1}{\alpha_3} + \frac {\beta_3}{\alpha3} \frac{1}{x}

将实例中的模型改为幂方程

x0 = [10 20 30 40 50 60 70 80];
y0 = [25 70 380 550 610 1220 830 1450];
x = log10(x0);
y = log10(y0);
n = length(x);
a1 = (n*sum(x.*y)-sum(x)*sum(y)) / (n*sum(x.^2)-(sum(x))^2);
ybar = sum(y) / n;
xbar = sum(x) / n;
a0 = ybar - a1*xbar;    
subplot(2, 1, 1)
xhat = linspace(10, 80, 100);
xhat = log10(xhat);
yhat = a0 + a1*xhat;
plot(x, y, '*', xhat, yhat)
xlabel('log(v)')
ylabel('log(F)')
set(gca, 'Fontname', 'Times', 'Fontsize', 9)
subplot(2, 1, 2)
xhat = linspace(0, 80, 100);
yhat = 10^a0 * xhat.^(a1);
plot(x0, y0, '*', xhat, yhat)
xlabel('v(m/s)')
ylabel('F(N)')
set(gca, 'Fontname', 'Times', 'Fontsize', 9)

总评:

在Matlab中,内置函数polyfit可计算数据的n次多项式最小二乘拟合多项式,用法为:p = polyfit(x, y, n),其中x和y分别为自变量和应变量,n为多项式的次数,返回值p中记录了多项式的系数,(幂次递减的形式)

x = [10 20 30 40 50 60 70 80];
y = [25 70 380 550 610 1220 830 1450];
% 拟合
p = polyfit(x, y, 1);
% 绘图
xhat = linspace(0, 80, 100);
yhat = polyval(p, xhat);
plot(x, y, '*', xhat, yhat)
xlabel('v(m/s)')
ylabel('F(N)')
set(gca, 'Fontname', 'Times', 'Fontsize', 9)

在线性最小二乘回归中,隐藏了许多假设:

  1. 每一个x的值都已固定,它不是随机的,而且不带有任何误差;
  2. y是独立随机变量,而且y的所有分量具有同样的方差;
  3. 给定x值后,y值的分布必须服从正态分布。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值