And*_*y G 5 machine-learning deep-learning tensorflow
我有两个看起来像这样的数据集:
DATASET 1
Training (Class 0: 8982, Class 1: 380)
Testing (Class 0: 574, Class 1: 12)
DATASET 2
Training (Class 0: 8982, Class 1: 380)
Testing (Class 0: 574, Class 1: 8)
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 Tensorflow 中构建一个深度前馈神经网络。我在 90 年代获得准确度,在 80 年代获得 AUC 分数。当然,数据集严重不平衡,因此这些指标毫无用处。我的重点是获得良好的召回值,我不想对第 1 类进行过采样。我一直在玩弄模型的复杂性,但无济于事,最好的模型只能正确预测 25% 的正类。
我的问题是,考虑到这些数据集的分布,在没有获得更多数据的情况下构建模型是徒劳的(我无法获得更多数据),还是有一种方法可以处理如此不平衡的数据。
谢谢!
我可以使用tensorflow来学习比例约为30:1的不平衡分类吗
是的,我有。具体来说,Tensorflow 提供了输入权重矩阵的能力。看tf.losses.sigmoid_cross_entropy,有一个权重参数。您可以输入形状与Y匹配的矩阵,并为Y的每个值提供训练示例应具有的相对权重。
找到正确权重的一种方法是开始不同的平衡并运行训练,然后查看混淆矩阵以及每个类别的精度与准确度的对比。一旦你让两个类具有大致相同的精度与准确率,那么它们就达到了平衡。
这是一个示例实现,它将Y转换为权重矩阵,对我来说效果非常好
def weightMatrix( matrix , most=0.9 ) :
b = np.maximum( np.minimum( most , matrix.mean(0) ) , 1. - most )
a = 1./( b * 2. )
weights = a * ( matrix + ( 1 - matrix ) * b / ( 1 - b ) )
return weights
Run Code Online (Sandbox Code Playgroud)
大多数参数表示要考虑的最大分数差异。 0.9等于 .1:.9 = 1:9 ,其中 0.5 等于 1:1。低于 0.5 的值不起作用。
| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |