当前位置: 首页 > news >正文

工具框架:Scikit-learn、Pandas、NumPy预测鸢尾花的种类

构建一个模型,根据鸢尾花的花萼和花瓣的测量数据(特征)来预测它属于哪个品种(标签)

著名的鸢尾花数据集,包含 Setosa, Versicolour, Virginica 三个品种,每个样本有4个特征(花萼长宽、花瓣长宽)

在这里插入图片描述

NumPy: 提供底层的数值计算支持(数组、矩阵运算),Scikit-learn 和 Pandas 的底层计算都大量依赖于 NumPy 数组,如下案例:iris.data 本身就是一个 NumPy 数组,X_train.values 或 X_train.to_numpy() 可以轻松地将 Pandas DataFrame 转换回 NumPy 数组进行更灵活的数学操作
Pandas: 进行数据的读取、清洗、探索和预处理
Scikit-learn: 进行机器学习建模的核心,包括拆分数据、训练模型、评估性能

一、数据加载与探索 - Pandas

import pandas as pd
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score,confusion_matrix#1.加载数据(Scikit-learn 自带数据集,通常以 NumPy 数组形式存在)
iris = datasets.load_iris()# 2. 用 Pandas 将数据转换为 DataFrame,以便更好地查看和处理
# 将特征数据放入 DataFrame,并指定列名
df = pd.dataFrame()
# 添加目标列(花的种类)
df['target'] = iris.target
# 将数字标签映射回花的名字,方便理解
df['species'] = df['target'].map({0: 'setosa', 1: 'versicolor', 2: 'virginica'})# 3. 使用 Pandas 探索数据
# df.head(), df.info(), df.describe() 是 Pandas 数据探索的“三件套”,快速了解数据全貌。
print("数据前5行:")
print(df.head()) # 查看数据样子
print("\n数据基本信息:")
print(df.info()) # 查看数据类型和有无缺失值
print("\n数值统计描述:")
print(df.describe()) # 查看均值、标准差、分位数等
print("\n类别分布:")
print(df['species'].value_counts()) # 查看每个品种有多少样本,检查是否均衡
数据前5行:sepal length (cm)  sepal width (cm)  ...  target species
0                5.1               3.5  ...       0  setosa
1                4.9               3.0  ...       0  setosa
...数值统计描述:sepal length (cm)  sepal width (cm)  ...
count         150.000000        150.000000
mean            5.843333          3.057333
std             0.828066          0.435866
min             4.300000          2.000000
25%             5.100000          2.800000
50%             5.800000          3.000000
75%             6.400000          3.300000
max             7.900000          4.400000

二、数据预处理与拆分 - Pandas 与 Scikit-learn 协作

  • train_test_split 是 Scikit-learn 中非常核心的函数,用于将数据随机打乱并按比例拆分,确保模型评估的公正性
# 1. 准备特征 (X) 和标签 (y)
# 这里选择 Pandas DataFrame 的列作为特征
X = df[['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']]
# 标签列
y = df['target']# 注意:X 和 y 此刻仍然是 Pandas 的 DataFrame/Series
# 但 Scikit-learn 也完美支持它们,底层通常也会转换为 NumPy 数组进行计算# 2. 拆分数据集为训练集和测试集
# random_state 是随机种子,保证每次拆分结果一致,可复现
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)print(f"训练集大小: {X_train.shape}")
print(f"测试集大小: {X_test.shape}")

三、模型训练与预测 - Scikit-learn

  • Scikit-learn 的 API 设计极其统一,所有模型都遵循 fit、predict、score 的模式
# 1. 初始化一个随机森林分类器模型
# n_estimators 是森林中树的数量,random_state 保证结果可复现
model = RandomForestClassifier(n_estimators=100, random_state=42)# 2. 训练模型(拟合数据)
# 这一步就是在“学习”特征和标签之间的关系
model.fit(X_train, y_train)# 3. 使用训练好的模型进行预测
# 对测试集(模型没见过的数据)进行预测
y_pred = model.predict(X_test)
print("模型预测结果:", y_pred[:5])
print("真实标签:", y_test.values[:5])

四、模型评估 - Scikit-learn 的度量模块

# 1. 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"\n模型准确率: {accuracy:.2f}") # 输出 e.g.: 模型准确率: 1.00# 2. 查看混淆矩阵
cm = confusion_matrix(y_test, y_pred)
print("混淆矩阵:")
print(cm)
# 输出示例:
# [[10  0  0]  -> 10个setosa全对
#  [ 0  9  0]  -> 9个versicolor全对
#  [ 0  0 11]] -> 11个virginica全对# (可选) 如果想看特征重要性
print("\n特征重要性:")
for name, importance in zip(X.columns, model.feature_importances_):print(f"{name}: {importance:.4f}")
# 通常会显示花瓣的尺寸比花萼的尺寸更重要!

文章转载自:

http://6iiuWSMy.grryh.cn
http://T8Rl7Ux9.grryh.cn
http://ePziARsd.grryh.cn
http://hDf8OLBl.grryh.cn
http://KWGioA1C.grryh.cn
http://AFyHQumS.grryh.cn
http://flREFIng.grryh.cn
http://Bjn0CgLa.grryh.cn
http://PuTpEeZ1.grryh.cn
http://2Zanas79.grryh.cn
http://ngLq3pUh.grryh.cn
http://5Tix9Lvh.grryh.cn
http://7IJfALIM.grryh.cn
http://cvVenhxb.grryh.cn
http://rHwdO2iu.grryh.cn
http://6NtYwima.grryh.cn
http://gd7Ma4xj.grryh.cn
http://aUnMY8NI.grryh.cn
http://jwjNIAIB.grryh.cn
http://7G666jih.grryh.cn
http://GssCHgfZ.grryh.cn
http://veiBOhp9.grryh.cn
http://sKFgligb.grryh.cn
http://4hSSsawj.grryh.cn
http://Xnfm6XiM.grryh.cn
http://RtZvw6ZR.grryh.cn
http://ao6JyHRg.grryh.cn
http://f4yzvVUa.grryh.cn
http://OARIYDFJ.grryh.cn
http://uvX0mDpE.grryh.cn
http://www.dtcms.com/a/374773.html

相关文章:

  • AI GEO 优化能否快速提升网站在搜索引擎的排名?​
  • nvm和nrm的详细安装配置,从卸载nodejs到安装NVM管理nodejs版本,以及安装nrm管理npm版本
  • 对口型视频怎么制作?从脚本到成片的全流程解析
  • 从“能说话”到“会做事”:AI Agent如何重构日常工作流?
  • 洛谷 P1249 最大乘积-普及/提高-
  • 小红书获取笔记详情API接口会返回哪些数据?
  • JAVA Spring Boot maven导入使用本地SDK(jar包)
  • Linux/UNIX系统编程手册笔记:SOCKET
  • F5和Nginx的区别
  • 9.9网编简单TCP,UDP的实现day2
  • Day39 SQLite数据库操作与HTML核心API及页面构建
  • Vue3 与 AntV X6 节点传参、自动布局及边颜色控制教程
  • 线程与进程的区别
  • RAC概念笔记
  • 如何将视频从安卓手机传输到电脑?
  • Day04_苍穹外卖——套餐管理(实战)
  • ElementUI 组件概览
  • fifo之读写指针
  • 【第三次全国土壤普查】一键制备土壤三普环境变量23项遥感植被指数神器
  • Java反射机制详解
  • PDF文件中的广告二维码图片该怎么批量删除
  • 记一次 .NET 某中医药附属医院门诊系统 崩溃分析
  • WPF/Prism 中计算属性的通知机制详解 —— SetProperty 与 RaisePropertyChanged
  • jmeter使用指南
  • 硬件(六)arm指令
  • 后端错误处理的艺术:BusinessException 与 ResultUtils 的完美分工
  • MCU、CPLD、DSP、FPGA 有什么区别,该如何选择?
  • 【React Native】点赞特效动画组件FlowLikeView
  • android studio gradle 访问不了
  • 【C++】C++11 篇二