10.17日报

今天进行了机器学习B的实验,以下为实验内容:

上机实验一:数据准备与模型评估 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 软件。

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)}")
posted @ 2024-11-27 10:06  Code13  阅读(40)  评论(0)    收藏  举报