为什么我在 cross_val_score() 中的分数比在实际测试中高得多?

问题描述 投票:0回答:1

我一直在sklearn中使用随机森林来预测一组数据,下面的代码显示了输出:

print(np.mean(cross_val_score(rf, X_train_resampled,
      y_train_resampled, cv=5, scoring='accuracy')))
print(balanced_accuracy_score(y_valid, predictions))

然而,cross_val_score 方法给出了 0.93 的准确率(这显然比实际测试要高很多),而 balanced_accuracy_score 给出了 0.40 的准确率。

我一直在询问 newbing 并检查 stackoverflow,但没有得到足够好的答案。是模型不够好出现问题,还是我做错了什么?

scikit-learn metrics
1个回答
0
投票

这是由于数据不平衡造成的。例如,我创建了一个数据集,其中 95% class1,5% class0。如果你在这个数据集上测试一个虚拟模型(总是返回 1),你会得到:

import sklearn
from sklearn.metrics import accuracy_score, balanced_accuracy_score
import numpy as np
data = np.random.randn(100, 10)
labels = np.array(95*[1] + 5 * [0])
class model:
    
    def __init__(self):
        pass
    
    def predict(self, x):
        return np.ones(x.shape[0])
    
dummy_model = model()
print(accuracy_score(labels, dummy_model.predict(data)))
print(balanced_accuracy_score(labels, dummy_model.predict(data)))
© www.soinside.com 2019 - 2024. All rights reserved.