我是机器学习的初学者。我很困惑如何将数据集的不同功能组合到一个功能中。
例如,我在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”的功能。一种解决方案是为每个类型分配一个整数值(unknown = 0,action = 1,adventure = 2 ..etc)并创建一个这样的数据框:
movie genre
Toy Story 1,2,4,7
Golden Eye 1,6
Four Rooms 0
Get Shorty 3,4,6
Copy Cat 2,5
但在这种情况下,列中的条目将不再是整数/浮点值。这会影响我未来的机器学习过程中的步骤,如拟合模型和评估算法吗?
答案 0 :(得分:1)
将每个零和一系列转换为8位数
玩具故事= 01101001
二进制,即105
类似地,Golden Eye = 01000010 = 26946您可以手动完成其余操作:http://www.binaryhexconverter.com/binary-to-decimal-converter
以编程方式进行相对简单的操作 - 只需查看每个标签,并为其分配两个适当的幂,然后将它们相加
答案 1 :(得分:0)
您可以做的一件事就是制作一个包含所有可能组合的矩阵,并将其重塑为单个矢量。如果您想要考虑所有组合,它将具有与原始组合相同的长度。如果有不需要的组合,请不要将它们考虑在内。您的网络与标签无关,并且不介意。
但为什么会出现问题呢?您的数据集看起来很小。
答案 2 :(得分:0)
将它们保留为当前的多特征格式并对该数据执行某种降维技术可能是有效的。
这与经典问题非常相似:我们如何处理分类变量?一个答案是单热或虚拟编码,您的原始DataFrame非常相似。使用单热编码,您可以从单个分类功能开始。使用该功能,可以为每个级别创建一个列,并为该列分配二进制值。编码结果与您开始时的结果非常相似。这种编码很受欢迎,许多人发现它非常有效。由于每部电影可能是多个类型,因此您更进了一步。我不确定逆转这是个好主意。
如果能够正确表示数据,并且有足够的观察结果,那么简单地拥有更多功能并不总是坏事。如果您最终获得了大量功能,那么有很多方法可以降低维度。关于这个主题有很多知识,但一种常见的技术是将主成分分析(PCA)应用于更高维数据集以找到更低维的表示。
由于您正在使用python,因此您可能需要查看scikit-learn
中可用的内容以获取更多想法。他们的文档中可以找到一些资源here和here。