上机实验:数据准备与模型评估
1、实验目的
熟悉 Python 的基本操作,掌握对数据集的读写实现、对模型性能的评估实现的能力;
加深对训练集、测试集、N 折交叉验证、模型评估标准的理解。
2、实验内容
(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)撰写实验报告,提交源代码;实验报告在所有上机实验结束后提交。
4、主要仪器设备
微机及 Python 软件。
Tips:(1)Python 对代码格式十分敏感,务必注意缩进、空格等不规范操作;
(2)用到的库需要提前加载,例如
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
源代码:
# 导入必要的库
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score, StratifiedKFold
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import make_scorer, precision_score, recall_score, f1_score
import numpy as np
# 1. 使用 pandas 从本地读取 iris 数据集
# 假设本地数据集为 iris.csv 文件
# df = pd.read_csv('iris.csv') # 如果本地有数据集,使用这行代码加载
# print(df.head()) # 输出数据集的前几行进行检查
# 2. 从 scikit-learn 加载 iris 数据集
iris = load_iris()
X = iris.data # 特征数据
y = iris.target # 标签数据
# 3. 实现五折交叉验证并训练模型
# 创建分类器
rf_classifier = RandomForestClassifier(n_estimators=100)
# 使用 StratifiedKFold 进行五折交叉验证
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
# 计算模型的准确度
accuracy = cross_val_score(rf_classifier, X, y, cv=cv, scoring='accuracy')
print(f'五折交叉验证的准确度: {accuracy.mean():.4f} (+/- {accuracy.std():.4f})')
# 4. 计算并输出模型的准确度、精度、召回率和 F1 值
def evaluate_model(model, X, y, cv):
# 创建自定义的评估函数
precision = make_scorer(precision_score, average='weighted', zero_division=1)
recall = make_scorer(recall_score, average='weighted', zero_division=1)
f1 = make_scorer(f1_score, average='weighted', zero_division=1)
# 计算精度、召回率和 F1 值
precision_scores = cross_val_score(model, X, y, cv=cv, scoring=precision)
recall_scores = cross_val_score(model, X, y, cv=cv, scoring=recall)
f1_scores = cross_val_score(model, X, y, cv=cv, scoring=f1)
print(f'五折交叉验证的精度: {precision_scores.mean():.4f} (+/- {precision_scores.std():.4f})')
print(f'五折交叉验证的召回率: {recall_scores.mean():.4f} (+/- {recall_scores.std():.4f})')
print(f'五折交叉验证的 F1 值: {f1_scores.mean():.4f} (+/- {f1_scores.std():.4f})')
# 运行模型评估
evaluate_model(rf_classifier, X, y, cv)
首先,你要下载好所有东西和库,并激活软件,