【问题标题】:How to construct a machine learning model for a boolean result?如何为布尔结果构建机器学习模型?
【发布时间】:2021-08-03 16:23:29
【问题描述】:

我对 Python 和机器学习相当陌生。我试图为以下问题提出一些模型:我有一堆 x-y 关系形式的数据,用于描述正面和相同类型的数据来描述负面。

由于数据不统一,有时我有 2000 行描述阳性,有时只有 200 行,我尝试将其绘制在图表中,并通过一些 Conv2D-、MaxPooling-、Flatten- 和 Dense- 层运行它们。

现在效果很好,准确度指标在 95% 和 100% 之间,但我的问题是该模型如何重新调整浮点数而不是真假,我无法真正辨别我的模型的真实准确度有多高.我该如何从那里着手?

另外,我可以使用哪些超参数来获得布尔返回?什么类型的模型适合这个问题?感谢您的宝贵时间。

编辑: 我的模型使用以下代码:

model = Sequential()
model.add(Conv2D(512,kernel_size=(5,5),activation="relu",padding="same",input_shape=(400,800,1)))
model.add(Dropout(0.3))
model.add(MaxPooling2D())
model.add(Conv2D(256,kernel_size=(5,5),activation="relu",padding="same"))
model.add(MaxPooling2D())
model.add(Conv2D(128,kernel_size=(5,5),activation="relu",padding="same"))
model.add(Dropout(0.3))
model.add(MaxPooling2D())
model.add(Flatten())
model.add(Dense(256,activation="relu"))
model.add(Dropout(0.3))
model.add(Dense(1,activation="sigmoid"))
model.compile(optimizer=Adam(learning_rate=0.0001),loss="binary_crossentropy",metrics=["accuracy"])

输出是一个介于 0 和 1 之间的数字。我想知道如何构建一个具有布尔输出的神经网络,或者通过其他方式我可以在我的测试数据上获得适当的准确性。

【问题讨论】:

  • 很难确定您的问题是因为您没有显示您的代码。但是根据您的架构(层),我认为您错过了最后一层,即激活层(即 ReLU 或 sigmoid 函数)。
  • 你问错了问题,你已经有了一个可以工作的模型,你应该问了解它是如何工作的以及如何将输出转换为二元决策,关于它已经有多个问题了在这里。

标签: python machine-learning keras scikit-learn


【解决方案1】:

您的输出包含一个 sigmoid 函数,这意味着正如您所说,您的网络在区间 [0, 1] 内输出一个值。您可以将此输出视为概率分布。因此,如果输出

【讨论】:

  • 我可以这样做,并且在手动进行验证时,我一直在这样做,但以这种方式操纵数字似乎并不正确。感谢您的评论。
  • 就是这样。没有其他方法可以做到这一点。您有一个二元分类任务并使用二元交叉熵损失。这个损失计算的正是我提到的概率分布。您的模型学习概率分布,并从该分布中获得最终标签。这里没有操纵。如果我理解正确的话就已经是这样了
  • 谢谢。你有什么其他类型的模型可以用来解决问题的建议吗?我想从几个方面来解决这个问题。
  • 我的意思是你当然可以尝试不同类型的基于 CNN 的网络。您是指与 CNN 或其他 Cnn 网络完全不同的东西吗?
  • 完全不同的东西,比如 RNN。或者其他可以学习 y-x 关系的 NN。我对所有不同类型的算法有点迷茫。
猜你喜欢
  • 2020-02-03
  • 2022-12-10
  • 2020-10-14
  • 2019-06-16
  • 2020-07-19
  • 2020-12-02
  • 1970-01-01
  • 2019-09-05
  • 2020-09-29
相关资源
最近更新 更多