L2线性回归模型

news2024/9/25 7:26:18
  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

鸢尾花数据集的单变量与多变量预测

在这周学习如何使用 机器学习 模型对鸢尾花(Iris)数据集进行单变量与多变量预测。我们将使用鸢尾花数据集中不同的特征进行预测,分别使用单变量和多变量的回归模型。

0.学习时长与学习成绩
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

dataset = pd.read_csv('data/studentscores.csv')
X = dataset.iloc[ : , :1].values
Y = dataset.iloc[ : ,1].values

from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, 
                                                    test_size=1/4, 
                                                    random_state=0)
from sklearn.linear_model import LinearRegression

regressor = LinearRegression()
regressor = regressor.fit(X_train, Y_train)   
Y_pred = regressor.predict(X_test)
plt.scatter(X_train, Y_train, color='red')
plt.plot(X_train, regressor.predict(X_train), color='blue')

plt.show()       
plt.scatter(X_test, Y_test, color='red')
plt.plot(X_test, regressor.predict(X_test), color='blue')
plt.show()                                          

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

1. 鸢尾花数据集简介

鸢尾花数据集是一个经典的机器学习数据集,包含150条记录,每条记录有四个特征以及一个类别标签。这四个特征分别是:

  • 花萼长度 (sepal length)
  • 花萼宽度 (sepal width)
  • 花瓣长度 (petal length)
  • 花瓣宽度 (petal width)

我们可以使用这些特征来构建预测模型。在单变量预测中,我们将使用单一特征来预测目标变量,而在多变量预测中,将使用多个特征来提高预测准确性。

2. 数据准备

首先,我们加载鸢尾花数据集并做简单的数据清理和预处理。这里我们选择了三个特征来预测花瓣长度。

import pandas as pd

# 数据集URL
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class']

# 读取数据
dataset = pd.read_csv(url, names=names)

# 查看前5行数据
print(dataset.head())
3. 单变量预测:基于花萼宽度预测花瓣长度
3.1 数据可视化

在开始模型训练之前,我们首先对数据进行可视化,观察特征之间的关系。

import matplotlib.pyplot as plt
import seaborn as sns

# 选择特征
x = dataset[['花萼-width']]
y = dataset['花瓣-length']

# 绘制散点图
sns.scatterplot(x=x['花萼-width'], y=y)
plt.xlabel('花萼宽度')
plt.ylabel('花瓣长度')
plt.title('花萼宽度与花瓣长度的关系')
plt.show()
3.2 构建线性回归模型

接下来,我们使用 sklearn 中的 线性回归 模型,基于单一变量(花萼宽度)来预测花瓣长度。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

# 构建线性回归模型
model = LinearRegression()
model.fit(x_train, y_train)

# 预测
y_pred = model.predict(x_test)

# 评估模型
print(f"均方误差: {mean_squared_error(y_test, y_pred)}")
print(f"R²得分: {r2_score(y_test, y_pred)}")
3.3 结果可视化
# 绘制预测值与真实值的对比
plt.figure(figsize=(6, 4))
plt.plot(range(len(y_test)), y_test, label='真实值')
plt.plot(range(len(y_pred)), y_pred, label='预测值')
plt.title('单变量线性回归预测')
plt.legend()
plt.show()

在这里插入图片描述

4. 多变量预测:使用多个特征预测花瓣长度

在多变量预测中,我们将选择多个特征来提高模型的预测效果。这里我们选择了 花萼宽度花瓣宽度花瓣长度 三个特征来预测 花瓣长度

4.1 数据可视化
# 选择特征
x = dataset[['花萼-width', '花瓣-width', '花萼-length']]
y = dataset['花瓣-length']

# 绘制相关关系图
sns.pairplot(dataset, x_vars=['花萼-width', '花瓣-width', '花萼-length'], y_vars='花瓣-length', kind='reg')
plt.show()

在这里插入图片描述

4.2 构建多变量线性回归模型
# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

# 构建线性回归模型
model = LinearRegression()
model.fit(x_train, y_train)

# 预测
y_pred = model.predict(x_test)

# 评估模型
print(f"均方误差: {mean_squared_error(y_test, y_pred)}")
print(f"R²得分: {r2_score(y_test, y_pred)}")
4.3 结果可视化
# 绘制预测值与真实值的对比
plt.figure(figsize=(6, 4))
plt.plot(range(len(y_test)), y_test, label='真实值')
plt.plot(range(len(y_pred)), y_pred, label='预测值')
plt.title('多变量线性回归预测')
plt.legend()
plt.show()

6. 总结

这周学习了如何使用机器学习模型对鸢尾花数据集进行单变量和多变量预测。通过特征的选择和模型的构建,可以看到多变量模型可以更好地捕捉数据特征间的关系,从而提高预测的准确性。

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

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

相关文章

北京中实新材料公司:安全筑基,共绘新材料产业新篇章

北京中实新材料有限责任公司(以下简称“北京中实”),作为中关村科技发展(控股)股份有限公司旗下的重要成员,近年来在安全生产、技术创新及企业合作等方面取得了显著进展。近期,公司围绕安全生产月及新材料研发中心成立等核心活动,展开了一系列富有成效的工作,进一步推动了企业的…

【Java算法】递归

🔥个人主页: 中草药 🔥专栏:【算法工作坊】算法实战揭秘 🍇一.递归 概念 递归是一种解决问题的方法,其中函数通过调用自身来求解问题。这种方法的关键在于识别问题是否可以被分解为若干个相似但规模更小…

深入Redis:复杂的集群

广义的集群,可能说只要是多台机器组成了分布式系统,就可以称之为集群。 狭义的集群,指的是Redis提供的集群模式,这个集群模式之下,主要是解决存储空间不足的问题,以及如何拓展存储空间。 之前的哨兵模式&…

C++中string的简单实现

string的简单实现中一些函数的实现可以复用一些其他的函数来实现;比较重要的是在实现是深浅拷贝问题 目录 string的结构 实现构造和析构 reserve扩容 容量 push_back和append insert和erase的实现 swap的实现(不是成员函数但是string类的友元&…

【c++】类和对象详解

✅博客主页:爆打维c-CSDN博客​​​​​​ 🐾 🔹分享c语言知识及代码 来都来了! 点个赞给博主个支持再走吧~! 一.类的定义 (1)类定义格式 class为类定义的关键字,定义一个类格式如下: class 类名{//代码…

kubelet 探针

目录 1 k8s中kubelet 探针的介绍 1.1 探针是由 kubelet 对容器执行的定期诊断: 1.2 Kubelet 可以选择是否执行在容器上运行的三种探针执行和做出反应: 1.3 ReadinessProbe 与 LivenessProbe 的区别 1.4 StartupProbe 与 ReadinessProbe、LivenessProbe 的区别 2 实…

CCRC-DSA数据安全评估师:网络安全风险评估

1.网络安全风险评估概述 1.1概念 在当今信息化时代,网络安全成为了组织不可或缺的一部分。 风险评估作为一种科学方法,其目的是对网络系统的保密性、完整性、可控性和可用性这四个核心安全属性进行深入分析。 这一过程不仅包括识别网络系统中存在的脆…

Snipaste无法使用F1、F3等快捷键的保姆级解决方法

在Snipaste中按F1、F3等快捷键无效的可能原因: 1. 软件设置: 检查Snipaste的设置,确保F1被正确设置为截屏热键,并确认没有其他软件占用或冲突。 2. 热键冲突: 笔记本电脑的功能键(F1-F12)通常…

MySQL 数据库:原理、应用与发展

摘要:本文深入探讨了 MySQL 数据库相关内容。首先介绍了 MySQL 作为开源关系型数据库管理系统的显著特点,包括易用性、跨平台性、高性能、可扩展性、开源免费以及数据安全性等方面。接着详细阐述了其安装与配置过程,涵盖在不同操作系统上的安…

STM32使用 :串口的接收与发送

一、串口 在 STM32 中,串口(UART,通用异步收发传输器)是用于串行通信的外设。它在嵌入式系统中的作用非常广泛,主要包括几个方面 数据通信 串口用于微控制器与其他设备之间的数据传输。这些设备可以是其他微控制器、…

F12抓包08:查看网站Cookie

课程大纲 1、查看Cookie 1. 应用界面查看:按F12进入浏览器的开发者模式 - “应用”(Application) - Cookie,可查看Cookie并进行增、删、改、查操作。 2. 控制台命令行查看:按F12进入浏览器的开发者模式 - “控制台”&…

【无标题】nginx服务器代码信息、数据库连接信息、敏感文件的路径、服务器版本信息发起有针对性的攻击

Nginx敏感文件的路径、服务器版本信息 Nginx 403、404、500等错误时,返回详细错误信息。报错信息中可能会包含服务器代码信息、数据库连接信息、敏感文件的路径、服务器版本信息等,攻击者可以利用这些信息来寻找已知的漏洞,从而发起有针对性…

『功能项目』管理器基类【38】

我们打开上一篇37单例模式框架的项目&#xff0c; 本章要做的事情是编写管理器基类 首先创建脚本&#xff1a;ManagerBase.cs using UnityEngine; public abstract class ManagerBase : MonoBehaviour{public virtual void Init() { } } public class ManagerBase<T> : …

【Qt系列样式表】探索Qt Widget的艺术化设计与应用(Macos风格)(持续更新中...)

✨✨ Rqtz 个人主页 : 点击✨✨ &#x1f308;Qt系列专栏:点击 &#x1f388;PyQt系列专栏:点击&#x1f388; &#x1f388;Qt智能车上位机专栏: 点击&#x1f388; &#x1f388;Qt串口助手专栏:点击&#x1f388; &#x1f4ab;宗旨:共享IT之美,共创机器未来 目录 界面…

毕业论文word页眉页脚和页码的问题

多找B站视频查看视频操作方法。 问题1&#xff1a; 不同章节的页眉显示不同内容。 解决办法&#xff1a; “布局”里面插入分节符 &#xff08;非 分页符。&#xff09; 问题2&#xff1a; 页眉需要奇偶页内容不同 解决办法&#xff0c;编辑页眉部分&#xff0c;设置 奇偶页…

Qt (15)【Qt窗口 —— 字体对话框 QFontDialog | 输入对话框 QInputDialog】

阅读导航 引言一、字体对话框 QFontDialog1. 简介2. 基本用法3. 示例代码 二、输入对话框 QInputDialog1. 简介2. 基本用法&#xff08;1&#xff09;双精度浮点型输入数据对话框&#xff08;2&#xff09;整型输入数据对话框&#xff08;3&#xff09;选择条目型输入数据框 3.…

李沐对大模型趋势的几点判断

李沐是上海交通大学 2011 届计算机科学与工程系本硕系友。他曾担任亚马逊资深首席科学家&#xff0c;加州大学伯克利分校和斯坦福大学的访问助理教授&#xff0c;是前 Marianas Labs 联合创始人&#xff0c;深度学习框架 Apache MXNet 的创始人之一。目前是 BosonAI 联合创始人…

【数据分析】标准误差与标准差的区别

标准误差&#xff08;Standard Error, SE&#xff09;和标准差&#xff08;Standard Deviation, SD&#xff09;是两个在统计学中非常重要的概念&#xff0c;但它们的含义和用途有所不同。以下是它们之间的主要区别&#xff1a; 定义&#xff1a; 标准差&#xff1a;衡量单个数…

【mybatis】使用模糊查询时报错:Encountered unexpected token: “?“ “?“

报错信息如下&#xff1a; Mapper.xml报错代码&#xff1a; AND HILIST_NAME like %#{hilistName}% 解决方案&#xff1a; 把模糊查询的 sql 语句改为使用 CONCAT 命令拼接, 就不会报错了。 AND HILIST_NAME like CONCAT(%, #{hilistName},%)

深入探讨-JavaScript-逻辑赋值运算符

null && 100**2 // null undefined && 100**2 // undefined 逻辑赋值运算符 && || ?? 这个运算符将赋值与条件逻辑运算符结合在一起&#xff0c;因此命名为**“逻辑赋值”** 。它们只是一种简写&#xff0c; 例如&#xff0c;x && y是x …