Bug*_*sli 8 python neural-network multilabel-classification keras tensorflow
我正在尝试构建一个多标签分类器来预测某些输入数据的概率为0或1.我使用的是神经网络和Tensorflow + Keras(后来可能是CNN).
问题如下:数据严重偏差.还有很多负面的例子,而不是积极的,可能是90:10.因此,我的神经网络几乎总是输出非常低的概率作为正例.使用二进制数,它在大多数情况下会预测为0.
几乎所有类别的性能都> 95%,但这是因为它几乎总是预测为零......因此假阴性的数量非常高.
一些建议如何解决这个问题?
以下是我到目前为止所考虑的想法:
使用定制的损失函数惩罚假阴性(我的第一次尝试失败).类似于类中加权积极的例子而不是消极的例子.这类似于类权重,但在类中.你会如何在Keras实现这一点?
通过克隆它们然后过度拟合神经网络来过采样正例,以便平衡正面和负面的例子.
提前致谢!
我觉得你的两个建议已经很好了。当然,您也可以简单地对负类进行欠采样。
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
Run Code Online (Sandbox Code Playgroud)
您的损失函数可以结合一些其他测量来研究正类别的召回。
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |