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

这篇具有很好参考价值的文章主要介绍了【机器学习实例讲解】机器学习-鸢尾花数据集多分类第02课。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题定义与理解:
【机器学习实例讲解】机器学习-鸢尾花数据集多分类第02课,AI模型专栏,机器学习,分类,人工智能

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

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

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

特征选择:根据相关性和重要性筛选出最有价值的特征。
特征提取或构造:通过统计分析、降维技术(如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 StandardScaler

scaler = 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),具体取决于数据集的大小、特性和所需的评估精度。文章来源地址https://www.toymoban.com/news/detail-800499.html

到了这里,关于【机器学习实例讲解】机器学习-鸢尾花数据集多分类第02课的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【机器学习】鸢尾花分类-逻辑回归示例

    功能: 这段代码演示了如何使用逻辑回归对鸢尾花数据集进行训练,并将训练好的模型保存到文件中。然后,它允许用户输入新的鸢尾花特征数据,使用保存的模型进行预测,并输出预测结果。 步骤概述: 加载数据和预处理: 使用 Scikit-Learn 中的 datasets 模块加载鸢尾花数据

    2024年02月10日
    浏览(42)
  • 【机器学习】KNN算法-鸢尾花种类预测

    K最近邻(K-Nearest Neighbors,KNN)算法是一种用于模式识别和分类的简单但强大的机器学习算法。它的工作原理非常直观:给定一个新数据点,KNN算法会查找离这个数据点最近的K个已知数据点,然后基于这K个最近邻数据点的类别来决定新数据点的类别。简而言之,KNN算法通过周

    2024年02月07日
    浏览(41)
  • 机器学习-KNN算法(鸢尾花分类实战)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 K近邻(K Nearest Neighbors,KNN)算法是最简单的分类算法之一,也就是根据现有训练数据判断输入样本是属于哪一个类别。 “近朱者赤近墨者黑\\\",所谓的K近邻,也就

    2023年04月08日
    浏览(71)
  • 机器学习与深度学习——通过knn算法分类鸢尾花数据集iris求出错误率并进行可视化

    什么是knn算法? KNN算法是一种基于实例的机器学习算法,其全称为K-最近邻算法(K-Nearest Neighbors Algorithm)。它是一种简单但非常有效的分类和回归算法。 该算法的基本思想是:对于一个新的输入样本,通过计算它与训练集中所有样本的距离,找到与它距离最近的K个训练集样

    2024年02月03日
    浏览(41)
  • 机器学习:KNN算法对鸢尾花进行分类

    1.算法概述 KNN(K-NearestNeighbor)算法经常用来解决分类与回归问题, KNN算法的原理可以总结为\\\"近朱者赤近墨者黑\\\",通过数据之间的相似度进行分类。就是通过计算测试数据和已知数据之间的距离来进行分类。 如上图,四边形代表测试数据,原型表示已知数据,与测试数据最

    2024年02月09日
    浏览(52)
  • 机器学习实验3——支持向量机分类鸢尾花

    基于鸢尾花数据集,完成关于支持向量机的分类模型训练、测试与评估。 代码 认识数据 属性:花萼长度,花萼宽度,花瓣长度,花瓣宽度 分类:Setosa,Versicolour,Virginica 相关性分析 如下图,可以直观看到花瓣宽度(Petal Width)和花瓣长度(Petal Length)存在很高的正相关性,

    2024年01月24日
    浏览(38)
  • 机器学习与深度学习——通过SVM线性支持向量机分类鸢尾花数据集iris求出错误率并可视化

    先来看一下什么叫数据近似线性可分,如下图所示,蓝色圆点和红色圆点分别代表正类和负类,显然我们不能找到一个线性的分离超平面将这两类完全正确的分开;但是如果将数据中的某些特异点(黑色箭头指向的点)去除之后,剩下的大部分样本点组成的集合是线性可分的,

    2023年04月18日
    浏览(63)
  • 机器学习(四):4层BP神经网络(只用numpy不调包)用于训练鸢尾花数据集|准确率96%

    题目: 设计四层BP网络,以g(x)=sigmoid(x)为激活函数, 神经网络结构为:[4,10,6, 3],其中,输入层为4个节点,第一个隐含层神经元个数为10个节点;第二个隐含层神经元个数为6个节点,输出层为3个节点 利用训练数据iris-train.txt对BP神经网络分别进行训练,对训练后的模型统

    2023年04月08日
    浏览(38)
  • 初识机器学习——感知机(Perceptron)+ Python代码实现鸢尾花分类

      假设输入空间 χ ⊆ R n chisubseteq R^n χ ⊆ R n ,输出空间为 γ = { + 1 , − 1 } gamma=left { +1,-1right } γ = { + 1 , − 1 } 。其中每一个输入 x ⊆ χ xsubseteq chi x ⊆ χ 表示对应于实例的特征向量,也就是对应于输入空间(特征空间)的一个点, y ⊆ γ ysubseteq gamma y ⊆ γ 输出表

    2023年04月08日
    浏览(50)
  • 机器学习01 -Hello World(对鸢尾花(Iris Flower)进行训练及测试)

    机器学习是一种人工智能(AI)的子领域,它探索和开发计算机系统,使其能够从数据中学习和改进,并在没有明确编程指令的情况下做出决策或完成任务。 传统的程序需要程序员明确编写指令来告诉计算机如何执行特定任务。但是,机器学习采用不同的方法。它允许计算机

    2024年02月15日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包