【问题标题】:Machine Learning: combining features into single feature机器学习:将特征组合成单个特征
【发布时间】:2017-05-26 22:40:13
【问题描述】:

我是机器学习的初学者。我很困惑如何将数据集的不同特征组合成一个特征。

例如,我在 Python Pandas 数据框中有一个数据集,其特征如下:

movie        unknown action adventure animation fantasy horror romance sci-fi

Toy Story    0       1      1          0        1       0      0       1              
Golden Eye   0       1      0          0        0       0      1       0      
Four Rooms   1       0      0          0        0       0      0       0    
Get Shorty   0       0      0          1        1       0      1       0
Copy Cat     0       0      1          0        0       1      0       0    

我想将这 n 个特征转换为一个名为“movie_genre”的特征。一种解决方案是为每种类型分配一个整数值(未知 = 0,动作 = 1,冒险 = 2 ..等)并创建一个如下所示的数据框:

movie       genre
Toy Story   1,2,4,7
Golden Eye  1,6
Four Rooms  0
Get Shorty  3,4,6
Copy Cat    2,5

但在这种情况下,列中的条目将不再是整数/浮点值。这会影响我未来在机器学习过程中的步骤,比如拟合模型和评估算法吗?

【问题讨论】:

  • 结合这些标签的目的是什么?
  • 最后我正在尝试设计一个电影推荐系统。我有很多功能。目标是减少特征数量

标签: python machine-learning


【解决方案1】:

将每个系列的 0 和 1 转换为 8 位数字

玩具总动员 = 01101001

二进制是 105

同理,金眼=01000010 = 26946

您可以在这里手动完成剩下的工作:http://www.binaryhexconverter.com/binary-to-decimal-converter

以编程方式执行相对简单 - 只需查看每个标签,并为其分配适当的 2 次方,然后将它们相加

【讨论】:

  • 这样做的问题是您正在丢失信息。 0 或 1 表示存在或不存在流派,但数字代码不代表此类信息,并且标签的数量可能正在爆炸式增长。
  • 实际上这是不丢失任何信息的唯一方法。我所做的就是将 8 位长的 1 和 0 集合转换为十进制数;更多阅读:electronics-tutorials.ws/binary/bin_2.html
  • 我理解,但是对于大多数算法来说,整数的含义与几个二进制变量的含义不同。二进制文件作为一个整体,对这个问题更具描述性。将这两种情况的熵视为信息的度量。
【解决方案2】:

将它们保留为当前的多特征格式并对该数据执行某种降维技术可能是有效的。

这与一个经典问题非常相似:我们如何处理分类变量?一个答案是 one-hot 或 dummy 编码,您的原始 DataFrame 与它非常相似。使用 one-hot 编码,您可以从一个单一的分类特征开始。使用该功能,您可以为每个级别创建一个列,并为该列分配一个二进制值。编码结果看起来与您开始的结果非常相似。这种编码很流行,许多人发现它非常有效。您的电影更进一步,因为每部电影都可能是多种类型。我不确定扭转这是一个好主意。

如果能够恰当地表示数据并且您有足够的观察结果,那么仅仅拥有更多特征并不总是一件坏事。如果你最终得到的特征数量过多,那么有很多方法可以降低维度。关于这个主题有很多知识,但一种常见的技术是将主成分分析 (PCA) 应用于高维数据集以找到低维表示。

由于您使用的是 python,您可能想查看scikit-learn 中的可用内容以获取更多想法。可以在 herehere 找到他们文档中的一些资源。

【讨论】:

  • 谢谢..所以你说目前的功能表示很好..帮助了很多:)
  • 我不会说这很好,但我确实认为这是一个不错的起点。在那之后你可以做很多事情,而且应该做很多事情,而且应该在很大程度上针对你要解决的问题进行定制。
【解决方案3】:

您可以做的一件事是制作一个包含所有可能组合的矩阵并将其重塑为单个向量。如果您想考虑所有组合,它将具有与原始组合相同的长度。如果有您不需要的组合,请不要考虑它们。您的网络与标签无关,它不会介意。

但是为什么这是个问题呢?您的数据集看起来足够小。

【讨论】:

  • 这是数据集的一小部分。实际数据集包含更多特征
猜你喜欢
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 2021-05-12
  • 2019-07-14
  • 2011-05-17
  • 2016-09-11
  • 2019-05-30
  • 1970-01-01
相关资源
最近更新 更多