9.21

(1)利用 pandas 库从本地读取 iris 数据集; (2)从 scikit-learn 库中直接加载 iris 数据集; (3)实现五折交叉验证进行模型训练; (4)计算并输出模型的准确度、精度、召回率和 F1 值。

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

# 方法一:利用pandas库从本地读取iris数据集(假设本地有对应格式的文件,例如CSV格式)
# 这里假设本地文件名为iris.csv,且数据格式符合相应要求(特征列和标签列符合鸢尾花数据集规范)
# 如果是其他格式如Excel等,需使用对应的pandas读取函数进行调整
def read_iris_local():
    data = pd.read_csv('iris.csv')
    X = data.iloc[:, :-1].values  # 特征数据,取除最后一列(标签列)之外的所有列
    y = data.iloc[:, -1].values  # 标签数据,取最后一列
    return X, y

# 方法二:从scikit-learn库中直接加载iris数据集
def load_iris_sklearn():
    iris = load_iris()
    X = iris.data  # 特征数据
    y = iris.target  # 对应标签数据
    return X, y

# 实现五折交叉验证进行模型训练,并计算相关评估指标
def cross_validation_and_evaluation():
    # 加载数据集,可以选择使用本地读取或者直接从sklearn加载的方式,这里使用从sklearn加载的方式
    X, y = load_iris_sklearn()
    # 创建分类器对象,这里使用随机森林分类器,可按需替换
    rf_classifier = RandomForestClassifier(n_estimators=100)
    # 创建KFold对象用于五折交叉验证
    kf = KFold(n_splits=5, shuffle=True, random_state=42)
    # 用于存储每次折叠训练得到的预测结果
    y_pred_all = []
    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)
        y_pred_all.extend(y_pred)

    # 计算准确度
    accuracy = accuracy_score(y, y_pred_all)
    # 计算精度
    precision = precision_score(y, y_pred_all, average='macro')
    # 计算召回率
    recall = recall_score(y, y_pred_all, average='macro')
    # 计算F1值
    f1 = f1_score(y, y_pred_all, average='macro')

    print("准确度:", accuracy)
    print("精度:", precision)
    print("召回率:", recall)
    print("F1值:", f1)

if __name__ == "__main__":
    cross_validation_and_evaluation()
    
述代码主要实现了以下功能:
    1. 定义了两个函数分别用于从本地(以pandas读取CSV文件为例)和从scikit-learn库中获取iris数据集的特征和标签数据。
    2. cross_validation_and_evaluation函数中,先加载数据集,然后创建RandomForestClassifier分类器以及KFold对象用于五折交叉验证。在循环中,针对每一次的训练集和测试集划分进行模型训练和预测,并将每次预测结果汇总。
    3. 最后,基于汇总后的预测结果和真实标签,计算并输出模型的准确度、精度、召回率和F1值,这些评估指标能从不同角度反映模型在数据集上的分类性能表现。
posted @ 2024-12-31 15:12  酥饼馅红豆沙  阅读(7)  评论(0)    收藏  举报