【发布时间】:2019-10-07 13:26:39
【问题描述】:
我目前使用的神经网络可以输出一个热编码输出。
在使用分类报告对其进行评估后,我收到此错误:
UndefinedMetricWarning: Recall and F-score are ill-defined and being set
to 0.0 in samples with no true labels.
在train-test-split 阶段对我的输出进行一次性编码时,我不得不删除其中一列以避免虚拟变量陷阱。结果,我的神经网络的一些预测是[0, 0, 0, 0],表明它属于第五类。我相信这是UndefinedMetricWarning: 的原因。
有解决办法吗?或者我应该首先避免分类报告,有没有更好的方法来评估这些类型的神经网络?我对机器学习和神经网络还很陌生,请原谅我的无知。谢谢大家的帮助!!
编辑#1:
这是我的网络:
from keras.models import Sequential
from keras.layers import Dense
classifier = Sequential()
classifier.add(Dense(units = 10000,
input_shape = (30183,),
kernel_initializer = 'glorot_uniform',
activation = 'relu'
)
)
classifier.add(Dense(units = 4583,
kernel_initializer = 'glorot_uniform',
activation = 'relu'
)
)
classifier.add(Dense(units = 1150,
kernel_initializer = 'glorot_uniform',
activation = 'relu'
)
)
classifier.add(Dense(units = 292,
kernel_initializer = 'glorot_uniform',
activation = 'relu'
)
)
classifier.add(Dense(units = 77,
kernel_initializer = 'glorot_uniform',
activation = 'relu'
)
)
classifier.add(Dense(units = 23,
kernel_initializer = 'glorot_uniform',
activation = 'relu'
)
)
classifier.add(Dense(units = 7,
kernel_initializer = 'glorot_uniform',
activation = 'relu'
)
)
classifier.add(Dense(units = 4,
kernel_initializer = 'glorot_uniform',
activation = 'softmax'
)
)
classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
以上是我的网络。训练网络后,我使用以下方法预测值并将它们转换为类标签:
from sklearn.preprocessing import LabelBinarizer
labels = np.argmax(predictions, axis = -1)
lb = LabelBinarizer()
labeled_predictions = lb.fit_transform(labels)
在调用比较y_test 和labeled_predctions 的分类报告时,我收到错误消息。
**作为任何好奇的人的旁注,我正在尝试自然语言处理和神经网络。我的网络的输入向量如此之大的原因是它将计数向量化文本作为其输入的一部分。
编辑#2:
我将预测转换为数据帧,并删除了测试集和预测的重复项,得到了这个结果:
y_test.drop_duplicates()
javascript python r sql
738 0 0 0 0
4678 1 0 0 0
6666 0 0 0 1
5089 0 1 0 0
6472 0 0 1 0
predictions_df.drop_duplicates()
javascript python r sql
738 1 0 0 0
6666 0 0 0 1
5089 0 1 0 0
3444 0 0 1 0
所以,基本上发生的事情是由于softmax被转换为二进制的方式,预测永远不会导致[0,0,0,0]。当一个热编码y_test 时,我不应该删除第一列吗?
【问题讨论】:
-
你能展示你的网络吗?如果你的最后一层是 softmax 你不应该有这个问题。
-
我已经编辑了帖子以包含我的网络!
标签: python keras neural-network categorical-data one-hot-encoding