Python 如何计算用于K倍交叉验证的不平衡数据集的精确度、召回率和f1分数?

Python 如何计算用于K倍交叉验证的不平衡数据集的精确度、召回率和f1分数?,python,scikit-learn,random-forest,cross-validation,supervised-learning,Python,Scikit Learn,Random Forest,Cross Validation,Supervised Learning,我有一个包含二元分类问题的不平衡数据集,我构建了随机森林分类器,并使用了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 res

我有一个包含二元分类问题的不平衡数据集,我构建了随机森林分类器,并使用了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中计算值?

当您使用
cross\u val\u 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)

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

如何计算每个折叠的训练和测试错误?交叉值仅计算验证数据的度量值。但是您可以创建两个自定义迭代器。第一个迭代器将为您生成训练对象位置索引,而不是验证位置索引,生成相同的训练对象特征数据帧的位置索引。第二个迭代器将生成和第一个迭代器相同的训练对象位置索引,但不是val位置索引,而是生成特征数据帧的剩余对象位置索引。在使用自定义第一个cv进行交叉val评分后,您将在训练集上获得度量值,在使用自定义第二个cv进行交叉val评分后,您将在验证集上获得度量值。对于版本0.19,它应该是
模型选择。交叉验证
,而不是
模型选择。交叉验证评分