【机器学习实例讲解】机器学习-鸢尾花数据集多分类第02课

问题定义与理解:
在这里插入图片描述

明确机器学习任务的目标,是分类、回归、聚类、强化学习还是其他类型的问题。
确定业务背景和需求,了解所处理数据的现实意义。
数据收集:

根据任务目标从各种来源获取原始数据,可以是数据库、文件、传感器、网络日志等。
数据预处理:

数据清洗:处理缺失值、异常值、重复值等问题。
数据转换:对数据进行规范化、标准化、归一化等操作以适应模型要求。
特征编码:将非数值特征(如类别标签)转化为数值形式。
特征工程:

特征选择:根据相关性和重要性筛选出最有价值的特征。
特征提取或构造:通过统计分析、降维技术(如PCA)、特征交叉等方式生成新的特征。
数据划分:

将数据集划分为训练集、验证集和测试集,用于训练模型、调整参数以及评估模型性能。
模型选择与训练:

根据问题特点选择合适的机器学习算法,如决策树、支持向量机、神经网络、随机森林等。
使用训练集对模型进行训练,并可能涉及到超参数调整优化。
模型评估:

在验证集上使用不同的评价指标(如准确率、AUC、F1分数、RMSE等)来评估模型性能。
通过交叉验证等方法确保评估结果稳定可靠。
模型调优:

根据验证集上的表现调整模型参数或更换模型,以提高预测性能。
模型验证与确认:

使用独立的测试集对经过调优的模型进行最终评估,确定模型在未见过的数据上的泛化能力。
模型部署与监控:

将训练好的模型应用到实际系统中,例如嵌入应用程序、API服务或实时系统中。
监控模型在生产环境中的表现,定期更新或重新训练模型以保持其性能。
让我们以鸢尾花分类问题为例,并结合代码详细讲解每个步骤:

问题定义与理解: 我们要解决的问题是基于鸢尾花数据集进行多类别分类。该数据集包含了4种特征(花瓣长度、花瓣宽度、花萼长度、花萼宽度)和3个类别标签(Setosa, Versicolour, Virginica)。

数据收集: 通过sklearn.datasets库加载鸢尾花数据集。

from sklearn.datasets import load_iris

加载数据集

iris = load_iris()
X = iris.data  # 特征数据,形状为(150, 4)
y = iris.target  # 类别标签,形状为(150,)print("特征维度:", X.shape)
print("类别标签:", np.unique(y))

数据预处理: 鸢尾花数据集已经清理过,无需额外处理缺失值或异常值。但为了演示,我们仍对其进行标准化操作。

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
X_scaled = scaler.fit_transform(X)  # 对特征数据进行标准化

此处实际上鸢尾花数据集的数值范围较小且分布均匀,标准化非必须

特征工程: 在这个例子中,原始特征足以描述样本,因此不需要构造新的特征。

数据划分: 使用train_test_split函数将数据划分为训练集和测试集。

from sklearn.model_selection import train_test_split

划分数据集

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

模型选择与训练: 我们选择使用逻辑回归作为分类器进行训练。

from sklearn.linear_model import LogisticRegression

创建逻辑回归模型

clf = LogisticRegression(multi_class='multinomial', solver='lbfgs')

训练模型

clf.fit(X_train, y_train)

模型评估: 训练完成后,在测试集上评估模型性能。

from sklearn.metrics import accuracy_score, classification_report

预测测试集结果

y_pred = clf.predict(X_test)

计算准确率

accuracy = accuracy_score(y_test, y_pred)
print("模型准确率:", accuracy)

打印详细的分类报告

print(classification_report(y_test, y_pred))

模型调优: 假设我们需要优化模型,可以尝试调整参数,例如正则化强度C。

使用网格搜索寻找最优参数

# 导入 GridSearchCV,这是一个用于网格搜索的类,用于寻找最佳参数
from sklearn.model_selection import GridSearchCV
#是 一个字典,包含要搜索的参数和它们的范围,它是逻辑 分类器的参数
#L-BFGS 是一个梯度下降优化器,它使用L-BFGS 优化器,
param_grid = {'C': [0.001, 0.01, 0.1, 1, 10]}
#实例化一个逻辑分类器,使用逻辑回归模型,指定multinomial多项式贝叶斯分类器,使用L-BFGS拟牛顿算法 作为优化器,cv交差验证设置为5
#cv=5把数据集分成5个子集,一个验证集,四个训练集
grid_search = GridSearchCV(LogisticRegression(multi_class='multinomial', solver='lbfgs'), param_grid, cv=5)
grid_search.fit(X_train, y_train)
#保存最佳参数到一个变量中gest_clf
best_clf = grid_search.best_estimator_
print("最佳参数:", grid_search.best_params_)

模型验证与确认: 用最优参数重新训练模型,并在测试集上再次评估。

使用最优参数训练模型并预测

best_clf.fit(X_train, y_train)
y_pred_best = best_clf.predict(X_test)

再次计算准确率

accuracy_best = accuracy_score(y_test, y_pred_best)
print("优化后模型准确率:", accuracy_best)

模型部署与监控: 实际应用时,经过训练和调优的模型会被打包成API服务或嵌入到应用程序中,同时需要对模型在新数据上的表现进行持续监控,当模型性能下降时需及时更新模型。此处简化演示过程,略去部署环节。

L-BFGS优化的多项式逻辑回归网格搜索:寻找最佳C参数

L-BFGS优化器

L-BFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno)是一种在机器学习中广泛使用的优化算法,特别是在训练大规模神经网络时。L-BFGS属于拟牛顿法的一种,它通过逼近牛顿法中的Hessian矩阵(二阶导数矩阵)来优化目标函数,但是相比于传统的BFGS算法,L-BFGS通过限制存储历史信息的数量来减少内存消耗,使得其能够处理更大规模的问题。

L-BFGS优化器的实现过程主要包括以下几个步骤:

初始化:选择初始点 x0x_0x0​ 和初始化矩阵 B0B_0B0​(通常为单位矩阵)。
计算梯度和方向:在每一步迭代中,计算目标函数 f(x)f(x)f(x) 在当前点 xxx 的梯度 gkg_kgk​。然后,通过求解线性方程组 Bkpk=−gkB_k p_k = -g_kBk​pk​=−gk​ 来得到搜索方向 pkp_kpk​。
一维搜索:沿着搜索方向 pkp_kpk​ 进行一维搜索,找到使目标函数 f(x)f(x)f(x) 减小的步长 αk\alpha_kαk​。
更新:根据找到的步长 αk\alpha_kαk​ 更新当前点 xxx 和函数值 f(x)f(x)f(x),并计算新的梯度 gk+1g_{k+1}gk+1​。
更新矩阵 Bk+1B_{k+1}Bk+1​:利用当前的梯度 gkg_kgk​ 和 gk+1g_{k+1}gk+1​ 以及搜索方向 pkp_kpk​ 来更新逼近Hessian矩阵的逆矩阵 BkB_kBk​,得到 Bk+1B_{k+1}Bk+1​。这一步是L-BFGS的核心,它通过保留最近的 mmm 个向量对来近似完整的BFGS更新,从而降低了内存消耗。
迭代终止条件:检查是否满足迭代终止条件,如梯度范数小于某个阈值或达到最大迭代次数。如果满足,则停止迭代;否则,返回步骤2继续迭代。
L-BFGS优化器在训练神经网络时具有以下优点:

内存效率:L-BFGS通过限制存储历史信息的数量来降低内存消耗,使其能够处理大规模问题。
快速收敛:拟牛顿法通常比梯度下降法具有更快的收敛速度,因为它们在每一步迭代中都利用了更多的曲率信息。
通用性:L-BFGS可以应用于各种类型的问题,只要目标函数是可微的。
然而,L-BFGS也有一些局限性:

非凸问题:对于高度非凸的目标函数,L-BFGS可能会陷入局部最小值或鞍点。
参数敏感:L-BFGS的性能可能受到一些参数的影响,如历史信息的数量 mmm 和一维搜索的精度。选择合适的参数可能需要一些经验或实验

cv=5

是用于交叉验证的参数设置,表示将数据集分成5个子集进行交叉验证。交叉验证是一种评估机器学习模型性能的方法,其中一个子集作为验证集,其余的子集作为训练集。使用cv=5的好处包括:

更准确的模型评估:通过将数据分为5个子集并进行多次训练和验证,可以获得更稳定和可靠的模型性能评估结果。这有助于减少过拟合或欠拟合的风险,并提供对模型泛化能力的更好估计。
更好的利用数据:相比于简单的训练-测试分割,交叉验证可以更充分地利用数据集。每个子集都有机会被用作验证集,从而更全面地评估模型在不同数据子集上的性能。
发现模型的稳定性:通过多次交叉验证,可以观察模型在不同划分下的性能变化。如果模型在多次交叉验证中表现稳定,那么可以认为模型具有较好的稳定性和鲁棒性。
调整超参数:交叉验证还可以用于调整模型的超参数。通过在交叉验证过程中尝试不同的超参数组合,可以选择在验证集上表现最佳的超参数配置。
需要注意的是,虽然cv=5具有上述优点,但在某些情况下,可能需要使用其他值的交叉验证(例如cv=10),具体取决于数据集的大小、特性和所需的评估精度。

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

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

相关文章

Spring5深入浅出篇:Spring与工厂设计模式简介

Spring5深入浅出篇:Spring与工厂设计模式简介 什么是Spring Spring是⼀个轻量级的JavaEE解决⽅案,整合众多优秀的设计模式轻量级 1. 对于运⾏环境是没有额外要求的开源 tomcat resion jetty收费 weblogic websphere 2. 代码移植性⾼不需要实现额外接⼝JavaEE的解…

Bing AI:探索人工智能搜索引擎Bing Chat工具

Microsoft 更新了其搜索引擎 Bing,采用了由 OpenAI 的 GPT-4 模型提供支持的人工智能 (AI) 技术。 这意味着您现在可以与 Bing 聊天。而且,除了常规的链接列表外,搜索引擎还可以汇总互联网上的数据来回答您的问题。 …

架构篇04-复杂度来源:高性能

文章目录 单机复杂度集群的复杂度小结 从本篇开始,我们一起深入分析架构设计复杂度的 6 个来源,先来聊聊复杂度的来源之一高性能。 对性能孜孜不倦的追求是整个人类技术不断发展的根本驱动力。例如计算机,从电子管计算机到晶体管计算机再到集…

VL171 VL170配合LDR6020的type-c母座显示器方案

兼容基于VASEL控制引脚的10 Gbps USB3.2 Gen2和AM所有4通道视频,包括DP1.4 8.1 Gbps VL171配合LDR6020实现的type-c桌面显示器方案电路LDR6020是一个DRP的PD芯片,PD芯片与主机通讯完之后,通过PD芯片去控制VL171实现正反插与USB信号和DP信号的…

31 3D日历组件

效果演示 实现了一个3D文字旋转的效果&#xff0c;当鼠标悬停在容器上时&#xff0c;最后一个文字会旋转630度&#xff0c;而其他文字会逐渐旋转到水平面上方。 Code <div class"container"><div class"text" style"--j:0;"><sp…

MySQL -- Linux Ubuntu 环境安装MySQL数据库

注意&#xff1a;本篇所有命令均是在linux 服务器root账号下运行。 安装MySQL 安装 apt-get install mysql-server 启动mysql服务 systemctl start mysql查看mysql服务 systemctl status mysql 如下图所示&#xff0c;mysql服务正在运行 设置root密码 在第一次安装MyS…

【Redis】Redis如何做内存优化?

​ &#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Redis ⛳️ 功不唐捐&#xff0c;玉汝于成 ​ 目录 前言 正文 使用数据结构&#xff1a; 压缩对象&#xff1a; 过期策略&#xff1a; 分片&#xff1a; 使用持久化方式&#xff1a…

虚幻UE 材质-进阶边界混合之运行时虚拟纹理

之前在学习空山新雨后时对于边缘虚化过渡处理有很多技术 今天又要介绍一个边缘过渡的方法&#xff1a;运行时虚拟纹理 文章目录 前言一、运行时虚拟纹理二、使用步骤总结 前言 边缘过渡柔和的方式我们之前介绍了很多&#xff0c;但是效果也不是最好的。 像素偏移PDO和我们今天…

架构设计: 如何提供设计方案

面试时你是否常被问到这样的问题&#xff1a;“你之前是如何设计这个系统&#xff08;或子系统/模块/功能&#xff09;的&#xff1f;请介绍你的思路。” 很多研发同学在听到类似的面试题时&#xff0c;往往忽略“系统设计思路”关键词&#xff0c;而是陷入某个技术点细节里&a…

各省快递量数据, shp+excel,2001-2021年,已实现数据可视化

基本信息. 数据名称: 各省快递量数据 数据格式: shpexcel 数据时间&#xff1a;2001-2021年 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1a_2001快递量/万件_2001年2a_2002快递量/万件_2002年3…

ceph数据分布式存储

单机存储的问题 存储处理能力不足 传统的IDE的IO值是100次/秒&#xff0c;SATA固态磁盘500次/秒&#xff0c;固态硬盘达到2000-4000次/秒。即使磁盘的IO能力再大数十倍&#xff0c;也不够抗住网站访问高峰期数十万、数百万甚至上亿用户的同时访问&#xff0c;这同时还要受到主机…

软件测试|使用Python轻松裁剪视频

简介 裁剪视频是在视频编辑和处理中常见的任务之一&#xff0c;Python提供了多种库和工具&#xff0c;可以用来裁剪视频。在本文中&#xff0c;我们将详细讨论如何使用Python来裁剪视频&#xff0c;并提供示例代码。 步骤1&#xff1a;环境准备 首先&#xff0c;我们要安装必…

Firefox 100 正式发布

五月三日&#xff0c;Firefox发布了它的第100个版本&#xff0c;来回顾一下Firefox是如何走到今天这一步的&#xff0c;以及在第100个版本中发布了哪些功能。 回顾 2004年&#xff0c;《纽约时报》上宣布了Firefox 1.0的发布&#xff0c;这个广告列出了为第一版做出贡献的每一…

C语言——小细节和小知识12

一、倒置句子 将句子中的单词位置倒置&#xff0c;标点不用倒置&#xff0c;例如i love you.倒置结果是&#xff1a;you. love i。 1、两步翻转法 采用两步翻转法来实现单词位置的倒置。首先&#xff0c;它整体翻转整个字符串&#xff0c;然后再逐个翻转每个单词内的字符。 …

redis安装-Linux为例

可以下载一个Shell或者MobaXterm工具&#xff0c;便于操作 在redis官网下载压缩包 开始安装 安装依赖 yum install -y gcc tcl切换目录 切换目录后直接把redis安装包拖到/user/local/src/下 cd /user/local/src/解压然后安装 #解压 tar -zxvf redis-7.2.4.tar.gz #安装 …

day13

1.多态的向上转型和向下转型向上转型&#xff1a; 父类的引用指向子类的对象Person person new Man();向下转型: 将父类的引用强转为子类的对象Man man (Man) person; 2.instanceof关键字的用法引用 intanceof 运行类型 3.抽象类声明方式abstract class Person {} 4.接…

python数字图像处理基础(六)——模板匹配、直方图

目录 模板匹配概念单对象模板匹配多对象模板匹配 直方图1.查找直方图2.绘制直方图3.掩膜的应用 模板匹配 概念 模板匹配和卷积原理很像&#xff0c;模板在原图像上从原点开始滑动&#xff0c;计算模板与图像被模板覆盖的地方的差别程度&#xff0c;这个差别程度的计算方法在o…

如何安装“Nextcloud 客户端”win10系统?

1、 下载 Nextcloud的官网 Download and install Nextcloud 2、安装 3、 Nextcloud登录

组件v-model(.sync)记录使用(vue3)

示例&#xff08;演示地址&#xff09; 以下是Vue3中使用v-model实现组件的双向数据绑定的示例代码&#xff1a; 首先&#xff0c;让我们来了解一下Vue3中v-model的用法。在Vue3中&#xff0c;v-model 指令可以用于自定义组件上&#xff0c;用于实现组件的双向数据绑定。与Vue2…

Alinx ZYNQ 7020 LED调试--in RAM

设置拨码开关为JTAG方式 烧写LED bit stream a. 点击“Program device”烧录程序到FPGA中&#xff08;重新上电程序就丢失了&#xff09; b. /01_led/led.runs/impl_1/led.bit 程序烧录到Flash中 ZYNQ与以往的直接烧录Flash不同&#xff0c;首先必须PS&#xff0c;然后烧…