一元线性回归—如何求得解析解

上一篇:感知机模型原理和对偶形式与二分类问题及python实现

一元线性回归

对于一条直线y = kx + b来说,如果有两个已知的在直线上的数据点,那么我们可以直接用代数的方法(比如待定系数法)求出直线的解析式。但是在生产生活中,大多数情况下,由于各种各样的误差的存在,我们难以得到准确的数据点的值,但是数据会离散地分布在直线的附近,通过离散点拟合出这条直线的过程,就可以叫做(一元)线性回归。
在这里插入图片描述
我们记所有已知的数据点为(xi,yi),那么在xi处的理论上的实际值 kx + b与当前有的实际值yi之间的差值为err = |yi - kx -b |
所有样本点的差值为各个点累加的和
在这里插入图片描述
我们的期望是,使这个误差(也叫损失)最小,绝对值实际上是不太好处理的,所以我们可以用平方来替代它,而且这并不会影响当损失极小时的参数(k和b)值。
在这里插入图片描述
在初中的时候,我们就接触过解析解这个概念了,二次函数的极值点是
在这里插入图片描述
这是我们直接通过化简公式求得的解,而不用一步步迭代逼近,这是最好的一种形式。
对于一元线性回归问题来说,我们依旧可以想办法求得其解析解。思路就是,确定出当误差取得极小值时的参数k和b的表达形式。为此使err对k和b求偏导数,有:
在这里插入图片描述
当这两个偏导数导数都等于零时,误差取得最小值,此时将k和b提取出来,有如下表达形式:
在这里插入图片描述
现在,问题变得很简单了,只需将上式实现出来就好了

import numpy as np
import matplotlib.pyplot as plt  
n=100
k=2
b=1
x = np.linspace(-1,1,n)
y = k*x + b + np.random.randn(*x.shape)*0.4

sum_y=0
sum_x=0
sum_xy=0
sum_x_2=0

for i in range(n):
    sum_y+=y[i]
    sum_x+=x[i]
    sum_xy+=x[i]*y[i]
    sum_x_2+=x[i]*x[i]

k_ = ((sum_y*sum_x)/n-sum_xy)/((sum_x*sum_x)/n-sum_x_2)
b_ = (sum_y-k_*sum_x)/n

print("原直线为:y={}x+{}".format(k,b))
print("拟合出的直线为:y={}x+{}".format(k_,b_))
plt.scatter(x,y)
plt.plot(x,b+k*x,color = "red",linewidth = 1)
plt.plot(x,b_+k_*x,color = "b",linewidth = 1)
plt.show()

在这里插入图片描述
可以看到,其拟合效果还是不错的,而且理论上讲,这应该是通过这些数据点能够得到的一个最优解。

直接能够得到解析解是最好的一种情况,但是对于大多数比较复杂的问题,其解析解较难求得,甚至不能求得。所以我们不得不要考虑另一种方式,即:通过迭代的方法逐渐修正我们的权值,我们需要解决如何迭代,怎样修正等问题。
下一篇,将会结合“波士顿房价预测问题”介绍解决回归问题的另一种方法。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一元线性回归和多元线性回归是统计学中常用的回归分析方法。 一元线性回归是指只有一个自变量和一个因变量的线性关系。其数学模型可以表示为 y = β0 + β1x + ε,其中 y 表示因变量,x 表示自变量,β0 和 β1 表示回归方程的截距和斜率,ε 表示误差项。一元线性回归的目标是通过最小化误差项来拟合出最优的回归方程,进而进行预测和分析。常见的一元线性回归方法有最小二乘法和梯度下降法。 多元线性回归是指有多个自变量和一个因变量之间的线性关系。其数学模型可以表示为 y = β0 + β1x1 + β2x2 + ... + βnxn + ε,其中 y 表示因变量,x1、x2、...、xn 表示自变量,β0、β1、β2、...、βn 表示回归方程的截距和各个自变量的系数,ε 表示误差项。多元线性回归的目标是通过最小化误差项来拟合出最优的回归方程,进而进行预测和分析。常见的多元线性回归方法有最小二乘法和梯度下降法。 相比一元线性回归,多元线性回归可以考虑多个自变量对因变量的影响,更加适用于实际问题的建模和预测。然而,多元线性回归也面临变量选择、多重共线性等问题,需要注意释和优化模型的复杂性。 综上所述,一元线性回归和多元线性回归是常用的回归分析方法,用于建立自变量和因变量之间的线性关系模型,以进行预测和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值