在python中如何计算K倍10倍交叉验证的不平衡数据集的精度、召回率和f1得分

2024-04-28 12:49:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含二值分类问题的不平衡数据集,我建立了随机森林分类器,并使用了10倍的k倍交叉验证。

kfold = model_selection.KFold(n_splits=10, random_state=42)
model=RandomForestClassifier(n_estimators=50) 

我得到了10倍的结果

results = model_selection.cross_val_score(model,features,labels, cv=kfold)
print results
[ 0.60666667  0.60333333  0.52333333  0.73        0.75333333  0.72        0.7
  0.73        0.83666667  0.88666667]

我通过计算结果的平均值和标准差来计算准确度

print("Accuracy: %.3f%% (%.3f%%)") % (results.mean()*100.0, results.std()*100.0)
Accuracy: 70.900% (10.345%)

我的预测如下

predictions = cross_val_predict(model, features,labels ,cv=10)

由于这是一个不平衡的数据集,我想计算每一次折叠的精度、召回率和f1分数,并对结果进行平均。 如何在python中计算这些值?


Tags: 数据labelsmodel森林分类valresultscv
1条回答
网友
1楼 · 发布于 2024-04-28 12:49:08

当您使用cross_val_score方法时,您可以指定,可以在每个折叠上计算哪些分数:

from sklearn.metrics import make_scorer, accuracy_score, precision_score, recall_score, f1_score

scoring = {'accuracy' : make_scorer(accuracy_score), 
           'precision' : make_scorer(precision_score),
           'recall' : make_scorer(recall_score), 
           'f1_score' : make_scorer(f1_score)}

kfold = model_selection.KFold(n_splits=10, random_state=42)
model=RandomForestClassifier(n_estimators=50) 

results = model_selection.cross_val_score(estimator=model,
                                          X=features,
                                          y=labels,
                                          cv=kfold,
                                          scoring=scoring)

在交叉验证之后,您将获得带以下键的results字典:“准确性”、“精度”、“召回”、“f1嫒分数”,这些键存储特定度量的每个折叠上的度量值。对于每个度量,可以使用np.mean(results[value])np.std(results[value])计算平均值和std值,其中value是指定度量名称之一。

相关问题 更多 >