【100天精通Python】Day76:Python机器学习-第一个机器学习小项目_鸾尾花分类项目,预测与可视化完整代码(下)

news/2024/4/28 4:31:02/文章来源:https://blog.csdn.net/qq_35831906/article/details/134810834

目录

5 模型实现

5.1 分离出评估数据集

5.2 创建不同的模型来预测新数据

5.3 采用10折交叉验证来评估算法模型

5.4 生成最优模型

6 实施预测

7 模型评估

8 完整代码

(1)鸾尾花分类的完整代码

(2)可视化不同模型预测的评估结果


   通过不同的算法来创建模型,并评估它们的准确度,以便找到最合适的算法。

5 模型实现

5.1 分离出评估数据集

        分离出评估数据集是机器学习中常见的步骤,通常通过将数据集分为训练集和测试集来完成。在Python中,你可以使用train_test_split函数来实现这一步骤。以下是一个简单的示例代码:

from sklearn.model_selection import train_test_split# 假设X是特征数据,y是目标标签
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# test_size表示测试集的比例,这里设置为0.2,即20%的数据作为测试集
# random_state用于设置随机种子,确保每次运行代码时划分的训练集和测试集保持一致

在这个例子中,X是特征数据,y是目标标签。train_test_split函数将数据集划分为训练集和测试集,其中80%的数据用于训练,20%的数据用于评估模型的性能。

5.2 创建不同的模型来预测新数据

from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score# 假设X是特征数据,y是目标标签
# 这里使用train_test_split分离出评估数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 生成不同的模型
models = {'Logistic Regression': LogisticRegression(),'K Neighbors Classifier': KNeighborsClassifier(),'Decision Tree Classifier': DecisionTreeClassifier(),'SVM Classifier': SVC(),'Random Forest Classifier': RandomForestClassifier(),'Naive Bayes Classifier': GaussianNB()
}

这段代码使用了Python中的scikit-learn库来创建、训练和评估不同的分类模型。

  1. 导入必要的库和模块:

    • train_test_split: 用于将数据集分割为训练集和测试集。
    • 每个模型的具体分类算法:
      • LogisticRegression: 逻辑回归
      • KNeighborsClassifier: K近邻分类器
      • DecisionTreeClassifier: 决策树分类器
      • SVC: 支持向量机分类器
      • RandomForestClassifier: 随机森林分类器
      • GaussianNB: 朴素贝叶斯分类器
    • accuracy_score: 用于计算分类模型的准确度。
  2. 分割训练集和测试集: 使用train_test_split函数将特征数据 X 和目标标签 y 分割为训练集和测试集。test_size=0.2 表示将20%的数据用于测试,random_state=42 是为了确保每次运行代码时分割结果的一致性。

  3. 生成不同的模型: 使用字典 models 存储了六个不同的分类模型,每个模型都由相应的算法实例化。这些模型包括逻辑回归、K近邻、决策树、支持向量机、随机森林和朴素贝叶斯。

5.3 采用10折交叉验证来评估算法模型

        10折交叉验证是一种常用的模型评估方法,它将训练集分成10个相似的子集,然后进行10轮训练和评估。每一轮,模型都会在其中9个子集上训练,并在剩余的一个子集上进行评估。这样,每个子集都有机会成为评估集,而模型的性能指标是这10轮评估的平均值。

from sklearn.model_selection import cross_val_score# 生成不同的模型
models = {'Logistic Regression': LogisticRegression(),'K Neighbors Classifier': KNeighborsClassifier(),'Decision Tree Classifier': DecisionTreeClassifier(),'SVM Classifier': SVC(),'Random Forest Classifier': RandomForestClassifier(),'Naive Bayes Classifier': GaussianNB()
}# 采用10折交叉验证评估算法模型
for model_name, model in models.items():scores = cross_val_score(model, X_train, y_train, cv=10, scoring='accuracy')print(f"{model_name} Cross-Validation Accuracy: {scores.mean():.2f} (Std: {scores.std():.2f})")

这里的关键部分包括:

  • cross_val_score: 用于执行交叉验证。cv=10 表示采用10折交叉验证。
  • scoring='accuracy': 表示使用准确度来评估模型的性能。其他评估指标也可以选择,例如精确度、召回率等。

在每个模型上,cross_val_score会执行10折交叉验证,输出每折的准确度(Accuracy)并计算均值和标准差。这有助于了解模型在不同数据子集上的表现,并提供更稳健的性能估计。

5.4 生成最优模型

# 选择最优模型
best_model_name = max(models, key=lambda k: cross_val_score(models[k], X_train, y_train, cv=10, scoring='accuracy').mean())
best_model_instance = models[best_model_name]# 在测试集上评估最优模型
best_model_instance.fit(X_train, y_train)
y_pred = best_model_instance.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)print(f"\nBest Model: {best_model_name}")
print(f"Test Accuracy: {accuracy:.2f}")

        这里使用了max函数和key参数,通过比较每个模型在交叉验证中的准确度均值,选择性能最好的模型名称 best_model_name。然后,通过该名称从模型字典 models 中获取最优模型的实例 best_model_instance

        接着,对最优模型进行训练,并在测试集上进行预测,计算模型在测试集上的准确度。最后,输出最优模型的名称和测试准确度。

6 实施预测

        实施预测并生成评估报告,你可以使用模型的predict方法对评估数据集进行预测,然后使用classification_report函数生成包含准确率、精确率、召回率等指标的报告。以下是一个示例代码:

from sklearn.metrics import classification_report# 实施预测
y_pred = best_model_instance.predict(X_test)# 生成评估报告
report = classification_report(y_test, y_pred)# 输出报告
print("Evaluation Report:\n", report)

        上述代码中使用了classification_report函数,该函数接受真实标签 y_test 和预测标签 y_pred 作为参数,计算并生成包含准确率、精确率、召回率等指标的评估报告。

        你可以根据具体需要调整评估指标,例如通过修改 classification_report 函数的参数。

7 模型评估

        在机器学习中,评估模型的性能通常需要选择适当的评估指标和评估方法。以下是一些常用的评估模型性能的模式:

7.1 准确度(Accuracy):

        准确度是分类问题中最常用的评估指标,表示正确预测的样本占总样本的比例。计算方式为正确预测的样本数除以总样本数。

from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_true, y_pred)

7.2 精确度(Precision):

        精确度表示在所有被模型预测为正类别的样本中,真正为正类别的样本的比例。适用于关注假正例的问题。

from sklearn.metrics import precision_score
precision = precision_score(y_true, y_pred)

7.3 召回率(Recall):

        召回率表示在所有实际正类别的样本中,被模型正确预测为正类别的样本的比例。适用于关注假负例的问题。

from sklearn.metrics import recall_score
recall = recall_score(y_true, y_pred)

7.4 F1 分数:

        F1分数综合考虑了精确度和召回率,是精确度和召回率的调和平均值。

from sklearn.metrics import f1_score
f1 = f1_score(y_true, y_pred)

7.5 混淆矩阵:

        提供了模型在不同类别上的详细性能指标,包括真正例、假正例、真负例和假负例的数量。

from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)

这些是常用于评估分类模型性能的模式。选择适当的模式取决于问题的特性和关注的方面。

8 完整代码

(1)鸾尾花分类的完整代码

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, classification_report# 加载鸾尾花数据集
iris = load_iris()
X = iris.data
y = iris.target# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 生成不同的模型
models = {'Logistic Regression': LogisticRegression(),'K Neighbors Classifier': KNeighborsClassifier(),'Decision Tree Classifier': DecisionTreeClassifier(),'SVM Classifier': SVC(),'Random Forest Classifier': RandomForestClassifier(),'Naive Bayes Classifier': GaussianNB()
}# 采用10折交叉验证评估算法模型
for model_name, model in models.items():scores = cross_val_score(model, X_train, y_train, cv=10, scoring='accuracy')print(f"{model_name} Cross-Validation Accuracy: {scores.mean():.2f} (Std: {scores.std():.2f})")# 选择最优模型
best_model_name = max(models, key=lambda k: cross_val_score(models[k], X_train, y_train, cv=10, scoring='accuracy').mean())
best_model_instance = models[best_model_name]# 在测试集上评估最优模型
best_model_instance.fit(X_train, y_train)
y_pred = best_model_instance.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)print(f"\nBest Model: {best_model_name}")
print(f"Test Accuracy: {accuracy:.2f}")# 生成评估报告
report = classification_report(y_test, y_pred)
print("\nEvaluation Report:\n", report)

运行:

Logistic Regression Cross-Validation Accuracy: 0.95 (Std: 0.08)
K Neighbors Classifier Cross-Validation Accuracy: 0.94 (Std: 0.07)
Decision Tree Classifier Cross-Validation Accuracy: 0.92 (Std: 0.10)
SVM Classifier Cross-Validation Accuracy: 0.95 (Std: 0.07)
Random Forest Classifier Cross-Validation Accuracy: 0.93 (Std: 0.10)
Naive Bayes Classifier Cross-Validation Accuracy: 0.94 (Std: 0.08)
Best Model: Logistic Regression
Test Accuracy: 1.00Evaluation Report:precision    recall  f1-score   support0       1.00      1.00      1.00        101       1.00      1.00      1.00         92       1.00      1.00      1.00        11accuracy                           1.00        30macro avg       1.00      1.00      1.00        30
weighted avg       1.00      1.00      1.00        30

(2)可视化以上不同模型预测的评估结果

        下面是对不同模型进行10折交叉验证准确率的可视化代码。在这个例子中,我们将每个模型的交叉验证准确率以子图的形式展示:

# 初始化画布
fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(15, 10))
axes = axes.flatten()# 遍历每个模型
for i, (model_name, model) in enumerate(models.items()):# 采用10折交叉验证获取准确率scores = cross_val_score(model, X_train, y_train, cv=10, scoring='accuracy')# 绘制准确率直方图axes[i].hist(scores, bins=np.arange(0, 1.1, 0.1), edgecolor='black', alpha=0.7)axes[i].set_title(model_name)axes[i].set_xlabel('Accuracy')axes[i].set_ylabel('Frequency')# 调整子图布局
plt.tight_layout()
plt.show()

        为了输出不同模型的预测评估参数图表,我们可以使用混淆矩阵来展示每个模型的分类性能。添加了混淆矩阵的绘制功能需要的代码:

import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import confusion_matrix
# 生成混淆矩阵
# 设置子图布局
fig, axes = plt.subplots(2, 3, figsize=(15, 10))# 在测试集上评估每个模型并生成混淆矩阵
for (model_name, model), ax in zip(models.items(), axes.flatten()):model.fit(X_train, y_train)y_pred = model.predict(X_test)# 生成混淆矩阵cm = confusion_matrix(y_test, y_pred)# 绘制混淆矩阵sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=iris.target_names, yticklabels=iris.target_names, ax=ax)ax.set_title(f'Confusion Matrix - {model_name}')ax.set_xlabel('Predicted Label')ax.set_ylabel('True Label')# 调整子图布局
plt.tight_layout()
plt.show()

结果:

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

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

相关文章

文献计量学方法与应用、主题确定、检索与数据采集、VOSviewer可视化绘图、Citespace可视化绘图、R语言文献计量学绘图分析

目录 一、文献计量学方法与应用简介 二、主题确定、检索与数据采集 三、VOSviewer可视化绘图 四、Citespace可视化绘图 五、R语言文献计量学绘图分析 六、论文写作 七、论文投稿 更多应用 文献计量学是指用数学和统计学的方法,定量地分析一切知识载体的交叉…

vue3移动端脚手架(纯净,集成丰富)

概述 一个纯净的移动端框架 ,用到了 Vue3 vuex Vite3 Vant3 sass eslint stylelint htmlhint husky commitlint axios axios-adapter VConsole 自定义全局 loading ,自定义函数式 dialog (api模仿微信小程序)&#x…

小程序定制开发收费价目表

小程序定制开发是一种根据客户的需求和业务场景,为其量身打造专属的小程序的服务。小程序定制开发的收费价目表一般包括以下几个方面: 开发周期:开发周期是指从需求分析到上线测试的整个过程所需的时间。开发周期的长短会影响开发成本和项目…

SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案

Maven项目的Jar包打包问题-没有主清单属性&&ClassNotFoundException 与 NoClassDefFoundError 文章目录 Maven项目的Jar包打包问题-没有主清单属性&&ClassNotFoundException 与 NoClassDefFoundError1、问题出现1.1、Jar包运行:没有主清单属性解决方…

ubuntu18.04配置cuda+cudnn+tensorrt+anconda+pytorch-gpu+pycharm

一、显卡驱动安装 执行nvidia-smi查看安装情况 二、cuda安装 cuda官网下载cuda_11.6.2_510.47.03_linux.run,安装执行 sudo sh cuda_11.6.2_510.47.03_linux.run提升安装项,驱动不用安装,即第一项(Driver)&#xff…

Vue3拖拽功能【VueDraggablePlus】

一、介绍 由于 Sortablejs 的 vue3 组件一直没有更新,已经跟 vue3 严重脱节,所以诞生了这个项目,这个组件是基于 Sortablejs 的,所以如果你想了解更多关于 Sortablejs 的信息,可以查看Sortablejs 官网。VueDraggableP…

ES6原生音乐播放器(有接口)

视频展示 ES6音乐播放器 项目介绍 GutHub地址:GitHub - baozixiangqianchong/ES6_MusicPlayer: 音乐播放器 ES6_MusicPlayer 是基于JavaScriptES6Ajax等通过原生构建的项目。能够充分锻炼JS能力。 本项目有主页、详情页、歌单页面三部分组成 ├── assets&…

Vue3 使用图片涂鸦插件

一、安装插件 npm i toast-ui/vue-image-editor npm i tui-code-snippet npm i tui-image-editor Image-editor | TOAST UI :: Make Your Web Delicious! 官网介绍说是“凭借简单和美观的完美结合,图像编辑器是一个功能齐全的编辑器,非常适合日常使…

第五章---创建个人中心页面(下)

1. 整体框架 2. 前端页面布局 使用 bootstrap 的 grids system 进行布局。页面规划如下: 在 bootstrap 的网址搜索 grids system。 一行分为12份,左边3份,为头像;右边9份,白色区域 cards,加上按钮创建 bo…

【链表Linked List】力扣-117 填充每个节点的下一个右侧节点指针II

目录 问题描述 解题过程 官方题解 问题描述 给定一个二叉树: struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 N…

【Matlab算法】多维函数求解的基本概念

多维函数求解的基本概念 多维函数最优化问题最优化算法最优化问题的类型最优化算法的分类常用的多维函数求解方法结语 多维函数 多维函数是指定义在 R n \mathbb{R}^n Rn 上的函数,其中 n n n 是函数的维数。例如, f ( x , y ) x 2 y 2 f(x, y) x^…

令牌桶算法理解学习(限流算法)

令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。 用简单的话语来说就是限制…

react.js源码二

三、调度Scheduler scheduling(调度)是fiber reconciliation的一个过程,主要决定应该在何时做什么?在stack reconciler中,reconciliation是“一气呵成”,对于函数来说,这没什么问题,因为我们只想要函数的运行结果&…

读书笔记-《数据结构与算法》-摘要4[插入排序]

插入排序 核心:通过构建有序序列,对于未排序序列,在已排序序列中从后向前扫描(对于单向链表则只能从前往后遍历),找到相应位置并插入。实现上通常使用in-place排序(需用到O(1)的额外空间) 从第一个元素开始,该元素可…

Http请求(bug)——路径变量传参遇到特殊符号的问题 URL中的#,?,符号作用

前言 本篇博客分析路径变量传参遇到特殊符号的问题,阐述了URL中的#,?,&符号作用。 目录 前言引出路径变量传参遇到特殊符号的问题问题描述问题分析 URL中的 #,?,&符号的作用URL中# 的作…

sqlite3.44.2的编译

文章目录 sqlite3.44.2的编译概述笔记解决shell.c编译报错的方法整理 - 正常可用的编译脚本过程剩下的事情验证编译出的输出是否可以给工程正常使用?END sqlite3.44.2的编译 概述 想从源码编译一份Sqlite3.44.2出来. 编译sqlite3.44.2前置需要的TCL环境已经编译出来到了, 做…

前端入门:HTML初级指南,网页的简单实现!

代码部分&#xff1a; <!DOCTYPE html> <!-- 上方为DOCTYPE声明&#xff0c;指定文档类型为HTML --> <html lang"en"> <!-- html标签为整个页面的根元素 --> <head> <!-- title标签用于定义文档标题 --> <title>初始HT…

Google Bard vs. ChatGPT 4.0:文献检索、文献推荐功能对比

在这篇博客中&#xff0c;我们将探讨和比较四个不同的人工智能模型——ChatGPT 3.5、ChatGPT 4.0、ChatGPT 4.0插件和Google Bard。我们将通过三个问题的测试结果来评估它们在处理特定任务时的效能和响应速度。 导航 问题 1: 统计自Vehicle Routing Problem (VRP)第一篇文章发…

PHP对接企业微信

前言 最近在做项目中&#xff0c;要求在后台管理中有企业微信管理的相关功能。相关准备工作&#xff0c;需要准备好企业微信账号&#xff0c;添加自建应用&#xff0c;获得相应功能的权限&#xff0c;以及agentid、secre等。 参考文档&#xff1a; 企业微信开发文档 功能实现 因…

ChatGPT学习笔记

1 ChatGPT架构图 &#xff08;ChatGPT_Diagram.svg来自于【OpenA | Introducing ChatGPT】&#xff09; 2 模型训练 ChatGPT在训练时使用了PPO方法&#xff1b;