1

我有一个包含二元分类问题的不平衡数据集。我构建了随机森林分类器并使用了10次k折交叉验证褶皱。如何计算K折叠交叉验证的不平衡数据集的精度,召回率和f1得分以及python中的10倍

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

我被录取结果

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

我已经计算我的预测的平均值和标准偏差得到了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] 

我算精度的结果如下

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

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

回答

2

当您使用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_score',其中存储每个折叠的度量值用于某个度量。对于每个度量标准,您可以使用np.mean(results[value])np.std(results[value])来计算均值和标准值,其中value是您指定的指标名称之一。

+0

如何计算每次折叠的训练和测试错误? – Jayashree

+0

cross_val_score仅计算验证数据上的度量值。但是你可以制作两个自定义迭代器。第一个迭代器将产生你训练对象的位置索引,而不是验证位置索引产生相同的列车对象你的特征DataFrame的位置索引。第二个迭代器将产生与第一个迭代器相同的对象位置索引,但val位置索引不会产生您的要素DataFrame的剩余对象位置索引。 –

+0

在使用自定义第一个cv的cross_val_score之后,您将在火车集上获得指标值,并在使用自定义第二个cv的cross_val_score之后获得验证集上的指标值。 –

相关问题