F1值会受到不平衡数据的影响吗?

  统计/机器学习 监督式学习 模型验证    浏览次数: 413
2

现在的用来做二元分类的数据集是严重非平衡的,我想知道在这种情况下,F1值还适不适用?数据非平衡对F1值有什么样的影响?


 

yangyang   2018-06-14 06:28



   2个回答 
7

当然有影响的。

看下图,横坐标是数据中阳性样本的比重,纵坐标是一个随机预测结果对应的F1值,可以看作是baseline。阳性样本的比重不同,baseline变化很大,所以数据的平衡性对F1值影响还是很大的。

代码如下

from sklearn.metrics import f1_score
import numpy as np
import matplotlib.pyplot as plt

fracs, f1s = [], []
for frac in np.linspace(0.01, 0.99, 20):
    n = 1000000
    n1 = int(n * frac)
    n0 = n - n1
    true = [1] * n1 + [0] * n0
    pred = np.random.randint(0, 2, n)
    fracs.append(frac)
    f1s.append(f1_score(true, pred))
    
plt.plot(fracs, f1s)
plt.xlabel('% of positive labels')
plt.ylabel('F1 score of random guess')
plt.show()


mrhust   2018-06-21 23:11

谢谢! - yangyang   2018-06-26 22:44
2

关于非平衡数据以及各种metric对应的表现可以看看这篇Facing Imbalanced Data


Nagozi   2018-06-25 05:48

谢谢! - yangyang   2018-06-26 22:45


  相关主题

多元分类的混淆矩阵   1回答

二元分类问题中经常提到的TP,TN,FN,FP都是什么意思?   3回答

利用交叉验证调参后还需要用完整的数据集重新训练吗?   2回答

什么是混淆矩阵(confusion matrix)   2回答

机器学习里的ppv是什么意思?   1回答

k近邻算法(k-NN)怎么选k   2回答

precision-recall曲线下面积有什么意义?   3回答

用python求二元分类的混淆矩阵   2回答

十折交叉验证   1回答

如果我用交叉验证,还是否需要单独分出测试集?   1回答

测试集和验证集的区别?   4回答

交叉验证是如何进行的?   1回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!