最小二乘原理求解线性回归方程

在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个 自变量因变量之间关系进行建模的一种 回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。(这反过来又应当由多个相关的因变量预测的多元线性回归区别,[引文需要],而不是一个单一的标量变量。)
回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为 多元线性回归分析。
在线性回归中,数据使用线性预测函数来建模,并且未知的模型参数也是通过数据来估计。这些模型被叫做线性模型。最常用的线性回归建模是给定X值的y的条件均值是X的仿射函数。不太一般的情况,线性回归模型可以是一个中位数或一些其他的给定X的条件下y的条件分布的分位数作为X的线性函数表示。像所有形式的回归分析一样,线性回归也把焦点放在给定X值的y的条件概率分布,而不是X和y的联合概率分布(多元分析领域)。
线性回归是回归分析中第一种经过严格研究并在实际应用中广泛使用的类型。这是因为线性依赖于其未知参数的模型比非线性依赖于其位置参数的模型更容易拟合,而且产生的估计的统计特性也更容易确定。

下面的例1 来自下面网址:

http://wenku.baidu.com/link?url=4Dlv5iuen0K9pb2rD-OICKRpXk0QrEcDjsbgJMXo0nuqIUHuq5im-HU8v6p3Q1QKvj0nEhzsV5znMH1V0Wa3WzDvvynNNd0rT8QCX8LKuwa

  线性方程:y=bx+a ,r为相关系数。线性方程详情详细参考

http://baike.baidu.com/link?url=0Ob9UvB9oe01IXZj93iWNS8zbtqX1fSHdjK4JKB0w0jzmw_8C32U1H55HVWc7oYJ

  

例1 10名同学在高一和高二的数学成绩如下表:

 

74

71

72

68

76

73

67

70

65

74

 

76

75

71

70

76

79

65

77

62

72

 

  其中x为高一数学成绩,y为高二数学成绩.

  (1)yx是否具有相关关系;

  (2)如果yx是相关关系,求回归直线方程.

  

c#程序实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace testxyab
{
    class Program
    {
        static void Main(string[] args)
        {
           
            //数据来自上面的例子
            double[] x = new double[10] { 74,71,72,68,76,73,67,70,65,74};
            double[] y = new double[10] { 76,75,71,70,76,79,65,77,62,72};
            int count=10;
            double a,b,maxerr,rr;
            //a b 为系数,rr 为相关系数的平方,maxerr为最大偏差
            CalcRegress(x, y, count, out a, out b, out maxerr, out rr);
            Console.WriteLine("a={0}\n b={1}\n maxerr={2}\n rr={3}", a, b, maxerr, rr);
            Console.ReadKey();


        }
        public static void CalcRegress(double[] x, double[] y, int count, out double a, out double b, out double maxErr, out double r)
        {
            double sumX = 0;
            double sumY = 0;
            double avgX;
            double avgY;
            double r1;
            double r2;
//数据量过少,无法计算
if (count < 4) { return; } for (int i = 0; i < count; i++) { sumX += x[i]; sumY += y[i]; } avgX = sumX / count; avgY = sumY / count; double SPxy = 0; double SSx = 0; double SSy = 0; for (int i = 0; i < count; i++) { SPxy += (x[i] - avgX) * (y[i] - avg_Y); SSx += (x[i] - avgX) * (x[i] - avgX); SSy += (y[i] - avg_Y) * (y[i] - avg_Y); } //如果所有点的x相同,直线平行于y轴,无法计算。
//如果所有点的y相同直线为平行于x轴的直线y=k+0*x
if (SSy==0) { a = y[1]; b = 0;
rr=0;
maxErr
= 0; //return -1; } //y=bx+a b= SPxy / SSx; a= avgY - b* avgX; //开始计算R²值 r1 = SPxy * SPxy;//分子的平方 r2 = SSx * SSy;//分母的平方 r = r1 / r2; //计算R²值 //下面代码计算最大偏差 maxErr = 0; for (int i = 0; i < count; i++) { double yi = a + b * x[i]; double absErrYi = Math.Abs(yi - y[i]);//假动作 if (absErrYi > maxErr) { maxErr = absErrYi; } } } } }

 

### 使用最小二乘求解超定线性系统的方法 对于超定线性系统而言,方程的数量多于未知数数量。这类问题通常没有精确解,因此目标是最小化误差平方和。最小二乘法提供了一种有效途径来近似解决此类问题[^1]。 当面对形如 \(Ax=b\) 的超定线性系统时,其中\(A\)是一个m×n矩阵(m>n),而向量\(b\)不在由\(A\)列构成的空间内,则无法找到使得\(Ax=b\)成立的确切解\[x\]。此时采用最小二乘准则寻找最优逼近解: #### 构建残差函数并极小化它 定义残差向量为: \[r(x)=Ax-b\] 要使该表达式的欧几里得范数达到最小值,即求解如下最优化问题: \[\min_{x}\|r(x)\|^2=\min_x (Ax-b)^T(Ax-b)\] 对上式展开得到二次型,并对其关于\(x\)取导等于零可以得出正规方程(normal equation): \[A^TAx=A^Tb\] 如果\(A^TA\)是非奇异的(即可逆),那么可以直接通过求解上述正规方程获取唯一解: \[x=(A^TA)^{-1}A^Tb\] 这种方法被称为标准最小二乘估计,在实际操作过程中需要注意数值稳定性以及可能存在的病态条件等问题[^3]。 #### Python 实现示例 下面给出一段简单的Python代码用于演示如何利用NumPy库中的`lstsq()`函数快速实现最小二乘解: ```python import numpy as np # 定义系数矩阵A和常数项向量b A = np.array([[1, 2], [2, 3], [3, 4]]) b = np.array([1, 2, 3]) # 计算最小二乘解 result = np.linalg.lstsq(A, b) print("The least squares solution is:", result[0]) ``` 此段程序能够处理任意维度下的超定线性系统,并返回相应的最小二乘解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值