首页 > 其他分享 >12.18日报

12.18日报

时间:2025-01-14 20:11:38浏览次数:1  
标签:iris 日报 print score test csv 数据 12.18

完成机器学习实验,并完成大型数据库实验,以下为实验内容:

实验一:数据准备与模型评估

一、实验目的

熟悉 Python 的基本操作,掌握对数据集的读写实现、对模型性能的评估实现的能力;

加深对训练集、测试集、N 折交叉验证、模型评估标准的理解。

 

二、实验内容

(1)利用 pandas 库从本地读取 iris 数据集;

(2)从 scikit-learn 库中直接加载 iris 数据集;

(3)实现五折交叉验证进行模型训练;

(4)计算并输出模型的准确度、精度、召回率和 F1 值。

3、操作要点

(1)安装 Python 及 pycharm(一种 Python 开发 IDE),并熟悉 Python 基本操作;

(2)学习 pandas 库里存取文件的相关函数,以及 scikit-learn 库里数据集下载、交叉验

证、模型评估等相关操作;

(3)可能用的库有 pandas,scikit-learn,numpy 等,需要提前下载 pip;

(4)测试模型可使用随机森林 rf_classifier = RandomForestClassifier(n_estimators=100),

或其它分类器;

(5)撰写实验报告,提交源代码;实验报告在所有上机实验结束后提交。

 

 

 

三、算法步骤、代码、及结果

   1. 算法伪代码

1. 导入必要的库

   - 导入pandas库

   - 导入numpy库

   - 导入scikit-learn中的load_iris函数

   - 导入KFold类

   - 导入RandomForestClassifier类

   - 导入准确率、精确度、召回率和F1分数计算函数

 

2. 定义函数create_iris_dataset()

   - 创建iris数据集的列名

   - 创建iris数据集的样本数据

       - SepalLengthCm: 随机生成150个0到10之间的数

       - SepalWidthCm: 随机生成150个0到5之间的数

       - PetalLengthCm: 随机生成150个0到15之间的数

       - PetalWidthCm: 随机生成150个0到10之间的数

       - Species: 随机选择150个类别(Setosa, Versicolour, Virginica)

   - 将数据转换为DataFrame

   - 保存DataFrame为CSV文件('iris.csv')

   - 打印“iris数据集CSV文件已创建。”

 

3. 检查'iris.csv'文件是否存在

   - 尝试读取'iris.csv'文件

       - 如果成功,打印“从本地读取iris数据集成功”,并显示前5行数据

   - 如果文件未找到,调用create_iris_dataset()函数创建数据集

       - 读取创建的'iris.csv'文件并打印成功信息和前5行数据

 

4. 从scikit-learn库中加载iris数据集

   - 调用load_iris()函数,获取特征集X和标签集y

   - 打印“从scikit-learn加载iris数据集成功”,并显示数据集形状

 

5. 实现五折交叉验证进行模型训练

   - 创建RandomForestClassifier实例,设置n_estimators为100

   - 创建KFold实例,设置n_splits为5,shuffle为True,random_state为42

   - 初始化空列表:accuracies, precisions, recalls, f1s

 

6. 对于每一折的训练和测试索引

   - 划分训练集X_train和测试集X_test

   - 划分训练集y_train和测试集y_test

   - 训练随机森林模型rf_classifier

   - 预测测试集y_pred

   - 计算并保存准确率、精确度、召回率和F1值到相应列表

 

7. 计算并输出模型的平均准确度、精度、召回率和F1值

   - 打印平均准确度

   - 打印平均精度

   - 打印平均召回率

   - 打印平均F1值

   2. 算法主要代码

(1)完整源代码

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import KFold
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score


# 步骤1:创建iris数据集CSV文件(如果需要)
def create_iris_dataset():
    # 创建iris数据集的列名
    columns = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'Species']

    # 创建iris数据集的样本数据
    data = {
        'SepalLengthCm': np.random.rand(150) * 10,
        'SepalWidthCm': np.random.rand(150) * 5,
        'PetalLengthCm': np.random.rand(150) * 15,
        'PetalWidthCm': np.random.rand(150) * 10,
        'Species': np.random.choice(['Setosa', 'Versicolour', 'Virginica'], 150)
    }

    # 将数据转换为DataFrame
    df = pd.DataFrame(data, columns=columns)

    # 保存DataFrame为CSV文件
    df.to_csv('iris.csv', index=False)
    print("iris数据集CSV文件已创建。")


# 检查iris.csv文件是否存在,如果不存在则创建
try:
    df = pd.read_csv('iris.csv')
    print("从本地读取iris数据集成功:")
    print(df.head())
except FileNotFoundError:
    print("本地iris.csv文件未找到,开始创建...")
    create_iris_dataset()
    df = pd.read_csv('iris.csv')
    print("创建并从本地读取iris数据集成功:")
    print(df.head())

# 步骤2:从scikit-learn库中直接加载iris数据集
iris = load_iris()
X, y = iris.data, iris.target
print("从scikit-learn加载iris数据集成功:")
print("数据集形状:", X.shape, y.shape)

# 步骤3:实现五折交叉验证进行模型训练
rf_classifier = RandomForestClassifier(n_estimators=100)
kf = KFold(n_splits=5, shuffle=True, random_state=42)

accuracies = []
precisions = []
recalls = []
f1s = []

for train_index, test_index in kf.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

    # 训练模型
    rf_classifier.fit(X_train, y_train)
    y_pred = rf_classifier.predict(X_test)

    # 评估模型
    accuracies.append(accuracy_score(y_test, y_pred))
    precisions.append(precision_score(y_test, y_pred, average='macro'))
    recalls.append(recall_score(y_test, y_pred, average='macro'))
    f1s.append(f1_score(y_test, y_pred, average='macro'))

# 步骤4:计算并输出模型的准确度、精度、召回率和F1值
print(f"平均准确度: {np.mean(accuracies)}")
print(f"平均精度: {np.mean(precisions)}")
print(f"平均召回率: {np.mean(recalls)}")
print(f"平均F1值: {np.mean(f1s)}")

 

 

(2)调用库方法

1. create_iris_dataset()

说明:创建iris数据集的CSV文件。

参数:无。

作用:生成一个包含150个样本的随机iris数据集,并保存为CSV文件。

2. pd.read_csv('iris.csv')

说明:从CSV文件中读取数据。

参数:

'iris.csv':要读取的CSV文件名。

作用:将CSV文件中的数据读取为Pandas DataFrame。

3. load_iris()

说明:从scikit-learn库中加载iris数据集。

参数:无。

作用:加载内置的iris数据集,返回数据集的特征和标签。

4. RandomForestClassifier(n_estimators=100)

说明:创建随机森林分类器实例。

参数:

n_estimators:森林中树的数量,默认为100。

作用:随机森林是一种集成学习方法,它通过构建多个决策树来进行分类或回归分析。

5. KFold(n_splits=5, shuffle=True, random_state=42)

说明:创建K折交叉验证的分割器。

参数:

n_splits:分割的份数,即K折交叉验证中的K,默认为5。

shuffle:是否在分割前对数据进行随机打乱,默认为True。

random_state:随机数生成器的种子,默认为None。设置相同的种子可以确保每次分割的结果相同。

作用:用于生成训练集和测试集的索引,以进行K折交叉验证。

6. accuracy_score(y_test, y_pred)

说明:计算准确率。

参数:

y_test:真实的标签。

y_pred:预测的标签。

作用:计算模型预测正确的样本占总样本的比例。

7. precision_score(y_test, y_pred, average='macro')

说明:计算精确度(查准率)。

参数:

y_test:真实的标签。

y_pred:预测的标签。

average:计算平均值的方法,默认为'binary'。其他选项包括'micro'、'macro'、'weighted'等。

作用:计算模型预测为正类中实际为正类的比例。

8. recall_score(y_test, y_pred, average='macro')

说明:计算召回率(查全率)。

参数:同precision_score。

作用:计算实际为正类中被模型预测为正类的比例。

9. f1_score(y_test, y_pred, average='macro')

说明:计算F1值。

参数:同precision_score。

 

   3. 结果截图(包括:准确率;精度、召回率、F1)

(1)准确率:***

(2)精度:***,召回率:***,F1:***

 

 

 

四、心得体会

数据处理的重要性:在机器学习中,数据的准备和处理是至关重要的。通过创建CSV文件并读取数据,我们可以确保数据集的可用性和一致性。即使是随机生成的数据,合理的结构和格式也能帮助我们更好地进行后续分析。

模型选择与评估:随机森林是一种强大的集成学习方法,适用于分类和回归任务。通过使用K折交叉验证,我们可以更好地评估模型的性能,避免因数据划分而导致的评估偏差。交叉验证提供了对模型泛化能力的更可靠的估计。

总的来说,这段代码不仅展示了如何使用随机森林进行分类任务,还强调了数据处理、模型评估和性能指标的重要性。通过这些实践,我们能够更好地理解机器学习的基本概念和应用。

 

标签:iris,日报,print,score,test,csv,数据,12.18
From: https://www.cnblogs.com/lijianlongCode13/p/18671488

相关文章

  • 12.19日报
    继续完成机器学习实验二,以下为部分实验内容:实验二:逻辑回归算法实现与测试一、实验目的深入理解对数几率回归(即逻辑回归的)的算法原理,能够使用Python语言实现对数几率回归的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。  二、实验内容1)从scikit-learn库中......
  • 12.20日报
    完成大型数据库实验一熟悉常用的linux操作和hadoop操作,以下为今日实验内容:1.实验目的Hadoop运行在Linux系统上,因此,需要学习实践一些常用的Linux命令。本实验旨在熟悉常用的Linux操作和Hadoop操作,为顺利开展后续其他实验奠定基础。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ub......
  • 华尔街日报无需登录查看不可查看内容
    使用第三方接口来为当前页面提供服务的脚本,简单编写,使用应用程序接口调用保存页面实现永久存储及达到阅读某街日报内容(接口无需加速)对于那些可能很快变化的网页,这个脚本会非常有用。本站保存的网页不包含脚本和动态对象,所以是安全的,不会有弹窗或其他恶意程序。油猴脚本地址:华尔......
  • 12.18
    1.实验目的(1)理解四种数据库(MySQL、HBase、Redis和MongoDB)的概念以及不同点;(2)熟练使用四种数据库操作常用的Shell命令;(3)熟悉四种数据库操作常用的JavaAPI。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3.1.3;(3)MySQL版本:5.6;(4)HBase版本:2.2.2;(5)Redis版本......
  • 软工寒假日报(一)
    今天开始简单了解了python爬虫,并安装了相关依赖importrequestsfrombs4importBeautifulSoupimportpandasaspd#爬取一个页面的数据defscrape_page(url):headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,li......
  • 英伟达世界基础模型 Cosmos,教 AI 理解物理世界;阿里通义与雷鸟合作推出 AI 眼镜丨 RTE
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的......
  • 罗永浩 AI 智能助理 J1 Assistant 上线;字节开源 LatentSync ,精准控制唇形同步丨 RTE
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • a16z:小模型 + 边缘 AI 将定义 2025;音效模型 TangoFlux:3 秒钟生成 30 秒音频丨RTE 开发
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • 苹果鼠标有望加入 AI 语音控制功能;Accent Oracl :准确识别你口音的 AI 丨 RTE 开发者日
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • 通义灵码入选南方日报 2024 数字化年度标杆
    在数字化浪潮席卷全球的今天,技术创新和智能化转型成为企业发展的关键。在这样的背景下,通义灵码凭借其卓越的性能和创新能力,荣获南方日报2024数字化年度标杆大奖,成为数字化转型领域的佼佼者。通义灵码是由阿里云与通义实验室联合出品的AI研发辅助工具,它熟练掌握Java、Python、G......