多元线性回归解析解

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 这篇内容介绍了线性回归的数学推导,包括基本概念、中心极限定理、最大似然估计、对数似然函数和解析解求法。线性回归的目标是找到最佳权重向量,使得预测值与实际值之间的误差最小。中心极限定理和最大似然估计用于处理误差服从正态分布的情况,通过对数似然函数求解最优权重。最后,通过梯度和Hessian矩阵判断解的最优性,并给出Python代码实现和可视化结果。

数学推导

基本概念

在整个线性回归的学习中,求得一组最优的权重是我们的目的。

权重W是一维向量,记作W=[w1 w2 .... wn].一般的,权重为n行的列向量。

特征X是一维向量,记作X=[x1 x2 x3 .....xn],一般的,特征为n行的列向量。

在二维空间中,我们有y = ax+b,现在,我们将其拓展到n维空间,则有y = w0 + w1x1 w2x2 +.....+wnxn,其中,w0称为偏置。整体记作y = (w.T)X + ε

中心极限定理

中心极限定理是概率论中随机变量分布渐进于正态分布,而ε服从正态分布。

最大似然估计(MLE)

给定一个概率分布,已知其概率密度函数或者概率质量函数f,以及分布参数θ,我们可以从这个分布中抽出一个具有n个值的采样,利用f计算其似然函数。记作

L(θ|x1,x2....xn) = f(θ)(x1,x2....xn)

即给定分布参数后出现样本组的概率。

其中,最常见的连续概率分布是正态分布

所以正态分布的线性回归的最大似然为

假设误差服从正态分布,符合中心定理,将μ置零,同时σ为常数。事件相互独立,所以可以写成

=

又因为 =

带入得到

我们要求的便是当L(θ)最大时所对应的θ*

对数似然函数

J(θ)称为损失函数,当其最小时,对应的θ为所求

解析解求法

因为 等价于一个长度为m的向量乘以他自己,但是向量相乘在矩阵中要为行向量乘列向量,所以要转置其中一个。

根据转置的性质

得到

梯度

方向导数

设二元函数上有一点P(x0,y0),那么以P点为起的射线

f(x,y)在(x0,y0)可微,那么方向导数存在,

那么

,其中, 记作梯度。

即梯度是某点下降最快的方向导数。

最优解

最优解一定是一个驻点,但驻点不一定是最优解,这时我们用Hessian矩阵的半正定来判断。

Hessian矩阵

Hessian矩阵是由目标函数在X处的二阶偏导数所构成的对称矩阵。

半正定:特征值全部大于等于0

正定:特征值全部大于0

这相当于把X中的元素平方相加,结果肯定大于等于0。所以目标函数的黑塞矩阵半正定,所以函数是凸函数,驻点即为最优解。

目标函数求导

矩阵求导的性质

所以

令其等于0,得到

至此,解析解求解完成。


代码实现


import numpy as np
import matplotlib.pyplot as plt


X1 = 2 * np.random.rand(100,1)#创建一百行一列的列向量
X2 = 3 * np.random.rand(100,1)
#这里的y是真实值,等于y_hat+error
y = 5 + 4*X1 + 3*X2 + np.random.randn(100,1)#error服从正态分布

X_b = np.c_[np.ones((100,1)),X1,X2]
print(X_b)
theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
print(theta)

#使用模型进行预测
X_new = np.array([[0,0],
                 [2,3]])
X_new_b = np.c_[np.ones((2,1)),X_new]
print(X_new)
y_predict  = X_new_b.dot(theta)
print(y_predict)

可视化

fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')
ax3d.plot(X1,X2,y,'b.')
x1 = X_new[:,0]
x2 = X_new[:,1]
Z = y_predict[:,0]
print(x1)
print(x2)
print(Z)
ax3d.plot(x1,x2,Z,color='black')
plt.show()

Figure_6.png


目录
相关文章
|
5月前
电容器在电路设计中的多元角色:全面解析
电容器在电子电路中扮演多种角色:如滤波、退耦、旁路、耦合、调谐等。它们用于滤除杂波、平滑直流、阻止低频信号、连接交流信号、调节频率、稳定振荡等。电容还应用于定时、加速、缩短电路,消除频率影响,预加重和去加重音频信号,以及相位控制、反馈、限流降压等。理解电容的功能对于电子电路设计至关重要。
|
6月前
|
存储 人工智能 编译器
存算一体新兴力量:解析我国企业在存储创新、技术路径上的多元化探索
存算一体新兴力量:解析我国企业在存储创新、技术路径上的多元化探索
342 6
|
6月前
|
机器学习/深度学习 自然语言处理 算法
PyTorch实例:简单线性回归的训练和反向传播解析
PyTorch实例:简单线性回归的训练和反向传播解析
PyTorch实例:简单线性回归的训练和反向传播解析
|
算法
单变量线性回归原理解析
给出一个房价预测的例子,x轴是房子的大小,y轴是房子的价格,图中标注了一些房子作为数据集,而这些点被称为标注数据(labeled data),利用这样的数据来预测的方法称为:监督学习。监督学习分为两类:分类与回归,此时,作为预测房价的这个例子是监督学习中的回归例子。
5142 0
|
19天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
39 0
|
19天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
29 0
|
19天前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
33 0
|
19天前
|
安全 Java 程序员
Collection-Stack&Queue源码解析
Collection-Stack&Queue源码解析
45 0
|
17天前
|
存储
让星星⭐月亮告诉你,HashMap的put方法源码解析及其中两种会触发扩容的场景(足够详尽,有问题欢迎指正~)
`HashMap`的`put`方法通过调用`putVal`实现,主要涉及两个场景下的扩容操作:1. 初始化时,链表数组的初始容量设为16,阈值设为12;2. 当存储的元素个数超过阈值时,链表数组的容量和阈值均翻倍。`putVal`方法处理键值对的插入,包括链表和红黑树的转换,确保高效的数据存取。
39 5

热门文章

最新文章

推荐镜像

更多