【问题标题】:How do I transform a column of values into possibly discrete training output classes?如何将一列值转换为可能离散的训练输出类?
【发布时间】:2018-01-13 16:03:48
【问题描述】:

我的数据集是一组特征和一个本质上是视图的列,该列的每个元素都是任意正实数,如下所示。

现在在 Python 中,我想在其上运行 Keras 模型。我计划将此列用作训练分类器的输出标签。我能想到的唯一解决方案是使用 sklearn 对其进行缩放,然后有条件地以某种方式将缩放后的值分类到类中以获得足够的训练标签。例如,如果 0.1

+-------+

| Views |

+-------+

| 173   |

+-------+

| 943   |

+-------+

【问题讨论】:

  • 为什么这被否决了?数据集的格式很好,OP-me 自己投入了时间和资源来处理它。
  • 请阅读How to AskWhat topics can I ask about here?。没有任何尝试的迹象(如在实际代码中),也没有我们可以客观关注的编程。回答“这是最好的方法吗?”通常是主观的,我们也不鼓励这样做。
  • 很公平。得分。

标签: python machine-learning scikit-learn training-data


【解决方案1】:

我建议不要试图将其强加到分类问题中,而是将其视为回归。两个原因:

首先:您的模型目标(分类中的“标签”)不是离散的,而是整数值。这意味着您将丢失任何信息,以使其离散化。

第二:当标签彼此靠近但不包含信息时,分类很有用(比如第 1 类和第 2 类不比第 1 类和第 4 类更相似)。但是,您希望从视图方面彼此靠近的数据点获取信息。

因此,您可能希望使用回归。你可以用 Keras 做到这一点没问题;您只需要更改最后一层(可能还有其他一些事情,具体取决于您的架构)。尝试寻找“回归网络”示例。

【讨论】:

  • 这是有道理的,尤其是第二点。但是我在某处读到,分类/回归问题中缺乏重复会导致训练不佳。还有一个问题是我试图建立属性重要性以获得理想的属性子集。这改变了一些事情,不是吗?
【解决方案2】:

抱歉,Views 列的内容是什么?它是注释(分类)还是某事的计数器(回归)?

如果它是包含标签的列,您可以将每个单个值转换为一个热编码器(参见下面的示例)。最终的表示可以用作输出层来拟合神经网络。

import numpy as np
from keras.utils import to_categorical

views = np.random.randint(3, size=10)
print(views)
# [0 1 2 1 0 1 1 2 1 0]

num_classes = len(set(views))
print(num_classes)
# 3

views = to_categorical(views, num_classes)
print(views)
# [[1. 0. 0.]
#  [0. 0. 1.]
#  [1. 0. 0.]
#  [0. 0. 1.]
#  [0. 0. 1.]
#  [0. 1. 0.]
#  [0. 0. 1.]
#  [0. 1. 0.]
#  [0. 1. 0.]
#  [1. 0. 0.]]

查看https://keras.io/#getting-started-30-seconds-to-keras 以获取示例。变量viewsy_train

【讨论】:

  • Youtube 浏览量。随机整数。我会说回归。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2015-09-17
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多