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()

浙公网安备 33010602011771号