【问题标题】:TensorFlow: Binary classification accuracyTensorFlow:二进制分类精度
【发布时间】:2017-05-30 09:07:02
【问题描述】:

在二元分类的上下文中,我使用一个具有 1 个隐藏层的神经网络,该网络使用 tanh 激活函数。输入来自 word2vect 模型并进行了标准化。

分类器准确率在 49%-54% 之间。

我使用混淆矩阵来更好地了解正在发生的事情。研究了输入层特征数和隐藏层神经元数量对准确率的影响。

我可以从混淆矩阵中观察到这样一个事实,即模型根据参数进行预测,有时大多数行是正数,有时大部分是负数。

有什么建议为什么会发生这个问题?还有哪些其他点(除了输入大小和隐藏层大小)可能会影响分类的准确性?

谢谢

【问题讨论】:

  • 这并不比抛硬币好。在做任何其他事情之前,你应该把神经网络放在一边,更好地理解你的数据。我还建议尝试逻辑回归。

标签: neural-network confusion-matrix


【解决方案1】:

鉴于您提供的信息,有点难以猜测。 标签是否平衡(50% 正面,50% 负面)?所以这意味着你的网络根本没有训练,因为你的表现大致对应于随机表现。预处理中可能存在错误吗?还是任务太难了?训练集大小是多少?

我不认为神经元的数量是问题,只要它是合理的,即数百或数千。

或者,您可以尝试另一种损失函数,即交叉熵,它是多类分类的标准,也可以用于二元分类: https://www.tensorflow.org/api_docs/python/nn/classification#softmax_cross_entropy_with_logits

希望这会有所帮助。

【讨论】:

  • 数据集平衡良好,50%正负。训练集形状是 (411426,X) 训练集形状是 (68572,X) X 是来自 word2vec 的特征的数量,我尝试使用 [100,300] 之间的值我有 1 个隐藏层,以及我测试的神经元在 [100,300] 之间变化,我还测试了更小的特征/神经元大小:隐藏层上有 2-20 个特征和 10 个神经元。我也使用交叉熵作为代价函数。
  • 我坚信标签或其他地方存在一些错误。鉴于您使用 word2vec 作为输入,您已经有了一个很好的表示。因此,我建议尝试使用线性模型 (SVM),如果任务可行,它肯定会提供比随机更好的性能。为此,了解任务是什么会有所帮助?希望深网能解决这个问题现实吗?
  • 为了查看问题是来自我的神经网络实现还是输入数据,我使用了带有 to_dense() 函数的 tf-idf 表示。使用 TF-IDF 和稍微改变参数的结果是 78% 的准确度。
  • 所以问题在于我使用 word2vec 作为数据输入。使用 word2vec 生成的模型似乎工作正常: model_train.most_similar(positive='tv'): [('movies', 0.8289981484413147), ('hills', 0.7655214071273804), ('football', 0.7631117105484009), ('mtv', 0.7516076564788818),('剧集',0.7510683536529541),('暮光',0.7488611340522766),('电影',0.7444069981575012),('Quicthe',0.7419215440750122),('DVD',0.7418527603149414),......]所以可能是来自数据方差的问题?如何检查这一点?
【解决方案2】:

数据集平衡良好,50% 正负。

训练集形状为(411426,X)

训练集形状为(68572,X)

X 是来自 word2vec 的特征数,我尝试使用 [100,300] 之间的值

我有 1 个隐藏层,我测试的神经元数量在 [100,300] 之间变化

我还测试了较小的特征/神经元大小:隐藏层上有 2-20 个特征和 10 个神经元。 我也使用交叉熵作为代价函数。

【讨论】:

  • 不要添加答案;这不应该是一个对话框。编辑您的原始问题。
猜你喜欢
  • 2021-04-10
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 2020-09-18
  • 2017-07-25
  • 2018-01-09
  • 2020-04-17
相关资源
最近更新 更多