多元线性回归与高斯误差模型的同源关系

article/2025/9/26 13:12:27

机器学习的起点——线性回归

一、线性回归的地位

首先,线性回归中最基础的概念是一元线性回归模型。
在回归模型中,线性回归模型是最简单的。其具备两个优势:第一是线性回归模型适合于大数据。训练时消耗的计算资源较少。第二是模型本身具备很好的可解释性。属于“白盒模型”。

二、线性回归的定义

线性回归主要是包括“线性”和“回归”两部分。线性是指其具有线性的决策边界,其中在二维空间里,其决策边界就是一条直线。回归表明其具有预测功能。
二维数据可视化,观察其线性性。高维数据可以先用PCA降维再可视化观察其线性性
这里的任务就成了,如何使用一条线对这些散点进行拟合。我们应该用什么样的标准来评判,那条线是拟合这些散点最好的线呢?

通过直觉我们感觉,蓝色线是拟合程度最好的一条线。那么这个“直觉”从哪里来?我们应当如何整理和表达这个直觉?这个直觉有数学依据吗?

以上三个问题。我们一一来解答:

第一,这个直觉从哪里来? 答案是来自于我们脑子里现有的经验模型,换句话说是一种感觉。

第二,这个直觉怎么表达? 答案是,这个直觉我们可以依托于一个误差函数来表达。我们采用的目标函数是测量真实值和预测值之间的差异。我们使用平方误差函数。

第三,这个直觉有数学依据吗?答案是有的,极大似然估计就是其数学依据,注意这个问题跟第二个问题是有区别的。

三、一元线性回归的代码实现(手写和使用sklearn两种方式)

# 创建数据集,把数据写入到numpy数组
import numpy as np  # 引用numpy库,主要用来做科学计算
import matplotlib.pyplot as plt   # 引用matplotlib库,主要用来画图
data = np.array([[152,51],[156,53],[160,54],[164,55],[168,57],[172,60],[176,62],[180,65],[184,69],[188,72]])# 打印大小
x, y = data[:,0], data[:,1]
print (x.shape, y.shape)# 1. 手动实现一个线性回归算法
# TODO: 实现w和b参数, 这里w是斜率, b是偏移量
x_mean = np.mean(x) 
y_mean = np.mean(y)
xy_mean = np.mean(x.dot(y))
x_2_mean = np.mean(x.dot(x))
w =((xy_mean)-(x_mean*y_mean))/(x_2_mean)-x_mean*x_mean
b = y_mean-w*x_mean print ("通过手动实现的线性回归模型参数: %.5f %.5f"%(w,b))# 2. 使用sklearn来实现线性回归模型, 可以用来比较一下跟手动实现的结果
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(x.reshape(-1,1),y)
print ("基于sklearn的线性回归模型参数:%.5f %.5f"%(model.coef_, model.intercept_))

四、多元线性回归

1、模型介绍

(1)模型结构

多元线性回归模型通常用来描述变量y和x之间的随机线性关系:
在这里插入图片描述
当你获得诸多样本点之后,分别代入上式,可以得到一个方程组。这一方程组用矩阵表示如下:

在这里插入图片描述
在这里插入图片描述

(2)模型参数的确定(最小二乘估计)

在高斯假定(上面的几个条件)下,如果X是列满秩的,则我们定义的“损失函数最小化”其实就是最小二乘法的过程。则参数的最小二乘估计为:
在这里插入图片描述
在这里插入图片描述
这一最小二乘估计的过程,其实就包含了使得损失函数(损失值与真实值之差的平方和)最小的优化过程。经过这一过程,我们才得到这个参数估计结果。而在这个优化过程中,我们在求解最优解析解的过程中,使用了梯度下降法(Gradient Descent),它是一个循环迭代式的算法。另外,在线性回归中,它不受特征之间线性相关的影响。

(3)参数的显著性检验

这里涉及到拟合优度检验、怀特检验等等诸多能够衡量估计出来的参数的优劣的检验方法。属于计量经济学和序列分析相关的内容,这部分检验的过程具体与本文无关。暂不表。

(4)多元线性回归的代码实现

import numpy as np
from sklearn.linear_model import LinearRegression# 生成样本数据, 特征维度为2
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
# y = 1 * x_0 + 2 * x_1 + 3
y = np.dot(X, np.array([1, 2])) + 3# 先使用sklearn自带的库来解决
model = LinearRegression().fit(X, y)# 打印参数以及偏移量(bias)
print ("基于sklearn的线性回归模型参数为 coef: ", model.coef_, " intercept: %.5f" %model.intercept_)# 手动实现参数的求解。先把偏移量加到X里
a = np.ones(X.shape[0]).reshape(-1,1)
X = np.concatenate((a, X), axis=1)# 通过矩阵、向量乘法来求解参数, res已经包含了偏移量
res = np.matmul(np.linalg.inv(np.matmul(X.T, X)),  np.matmul(X.T, y))# 打印参数以偏移量(bias)
print ("通过手动实现的线性回归模型参数为 coef: ", res[1:], " intercept: %.5f"%res[0])

2、数学原理分析

通过上一节中的三个问题我们知道,这种“最小二乘法”拟合的操作有依据吗?答案是有的,极大似然估计就是其数学依据。下面我们从数学角度介绍为什么采用真实值和预测值之差的平方和在数学上是最优的。

因为:

线性回归的最小二乘法是基于误差为高斯分布这一假设得来的

首先在我们做回归分析的过程中,必然会出现大量的误差,这对每一个样本点都是可能的。

我们把误差看作是随机变量,在模型确定的条件下,每一个样本都对应一个误差值。那么问题就是:如果把所有的误差搜集起来,他们会有什么特点呢?

根据大数定理,一旦样本个数越来越多,这些误差会慢慢服从正态分布。

这就是最小二乘法最核心的假设。基于此我们可以得出以下关于条件概率的结论:
在这里插入图片描述
这样我们对每一个样本的条件概率就建立了起来。接下来我们只需要基于样本之间的独立性,针对所有样本构造最大似然概率。进而求参数。
我将构建过程手写如下:
在这里插入图片描述
最后总结,我们从数学的角度可以清楚地看到如下的结论:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/JS0CTp9p.shtml

相关文章

用R语言做单方程的误差修正模型(ECM)

># 单方程误差修正模型案例分析 > ########################### > # 数据的生成 > set.seed(12345) > u<-rnorm(500) > x<-cumsum(u)#求累积和&#xff0c;返回一个变量&#xff0c;它的第i个元素是从U&#xff08;1&#xff09;到U&#xff08;i&…

单方程误差修正模型案例分析

单方程误差修正模型案例分析数据的生成set.seed(12345) u<-rnorm(500) x<-cumsum(u) y<-xu E-G协整估计及检验model.lm<-lm(y~x) summary(model.lm)Call: lm(formula y ~ x)Residuals:Min 1Q Median 3Q Max -2.65130 -0.65274 0.02012 0.60…

StataIC——协整检验与误差修正模型

一、简介 这篇博文是在博主写的上一篇《StataIC——数据描述性统计分析、平稳性检验、平稳化》的基础上的建立的传送门&#xff0c;这篇博文主要是做协整检验和误差修正模型。本篇博文是一篇关于线性回归的基本操作&#xff1b;时间序列的平稳性检验、协整检验和误差修正模型&…

误差修正ECM模型怎么分析?

在宏观计量经济研究中&#xff0c;通常会使用VAR模型研究多个时间经济变量之间的数量关系情况&#xff0c;当数据不平稳但满足同阶单整时&#xff0c;通常使用协整检验研究长期均衡关系。与此同时&#xff0c;还可使用误差修正模型ECM&#xff08;error correction model&#…

时间序列分析(13)| 误差修正模型、协整检验(完结篇)

本篇为「时间序列分析」系列推文的最后一篇。 1 协整的概念 「协整」&#xff08;cointegrated&#xff09;描述的是两个及以上时间序列变量之间的关系。 若一个时间序列变量的阶差分是平稳的&#xff0c;则称该变量为阶单整&#xff1b;若多个阶时间序列变量的线性组合的单整阶…

误差修正模型

误差修正模型通常作为协整模型的补充模型出现。协整模型度量解释的是序列间的长期关系,而误差修正模型解释的是序列之间的短期关系。 1.模型简介 误差修正模型,简称ECM模型,构造原理如下: 假设非平稳响应序列{yt}与非平稳输入序列{xt}之间具有协整关系,即: 则回归残差序…

时间序列研(part10)--误差修正模型

学习笔记&#xff0c;仅供参考&#xff0c;有错必纠 文章目录 时间序列误差修正模型F检验似然比&#xff08;LR&#xff09;检验W检验LM乘数检验LR, W和LM检验自相关的LM检验 时间序列 误差修正模型 在用“一般到特殊”方法建立模型时的&#xff0c;首先应对初始模型&#xff0…

pyspider框架之Tripadvisor酒店数据爬取

需求 网站入口&#xff1a;www.tripadvisor.com 网页下端&#xff0c;遍历点开进入所有城市链接&#xff1a; 点击后进入该城市的所有hotel 代码 #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2018-09-06 11:16:59 # Project: trip_hotelfrom pys…

爬取携程和蚂蜂窝的景点评论数据\携程评论数据爬取\旅游网站数据爬取

本人长期出售超大量微博数据、旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com。同时欢迎加入社交媒体数据交流群:99918768 前言 为了获取多源数据需要到各个网站获取一些景点的评论信息和图片,首先选到了携程和蚂蜂窝这两个网站,将一些…

Python爬虫实战--TripAdvisor爬虫

目标站点分析 目标URL&#xff1a;https://www.tripadvisor.cn/Attractions-g60763-Activities-New_York_City_New_York.html#FILTERED_LIST 明确内容&#xff1a; 在图中&#xff0c;我们明确爬去的内容为&#xff1a;title&#xff0c;comment, cate&#xff08;即绿色框中的…

如何用Python从TripAdvisor抓取数十万条酒店评论

我从TripAdvisor抓取一些酒店评论&#xff0c;然后发现了一种从它们那里刮掉数十万条酒店评论的好方法。 让我们假设&#xff0c;例如&#xff0c;我们要从大加那利岛刮掉酒店评论。如果转到TripAdvisor&#xff0c;我们将看到URL为&#xff1a; https://www.tripadvisor.com…

美通企业日报 | 猫途鹰联手携程打造中国顶级旅行平台;强生战略合作阿里旗下Lazada...

今日看点 TripAdvisor与携程集团联手打造面向中国出境旅行者的顶级旅行平台。全球领先的旅游平台TripAdvisor&#xff08;猫途鹰&#xff09;宣布其中国子公司已与携程集团达成战略合作&#xff0c;以打造中国顶级的旅行计划和预订网站&#xff0c;为渴望探索世界的中国旅行者提…

Python爬取TripAdvisor

直接上代码&#xff1a; #爬取tripadvisor纽约市酒店超值排名#引入requests 获取html文件&#xff0c;才能从html获取信息 import requests #利用BeautifulSoup解析文件&#xff0c;获取想要的到的数据 from bs4 import BeautifulSoup #这段代码只用在获取等待&#xff0c;避免…

猫途鹰公布2023年全球十大最佳旅行体验和十大顶级景点 | 美通社头条

美通社消息&#xff0c;旅游指南平台猫途鹰(Tripadvisor)公布2023年旅行者之选&#xff1a;最佳“必做之事”。 随着夏季旅游的全面展开&#xff0c;这些是猫途鹰评论家们最喜欢的来自世界各地的活动&#xff0c;为希望创造难忘时刻的旅行者提供一份明确的非凡体验清单&#xf…

猫途鹰公布2019年“旅行者之选”全球最佳海滩榜单

全球旅游规划和预订平台猫途鹰(TripAdvisor)公布2019年“旅行者之选”最佳海滩榜单。获奖海滩是基于过去12个月内全球上亿旅行者的评分和点评的数量及质量综合计算得出&#xff0c;巴西费尔南多迪诺罗尼亚群岛&#xff08;Fernando de Noronha&#xff09;的桑乔湾海滩&#xf…

【Python】代码:获取猫途鹰的London酒店信息:基于Scrapy框架和requests库

本文以代码分析的形式记录&#xff1a;利用Scrapy框架和requests库爬取tripadvisor(猫途鹰)多个城市的酒店信息&#xff0c;数据量300w条(1.09G)&#xff0c;运行时间约7h。多个城市与单个城市的操作类似&#xff0c;为避免代码过于冗长&#xff0c;本文仅以爬取London酒店的评…

利用 pyspider 框架抓取猫途鹰酒店信息

利用框架 pyspider 能实现快速抓取网页信息&#xff0c;而且代码简洁&#xff0c;抓取速度也不错。 环境&#xff1a;macOS&#xff1b;Python 版本&#xff1a;Python3。 1.首先&#xff0c;安装 pyspider 框架&#xff0c;使用pip3一键安装&#xff1a; pip3 pyspider 2.终端…

可怕的pyspider猫途鹰

1.启动pyspider 2.新建一个项目 3.代码 4. 注意事项&#xff1a;网址什么的都变了 5.存储到MongoDB&#xff0c; 注意这个地方我错了三次 6.在tableau可视化才发现错误的1,2 之后就能可视化了&#xff0c;本次实验是个半成品。后期会补充。 #!/usr/bin/env python # -*- enco…

爬虫-猫途鹰

from bs4 import BeautifulSoup import requests url https://www.tripadvisor.cn/ wb_data requests.get(url) soup BeautifulSoup(wb_data.text,lxml) for i in soup.select(li):if len(i.select(.ranking))>0:sorti.select(.ranking)[0].text #排名countryi.select(.c…

JS DOM 编程复习笔记--父元素、子元素和兄弟元素(三)

今天我们来复习DOM中的获取父元素、子元素和兄弟元素的API&#xff0c;它们主要有parentNode、firstChild、firstElementChild、lastChild、lastElementChild、childNodes、children、nextElementSibling、nextSibling、previousElementSibling、previousSibling等。 目录 获取…