【机器学习】正规方程的简单介绍以及如何使用Scikit-Learn实现基于正规方程的闭式解线性回归

引言

Scikit-learn 是一个开源的机器学习库,它支持 Python 编程语言。它提供了多种机器学习算法的实现,并用于数据挖掘和数据分析

文章目录

  • 引言
  • 一、正规方程的定义
  • 二、正规方程的原理
  • 三、使用 Scikit-Learn 实现基于正规方程的闭式解线性回归
    • 3.1 工具
    • 3.2 线性回归闭式解
      • 3.2.1 加载数据集
      • 3.2.2 创建并拟合模型
      • 3.2.3 查看参数
      • 3.2.4 进行预测
    • 3.3 第二个例子
    • 3.4 总结

一、正规方程的定义

在机器学习中,线性回归是一种预测连续值(如房价、温度等)的监督学习算法。闭式解线性回归,也称为正规方程(Normal Equation)方法,是一种直接计算线性回归模型参数的方法,无需迭代

二、正规方程的原理

对于线性回归问题,我们通常有如下形式的模型:
y = b + w 1 x 1 + w 2 x 2 + . . . + w n x n y = b + w_1x_1 + w_2x_2 + ... + w_nx_n y=b+w1x1+w2x2+...+wnxn
其中 y y y是目标变量, x 1 , x 2 , . . . , x n x_1, x_2, ..., x_n x1,x2,...,xn是特征, w 1 , w 2 , . . . , w n w_1, w_2, ..., w_n w1,w2,...,wn 是特征对应的权重, b b b 是截距。
我们的目标是找到权重 w w w 和截距 b b b,使得模型预测的误差最小。在正规方程方法中,我们通常使用均方误差(Mean Squared Error, MSE)作为损失函数,其形式如下:
J ( w , b ) = 1 2 m ∑ i = 1 m ( h w , b ( x ( i ) ) − y ( i ) ) 2 J(w, b) = \frac{1}{2m} \sum_{i=1}^{m} (h_{w,b}(x^{(i)}) - y^{(i)})^2 J(w,b)=2m1i=1m(hw,b(x(i))y(i))2
其中 m m m是样本数量, h w , b ( x ) h_{w,b}(x) hw,b(x) 是我们的假设函数(线性模型)。
为了最小化损失函数 $J(w, b)4,我们对 w w w b b b进行求导,并令导数等于零。通过这种方式,我们可以得到 w w w b b b 的闭式解:
w = ( X T X ) − 1 X T y w = (X^T X)^{-1} X^T y w=(XTX)1XTy
b = y ˉ − w T x ˉ b = \bar{y} - w^T \bar{x} b=yˉwTxˉ
其中:
- X X X是一个 m × n m \times n m×n 的矩阵,包含了所有样本的特征(每一行是一个样本,每一列是一个特征)。

  • X T X^T XT X X X 的转置。
  • x ˉ \bar{x} xˉ 是所有样本特征的平均值。
  • y ˉ \bar{y} yˉ 是所有样本目标值的平均值。

三、使用 Scikit-Learn 实现基于正规方程的闭式解线性回归

  • 利用开源的、可用于商业目的的机器学习工具包— scikit-learn实现基于正规方程的闭式解线性回归

3.1 工具

使用scikit-learn的函数以及matplotlibNumPy

import numpy as np
np.set_printoptions(precision=2)
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.preprocessing import StandardScaler
from lab_utils_multi import  load_house_data
import matplotlib.pyplot as plt
dlblue = '#0096ff'; dlorange = '#FF9300'; dldarkred='#C00000'; dlmagenta='#FF40FF'; dlpurple='#7030A0'; 
plt.style.use('./deeplearning.mplstyle')

3.2 线性回归闭式解

Scikit-learn 有一个 线性回归模型,它实现了闭式线性回归。
让我们使用早期实验的数据 - 一个 1000 平方英尺的房子以 30 万美元的价格售出,一个 2000 平方英尺的房子以 50 万美元的价格售出。

房屋面积 (1000 平方英尺)价格 (以千美元计)
1300
2500

3.2.1 加载数据集

X_train = np.array([1.0, 2.0])   # 特征
y_train = np.array([300, 500])   # 目标值

3.2.2 创建并拟合模型

下面的代码使用scikit-learn执行回归。

  1. 创建一个回归对象。
  2. 第二步使用与对象关联的方法 fit。这执行回归,将参数拟合到输入数据。工具包期望一个二维的 X 矩阵。
linear_model = LinearRegression()
# X 必须是一个 2-D 矩阵
linear_model.fit(X_train.reshape(-1, 1), y_train) 

输出结果:
在这里插入图片描述

3.2.3 查看参数

scikit-learn中, w \mathbf{w} w b \mathbf{b} b 参数被称为 ‘系数’ 和 ‘截距’。

b = linear_model.intercept_
w = linear_model.coef_
print(f"w = {w:}, b = {b:0.2f}")
print(f"'手动' 预测: f_wb = wx+b : {1200*w + b}")

3.2.4 进行预测

调用 predict 函数生成预测。

y_pred = linear_model.predict(X_train.reshape(-1, 1))
print("训练集上的预测结果:", y_pred)
X_test = np.array([[1200]])
print(f"预测 1200 平方英尺房子的价格: ${linear_model.predict(X_test)[0]:0.2f}")

3.3 第二个例子

第二个例子来自一个早期的实验,该实验具有多个特征。最终的参数值和预测结果与该实验中未标准化的 ‘长期运行’ 结果非常接近。那次未标准化的运行花费了数小时才产生结果,而这个几乎是即时的。闭式解在像这样的小型数据集上工作得很好,但在大型数据集上可能会计算上要求较高。

闭式解不需要标准化

# 加载数据集
X_train, y_train = load_house_data()
X_features = ['size(sqft)','bedrooms','floors','age']
linear_model = LinearRegression()
linear_model.fit(X_train, y_train) 
b = linear_model.intercept_
w = linear_model.coef_
print(f"w = {w:}, b = {b:0.2f}")
print(f"训练集上的预测结果:\n {linear_model.predict(X_train)[:4]}" )
print(f"使用 w,b 的预测结果:\n {(X_train @ w + b)[:4]}")
print(f"目标值 \n {y_train[:4]}")
x_house = np.array([1200, 3,1, 40]).reshape(-1,4)
x_house_predict = linear_model.predict(x_house)[0]
print(f" 预测一个 1200 平方英尺,3 个卧室,1 层,40 年历史的房子的价格 = ${x_house_predict*1000:0.2f}")

输出结果:
在这里插入图片描述
在这里插入图片描述

3.4 总结

  • 利用了一个开源的机器学习工具包,scikit-learn
  • 使用该工具包实现了闭式解的线性回归

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用rdma-core来实现RDMA操作

rdma-core 是一个开源项目,为远程直接内存访问(RDMA)提供用户空间的支持。它包括 RDMA 设备的驱动程序、库和工具,旨在简化 RDMA 应用的开发和部署。 基础知识参考博文: 一文带你了解什么是RDMA RDMA 高性能架构基本…

“论数据分片技术及其应用”写作框架软考高级论文系统架构设计师论文

论文真题 数据分片就是按照一定的规则,将数据集划分成相互独立、正交的数据子集,然后将数据子集分布到不同的节点上。通过设计合理的数据分片规则,可将系统中的数据分布在不同的物理数据库中,达到提升应用系统数据处理速度的目的…

快速入门 Spring Security

1 认证授权 认证(Authentication):可以理解为登录,验证访问者的身份。包括用户名密码认证、手机号短信验证码认证、指纹识别认证、面容识别认证等等授权(Authorization):授权发生在系统完成身份…

springboot校园商店配送系统-计算机毕业设计源码68448

摘要 本文详细阐述了基于Spring Boot框架的校园商店配送系统的设计与实现过程。该系统针对校园内的用户需求,整合了用户注册与登录、商品浏览与购买、订单管理、配送追踪、用户反馈收集以及后台管理等功能,为校园内的普通用户、商家、配送员和管理员提供…

用深度学习改进乳腺癌MRI诊断| 文献速递--AI辅助的放射影像疾病诊断

Title 题目 Improving breast cancer diagnostics with deep learning for MRI 用深度学习改进乳腺癌MRI诊断 01 文献速递介绍 乳腺磁共振成像(MRI)是一种检测乳腺癌的高度敏感的方式,报告的敏感性超过80%。传统上,其在筛查…

教程系列4 | 趋动云『社区项目』极速体验 LivePortrait 人脸表情“移花接木”大法

LivePortrait LivePortrait 由快手可灵大模型团队开源,只需 1 张原图就能生成动态视频。 LivePortrait 的核心优势在于其卓越的表情"迁移"技术,能够令静态图像中的人物瞬间焕发活力,无论是眨眼、微笑还是转头,皆栩栩如…

spaCy语言模型下载

spaCy 是一个基于 Python 编写的开源自然语言处理(NLP)库,它提供了一系列的工具和功能,用于文本预处理、文本解析、命名实体识别、词性标注、句法分析和文本分类等任务。 spaCy支持多种语言模型对文本进行处理,包括中文…

JAVA基础 - 异常处理

目录 一. 简介 二. 受检异常 三. 非受检异常 四. 自定义异常类 一. 简介 异常处理是 Java 编程中的一个重要概念,它用于处理程序运行时可能出现的不正常情况。 在 Java 中,异常可以分为两类:受检异常(Checked Exception&…

一篇长文搭建AI大模型应用平台架构

在研究了6家知名公司如何部署生成式AI应用程序后,注意到它们的平台有很多相似之处。概述了生成式AI大模型应用平台的常见组件、它们的作用以及它们的实现方式。尽力保持架构的通用性,但某些应用程序可能会有所不同。 Generative AI大模型应用平台整体架…

【Vulnhub系列】Vulnhub_pipe 靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub-pipe 靶场渗透 原文转载已经过授权 原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io) 一、环境配置 1、解决IP扫描不到问题 2、打开虚拟机,并修改网络连接模式为【NAT】即可 二、信息收集 1…

树状机器学习模型综述(含python代码)

树状机器学习模型综述 树状模型是机器学习中一种非常重要的算法类别,因其直观的结构和良好的可解释性而广泛应用于分类和回归任务。本文将综述几种常见的树状模型,包括决策树、随机森林、LightGBM、XGBoost和CatBoost,讨论它们的原理、用途以…

自适应降噪与沉浸音效的结合,戴上QCY MeloBuds Pro,开启静谧音乐之旅

现在蓝牙耳机的选择真是太丰富了,其中性价比高的还是国产品牌,我之前用过几款QCY的耳机,感觉不管是设计,还是音质,以及佩戴的舒适度,都要比同价位的耳机更出色一些。最近我又新入手了一款 MeloBuds Pro&…

【QT 5-控件对比-小技巧-控件显示文字和更改文字-label控件-lineEdit控件-记录】

【QT 5-控件对比-小技巧-控件显示文字和更改文字-label控件-lineEdit控件-记录】 1、前言2、环境3、控件说明(1)QLabel(2)QLineEdit 4、控件代码说明(1)第一种控件 QLabel1-UI文件上编写2-代码控制3-完全代…

java实现加水印功能

1-Word加水印 实现原理&#xff1a; ● 通过页眉页脚生成文字水印或图片水印&#xff0c;然后设置页眉页脚的高度以及旋转角度来设置水印。 源代码&#xff1a; 1、引入pom依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml…

在linux编译JsonCpp 1.9.5

编译方法 mkdir jsoncpp-Sandbox ; cd jsoncpp-Sandbox git clone https://github.com/open-source-parsers/jsoncpp.git mkdir jsoncpp-build mkdir jsoncpp-install cd ./jsoncpp-build/ cmake ../jsoncpp/ -DCMAKE_INSTALL_PREFIX/home/vis/work/SourceCode/jsoncpp-Sandbo…

智能体一键生成个性化贺卡

文章目录 一、前言二、创建智能体编辑名称头像简介人物设定开场白引导示例高级配置调试发布 三、总结 一、前言 欢迎来到节日的温馨角落&#xff01;我是您的节日贺卡助手&#xff0c;专为您打造独一无二的节日祝福。无论是温馨的问候&#xff0c;还是创意的惊喜&#xff0c;我…

【Threejs进阶教程-着色器篇】5. 2D SDF(二)圆形波纹效果

2D SDF 圆形波纹效果 关于本Shader教程前四篇地址&#xff0c;请按顺序学习本博客使用模板代码中的Shader模板绘制第一圈波纹绘制多圈波纹fract函数 让光波动起来使用uniform控制最终效果追加uniform&#xff0c;以及lil.gui控制器修改片元着色器最终效果 完整源码 关于本Shad…

leetcode日记(63)颜色分类

感觉就是排序问题&#xff1f;我使用的是时间复杂度比较高的简单粗暴排序法&#xff0c;时间复杂度O&#xff08;n^2&#xff09;。 class Solution { public:void sortColors(vector<int>& nums) {int nnums.size();for(int i0;i<n;i){for(int ji1;j<n;j){if…

鸿蒙应用框架开发【选择并查看文档与媒体文件】 本地数据与文件

选择并查看文档与媒体文件 介绍 应用使用ohos.file.picker、ohos.file.fs等接口&#xff0c;实现了picker拉起文档编辑保存、拉起系统相册图片查看、拉起视频并播放的功能。 效果预览 使用说明&#xff1a; 在首页&#xff0c;应用显示查看最近打开文件功能的跳转按钮&…

APP自动化测试 ------ 滑动和拖拽事件操作!

前言 Appium自动化测试中的常见模拟操作涵盖了多种用户交互行为&#xff0c;这些操作对于自动化测试框架来说至关重要&#xff0c;因为它们能够模拟真实用户的使用场景&#xff0c;从而验证应用程序的功能和稳定性。 今天讲解滑动和拖拽事件操作&#xff1a; 1、swipe滑动事…