【机器学习】多元线性回归算法和正规方程解求解

多元线性方差和正规方差解

  • 一、摘要
  • 二、多元线性回归介绍
  • 三、正规方程解的求解及代码实现

一、摘要

本文围绕多元线性回归的正规方程解展开,为初学者系统介绍了相关基本概念、求解方法、实际应用以及算法封装要点。

首先,深入阐释了正规方程解这一多元线性回归的重要求解方法,同时明确了截距和系数的概念及其差异。通过详细步骤,指导读者如何运用正规方程解决多元线性回归问题,并剖析了将截距和系数分开处理的原因,帮助读者理解其背后的数学逻辑和实际意义。

接着,全面分析了正规方程解的优缺点,使读者清晰了解该方法在不同场景下的适用性。在此基础上,介绍了正规方程解在实际应用中的具体操作方法,增强了读者将理论知识转化为实践的能力。

在算法封装层面,着重解释了在封装多元线性回归算法时,采用截距和系数分开处理方式的原因,为读者在实际编程实现中提供了思路。同时,还提及了 我们自己新建的工程包中新加入的广义线性回归模型,该模型具备强大的通用性,既能解决多元线性回归问题,也能应对简单线性回归问题,拓宽了读者的技术视野。

最后,以 fit 函数的实现过程为切入点,详细讲解了使用正规化方程求解的具体步骤,包括如何创建矩阵 X b X_b Xb,让读者深入了解算法的底层实现细节,为进一步学习和开发奠定坚实基础。

二、多元线性回归介绍

  1. 多元线性回归用于处理样本具有多个特征值的问题,常见于真实世界的数据集。

  2. 与简单线性回归相比,多元线性回归的样本可能有成千上万个特征。
    在这里插入图片描述

  3. 多元线性回归算法的目标:损失函数定义为预测值与真实值之间的差的平方和,旨在最小化该函数。通过找到合适的 θ0 到 θn 的值,使得损失函数最小。
    在这里插入图片描述

  4. 多元线性回归的数学表示 : 为 y = θ0 + θ1x1 + θ2x2 + … + θnxn,其中 θ0 是截距项,θ1 到 θn 是各特征的系数。θ0 到 θn 共 n+1 个参数需要估计。
    在这里插入图片描述
    通过向量化的表示方法将 θ0 到 θn 整理成一个向量 θ,同时将 X 矩阵的每一行添加一个虚拟的第零个特征,值为 1。这样可以将预测值表示为 Y^ = Xθ,其中 Y^ 是预测值向量
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    最终得到的公式如上图所示,这个公式叫做多元线性回归的正规方程解,总结如下图所示:
    在这里插入图片描述

三、正规方程解的求解及代码实现

在这里插入图片描述

  1. 正规方程解是通过矩阵运算直接求解 θ 的方法,时间复杂度为 O(n^3),时间复杂度较高,对于大规模数据集可能效率较低。实际应用中,更常用的方法是梯度下降法
  2. 求解过程涉及矩阵求导求逆运算,具体推导过程较为复杂。
  3. 以波士顿房价数据为例来编写程序和测试
    • 在PyChram中新建metrics.py文件,用于实现MSE、RMSE、MAE求解代码
      import numpy as npdef mean_squared_error(y_true, y_predict):"""计算y_true和y_predict之间的MSE"""assert len(y_true) == len(y_predict), \"the size of y_true must be equal to the size of y_predict"return np.sum((y_true - y_predict) ** 2) / len(y_true)def root_mean_squared_error(y_true, y_predict):"""计算y_true和y_predict之间的RMSE"""return np.sqrt(mean_squared_error(y_true, y_predict))def mean_absolute_error(y_true, y_predict):"""计算y_true和y_predict之间的MAE"""assert len(y_true) == len(y_predict), \"the size of y_true must be equal to the size of y_predict"return np.sum(np.abs(y_true - y_predict)) / len(y_true)def r2_score(y_true, y_predict):"""计算y_true和y_predict之间的R方值"""return 1 - mean_squared_error(y_true, y_predict) / np.var(y_true)
    • 在PyChram中编写正规方程解代码
      import numpy as np
      from metrics import r2_scoreclass LinearRegression:# 构造函数def __init__(self):"""初始化Linear Regression模型"""self.interception_ = None  # 定义正规方程中的截距self.coef_ = None  # 定义正规方程中的系数self._theta = None  # 定义正规方程中的内部参数def fit_normal(self, X_train, y_train):"""根据训练数据集X_train, y_train训练Linear Regression模型"""assert X_train.shape[0] == y_train.shape[0], \"the size of X_train must be equal to the size of y_train"X_train = np.array(X_train)X_b = np.hstack([np.ones((len(X_train), 1)), X_train])# 检查 X_b 的数据类型print("X_b的数据类型:", X_b.dtype)# 检查 X_b 中是否有非数值元素if np.issubdtype(X_b.dtype, np.number):print("X_b 全部为数值类型")else:print("X_b 存在非数值类型元素")# 尝试将 X_b 转换为数值类型X_b = X_b.astype(np.float64)self._theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)self.interception_ = self._theta[0]self.coef_ = self._theta[1:]return selfdef predict(self, X_predict):"""给定待预测数据集X_predict, 返回表示X_predict的结果向量"""assert self.interception_ is not None and self.coef_ is not None, \"must fit before predict!"assert X_predict.shape[1] == len(self.coef_), \"the feature number of X_predict must be equal to X_train"X_train = np.array(X_predict)X_b = np.hstack([np.ones((len(X_predict), 1)), X_predict])# 检查 X_b 的数据类型print("X_b的数据类型:", X_b.dtype)# 检查 X_b 中是否有非数值元素if np.issubdtype(X_b.dtype, np.number):print("X_b 全部为数值类型")else:print("X_b 存在非数值类型元素")# 尝试将 X_b 转换为数值类型X_b = X_b.astype(np.float64)return X_b.dot(self._theta)def score(self, X_test, y_test):"""根据测试数据集 X_test 和 y_test 确定当前模型的准确度"""y_predict = self.predict(X_test)return r2_score(y_test, y_predict)def __repr__(self):return "LinearRegression()"
      
    • 运行测试,先导入波士顿房价测试数据
      import openml
      import numpy as np# 从 openml 获取波士顿房价数据集
      dataset = openml.datasets.get_dataset(531)
      X, y, categorical_indicator, attribute_names = dataset.get_data(target=dataset.default_target_attribute, dataset_format='dataframe'
      )# 分布在50那里的一些点,可能不是真实的点,比如问卷调查中通过会设置一些上限点,而往往这些不是真实存在的额点,因此可以去除
      y_normal = y[y < 50.0]
      x_normal = X[y < 50.0]import sys
      # 替换为你的 PyCharm 工程实际路径
      project_path = 'D:/PycharmProjects/pythonProject/'
      if project_path not in sys.path:sys.path.append(project_path)# 拆分训练集和测试集
      from model_selection import train_test_split
      X_train1, y_train1, X_test1, y_test1 = train_test_split(np.array(x_normal), np.array(y_normal), seed=666)
      
      在Jupyter中先运行,如下图所示:
      在这里插入图片描述
    • 在Jupyter运行测试我们编写的模型
      from LinearRegressionModel import LinearRegression
      reg3 = LinearRegression()
      reg3.fit_normal(X_train1,y_train1)
      
      执行结果:
      在这里插入图片描述
      打印出截距、系数:
      在这里插入图片描述
      利用R方指标来衡量我们的模型最值的效果:
      在这里插入图片描述
      R方值为:0.812979405621282,相比简单线性方程中的预测结果要高出许多。在13维的空间中,我们的模型预测的结果要好得多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22041.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arcmap和ArcgisPro重装及配置迁移

近期要重装一下ArcgisPro&#xff0c;在此记录并作为大家的借鉴 1.备份配置文件&#xff1a;其中Desktop10.8为Arcmap的配置文件 2.通过控制面板卸载&#xff0c;arcpro卸载时间较长&#xff0c;先将语言包等卸载&#xff0c;最后再卸载5G主程序&#xff0c;有些文章会介绍清理…

【天线】IFA天线知识点摘抄

MIFA天线的尺寸与性能关系 1&#xff0c;辐射效率 天线越小&#xff0c;辐射效率越低。唯一好处是减少PCB占用空间 2&#xff0c;带宽 一般MIFA天线在2.4G频段内的带宽&#xff1a;S11≤-10dB的范围为2.44GHz230MHz。较小的尺寸可能会限制带宽 3&#xff0c;增益 MIFA天线的…

路由基本配置

学习目标 • 根据拓扑图进行网络布线。 • 清除启动配置并将路由器重新加载为默认状态。 • 在路由器上执行基本配置任务。 • 配置并激活以太网接口。 • 测试并检验配置。 • 思考网络实施方案并整理成文档。 任务 1&#xff1a;网络布线 使用适当的电缆类型连接网络设备。…

力扣27. 移除元素(快慢指针)

Problem: 27. 移除元素 文章目录 题目描述思路Code 题目描述 思路 定义快慢指针均指向数组起始位置&#xff0c;当fast指针指向的元素不等于val时将fast指针指向的元素赋值给slow并让slow指针向前移动&#xff0c;fast指针一直向前移动 时间复杂度: O ( n ) O(n) O(n); 空间复杂…

jemalloc 5.3.0里的快速路径分配逻辑及可借鉴的高性能编程思路

一、背景 jemalloc 5.3.0的介绍&#xff0c;我们已经持续了一段时间了&#xff0c;在 jemalloc 5.3.0的tsd模块的源码分析-CSDN博客 博客里&#xff0c;我们介绍了jemalloc的编译和调试&#xff0c;在 跟踪jemalloc 5.3.0的第一次malloc的源头原因及jemalloc相关初始化细节拓展…

Vue前端开发-Vant之Layout组件

在Vant 中&#xff0c;Layout组件用于元素的响应式布局&#xff0c;分别由van-row和van-col两个组件来实现&#xff0c;前者表示行&#xff0c;后者被包裹在van-row组件中&#xff0c;表示列&#xff0c;共有24列栅格组成&#xff0c;在van-col组件中&#xff0c;span属性表示所…

【UCB CS 61B SP24】Lecture 5 - Lists 3: DLLists and Arrays学习笔记

本文内容为构建双向循环链表、使用 Java 的泛型将其优化为通用类型的链表以及数组的基本语法介绍。 1. 双向链表 回顾上一节课写的代码&#xff0c;当执行 addLast() 与 getLast() 方法时需要遍历链表&#xff0c;效率不高&#xff0c;因此可以添加一个指向链表末尾的索引&am…

Ubuntu 22.04 Install deepseek

前言 deepseekAI助手。它具有聊天机器人功能&#xff0c;可以与用户进行自然语言交互&#xff0c;回答问题、提供建议和帮助解决问题。DeepSeek 的特点包括&#xff1a; 强大的语言理解能力&#xff1a;能够理解和生成自然语言&#xff0c;与用户进行流畅的对话。多领域知识&…

边缘安全加速(ESA)套餐

为帮助不同规模和需求的企业选择合适的解决方案&#xff0c;边缘安全加速&#xff08;ESA&#xff09;提供了多种套餐。以下是四种主要套餐的介绍&#xff0c;每个套餐都根据企业需求提供不同的功能和服务水平&#xff0c;从基础安全保护到企业级的全面防护与加速。 1. 各版本详…

I²C简介

前言 IC&#xff08;Inter-Integrated Circuit, 内置集成电路&#xff09;总线是由Philips公司&#xff08;现属于恩智浦&#xff09;在上世纪80年代开发的两线式串行通信总线&#xff0c;用于连接微控制器及其外围设备&#xff0c;控制设备之间的通信。 IC总线的物理拓扑示意…

Frp部署文档

Frp部署文档 开源项目地址:https://github.com/fatedier/frp项目中文文档地址&#xff1a;https://github.com/fatedier/frp/blob/dev/README_zh.md官网文档地址: https://gofrp.org/zh-cn/docs/发布包地址&#xff1a;https://github.com/fatedier/frp/releases 要注意对应的…

ArcGIS Pro进行坡度与坡向分析

在地理信息系统中&#xff0c;坡度分析是一项至关重要的空间分析方法&#xff0c;旨在精确计算地表或地形的坡度&#xff0c;为地形特征识别、土地资源规划、环境保护、灾害预警等领域提供科学依据。本文将详细介绍如何利用ArcGIS Pro这一强大的地理信息系统软件&#xff0c;进…

从卡顿到丝滑:火山引擎DeepSeek-R1引领AI工具新体验

方舟大模型体验中心全新上线&#xff0c;免登录体验满血联网版Deep Seek R1 模型及豆包最新版模型:https://www.volcengine.com/experience/ark?utm_term202502dsinvite&acDSASUQY5&rcGO9H7M38 告别DeepSeek卡顿&#xff0c;探索火山引擎DeepSeek-R1的丝滑之旅 在A…

Python的那些事第二十八篇:数据分析与操作的利器Pandas

Pandas:数据分析与操作的利器 摘要 Pandas是基于Python的开源数据分析库,广泛应用于数据科学、机器学习和商业智能等领域。它提供了高效的数据结构和丰富的分析工具,能够处理结构化数据、时间序列数据以及复杂的数据转换任务。本文从Pandas的基础概念入手,深入探讨其核心…

Linux-CentOS 7安装

Centos 7镜像&#xff1a;https://pan.baidu.com/s/1fkQHYT64RMFRGLZy1xnSWw 提取码: q2w2 VMware Workstation&#xff1a;https://pan.baidu.com/s/1JnRcDBIIOWGf6FnGY_0LgA 提取码: w2e2 1、打开vmware workstation 2、选择主界面的"创建新的虚拟机"或者点击左上…

如何基于transformers库通过训练Qwen/DeepSeek模型的传统分类能力实现文本分类任务

文章目录 模型与环境准备文档分析源码解读模型训练及推理方式进阶:CPU与显存的切换进阶:多卡数据并行训练🔑 DDP 训练过程核心步骤🚫 DDP 不适用于模型并行⚖️ DDP vs. Model Parallelism⚙️ 解决大模型训练的推荐方法🎉进入大模型应用与实战专栏 | 🚀查看更多专栏…

FX5U PLC模拟量转换FC (S_ITR源代码)

模拟量转换FC数学算法基础请参考下面文章链接: PLC模拟量采集算法数学基础(线性传感器)_plc稳钩算法公式-CSDN博客文章浏览阅读3.3k次,点赞3次,收藏7次。本文介绍了PLC模拟量采集的数学基础,重点关注线性传感器的一次函数模型y=kx+b。内容涉及直线方程在温度换算中的应用…

数字人源头厂商-源码出售源码交付-OEM系统贴牌

引言 在数字化浪潮中&#xff0c;数字人正成为创新应用的焦点。从虚拟偶像活跃于舞台&#xff0c;到虚拟客服在各行业的普及&#xff0c;数字人展现出巨大的潜力。搭建数字人源码系统&#xff0c;是融合多领域前沿技术的复杂工程&#xff0c;涵盖图形学、人工智能、语音处理等…

基于WebRTC与AI大模型接入EasyRTC:打造轻量级、高实时、强互动的嵌入式音视频解决方案

随着物联网和嵌入式技术的快速发展&#xff0c;嵌入式设备对实时音视频通信的需求日益增长。然而&#xff0c;传统的音视频解决方案往往存在体积庞大、实时性差、互动体验不佳等问题&#xff0c;难以满足嵌入式设备的资源限制和应用场景需求。 针对以上痛点&#xff0c;本文将介…

SpringBoot使用TraceId日志链路追踪

项目场景&#xff1a; ??有时候一个业务调用链场景&#xff0c;很长&#xff0c;调了各种各样的方法&#xff0c;看日志的时候&#xff0c;各个接口的日志穿插&#xff0c;确实让人头大。为了解决这个痛点&#xff0c;就使用了TraceId&#xff0c;根据TraceId关键字进入服务…