10/29

一、实验目的

熟悉 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), 或其它分类器;

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

   1. 算法伪代码

1. 开始

2. 尝试从本地读取iris.csv文件到DataFrame df

   如果文件不存在,则打印错误信息并退出

3. 否则,打印成功加载的提示和数据的前几行

4. 从scikit-learn库中加载iris数据集到X(特征)和y(标签)

5. 打印从scikit-learn加载的数据集的形状信息

6. 初始化随机森林分类器rf_classifier,设置树的数量为100,随机种子为42

7. 初始化KFold交叉验证分割器kf,设置分割数为5,打乱数据,随机种子为42

8. 使用cross_val_score进行交叉验证,计算模型的准确度分数scores

9. 打印交叉验证分数和平均准确度以及标准差

10. 使用cross_val_predict进行交叉验证预测,得到y_pred

11. 计算准确度、精度、召回率和F1值

12. 打印计算出的性能指标

13. 结束

   2. 算法主要代码

(1)完整源代码

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

# (1)利用pandas库从本地读取iris数据集
# 请确保你的工作目录中有iris.csv文件
try:
    df = pd.read_csv('iris.csv')
    print("Local iris dataset loaded successfully.")
    print(df.head())
except FileNotFoundError:
    print("The iris.csv file was not found in the working directory.")

# (2)从scikit-learn库中直接加载iris数据集
iris = load_iris()
X, y = iris.data, iris.target
print("Iris dataset loaded from scikit-learn.")
print("Shape of X:", X.shape)
print("Shape of y:", y.shape)

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

# 进行交叉验证
scores = cross_val_score(rf_classifier, X, y, cv=kf)
print("Cross-validation scores:", scores)
print("Mean Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))

# (4)计算并输出模型的准确度、精度、召回率和F1值
y_pred = cross_val_predict(rf_classifier, X, y, cv=kf)

# 计算各项指标
accuracy = accuracy_score(y, y_pred)
precision = precision_score(y, y_pred, average='macro')
recall = recall_score(y, y_pred, average='macro')
f1 = f1_score(y, y_pred, average='macro')

print(f"Accuracy: {accuracy:.2f}")
print(f"Precision: {precision:.2f}")
print(f"Recall: {recall:.2f}")
print(f"F1 Score: {f1:.2f}")

 

(2)调用库方法:

pd.read_csv

  • 用途:从CSV文件中读取数据。
  • 参数
    • o 无特定参数需要说明,pd.read_csv是pandas库中用于读取CSV文件的标准函数。

load_iris

  • 用途:从scikit-learn库中加载iris数据集。
  • 参数:无参数需要指定,直接调用即可加载数据。

RandomForestClassifier

  • 用途:随机森林分类器。
  • 参数
    • o n_estimators=100:森林中树的数量,默认是100。更多的树可能会提高模型的性能,但会增加计算成本。
    • o random_state=42:随机数生成器的种子,确保结果可复现。

KFold

  • 用途:生成K折交叉验证的分割。
  • 参数
    • o n_splits=5:分割的折数,这里为5,表示五折交叉验证。
    • o shuffle=True:在分割之前是否对数据进行随机打乱。
    • o random_state=42:随机数生成器的种子,确保每次分割的结果都是一样的,以便于复现结果。

cross_val_score

  • 用途:计算交叉验证的得分。
  • 参数
    • o cv=kf:指定交叉验证的分割策略,这里使用KFold对象。

cross_val_predict

  • 用途:使用交叉验证对数据进行预测。
  • 参数
    • o cv=kf:指定交叉验证的分割策略,这里使用KFold对象。

accuracy_score

  • 用途:计算准确度,即预测正确的样本数占总样本数的比例。
  • 参数:无特定参数需要说明。

precision_score

  • 用途:计算精度,即预测为正类的样本中实际为正类的比例。
  • 参数
    • o average='macro':在多分类问题中,指定平均策略。'macro'表示简单平均,不考虑各类别的样本数量。

recall_score

  • 用途:计算召回率,即实际为正类的样本中被预测为正类的比例。
  • 参数
    • o average='macro':在多分类问题中,指定平均策略。'macro'表示简单平均,不考虑各类别的样本数量。

f1_score

  • 用途:计算F1值,即精度和召回率的调和平均值。
  • 参数
    • o average='macro':在多分类问题中,指定平均策略。'macro'表示简单平均,不考虑各类别的样本数量。

 

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

(1)准确率:0.96

 

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

 

四、心得体会

  • 通过这个实验,我能够将课堂上学到的机器学习理论应用到实际的编程和数据分析中。这加深了我对随机森林分类器和交叉验证等概念的理解。我学到了在应用机器学习算法之前,如何从不同来源(如CSV文件和scikit-learn库)加载数据,并理解了数据预处理的重要性。实验中,我学会了如何使用try-except语句来处理可能发生的错误,比如文件不存在的情况,这提高了代码的健壮性。
  •  

    

posted @ 2024-10-29 17:39  Hbro  阅读(43)  评论(0)    收藏  举报