【问题标题】:How to compute precision,recall and f1 score of an imbalanced dataset for K fold cross validation?如何计算 K 折交叉验证的不平衡数据集的精度、召回率和 f1 分数?
【发布时间】:2018-03-17 19:42:23
【问题描述】:

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

【问题讨论】:

    标签: python scikit-learn random-forest cross-validation supervised-learning


    【解决方案1】:

    当您使用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 字典:'accuracy'、'precision'、'recall'、'f1_score',它存储特定指标的每个折叠的指标值。对于每个指标,您可以使用 np.mean(results[value])np.std(results[value]) 计算平均值和标准值,其中 value - 您指定的指标名称之一。

    【讨论】:

    • 如何计算每一折的训练和测试误差?
    • cross_val_score 仅根据验证数据计算指标值。但是您可以制作两个自定义迭代器。第一个迭代器将为您提供训练对象位置索引,而不是验证位置索引,而是为您的特征 DataFrame 生成相同的训练对象位置索引。第二个迭代器将产生与第一个迭代器相同的训练对象位置索引,但不是 val 位置索引会产生剩余对象的特征 DataFrame 的位置索引。
    • 在使用自定义第一个 cv 的 cross_val_score 之后,您将获得训练集上的指标值,在使用自定义第二个 cv 的 cross_val_score 之后,您将获得验证集上的指标值。
    • 对于 0.19 版,应该是 model_selection.cross_validate 而不是 model_selection.cross_val_score
    猜你喜欢
    • 2021-12-26
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 2021-11-02
    • 2020-04-16
    • 2018-12-24
    相关资源
    最近更新 更多