我试图建立一个多标签分类器来预测一些输入数据的概率为0或1。我使用神经网络和Tensorflow + Keras (可能稍后是CNN )。
问题是:数据高度倾斜。负数比正数多,可能是90:10。因此,我的神经网络几乎总是输出非常低概率的正例子。在大多数情况下,使用二进制数可以预测0。
几乎所有类的性能都在95%以上,但这是因为它几乎总是预测为零。因此,假阴性的数量很高。
关于如何解决这个问题的一些建议?
以下是我迄今考虑过的一些想法:
提前感谢!
发布于 2018-03-02 08:50:50
你走在正确的轨道上。
通常,您可以在训练前平衡您的数据集,即减少代表过多的类,或者为代表不足的类生成人工(增强)数据,以促进其发生。
如果你必须增加表格数据,比如销售数据,元数据,等等.这要复杂得多,因为您必须小心,不要将您自己的假设隐式地提供到模型中。
发布于 2018-02-20 08:35:11
我认为你的两个建议已经很好了。当然,您也可以简单地对负面类进行欠采样。
def balance_occurences(dataframe, zielspalte=target_name, faktor=1):
least_frequent_observation=dataframe[zielspalte].value_counts().idxmin()
bottleneck=len(dataframe[dataframe[zielspalte]==least_frequent_observation])
balanced_indices=dataframe.index[dataframe[zielspalte]==least_frequent_observation].tolist()
for value in (set(dataframe[zielspalte])-{least_frequent_observation}):
full_list=dataframe.index[dataframe[zielspalte]==value].tolist()
selection=np.random.choice(a=full_list,size=bottleneck*faktor, replace=False)
balanced_indices=np.append(balanced_indices,selection)
df_balanced=dataframe[dataframe.index.isin(balanced_indices)]
return df_balanced您的损失函数可以与其他度量相结合,查看正类的回忆。
https://stackoverflow.com/questions/48880273
复制相似问题