scikitlearn – 如何对由多个独立值组成的单一特征建模

我的数据集由数百万行和几十个特征组成。

其中一个特征是由1000个不同值组成的标签(想象每行是一个用户,而这个特征是用户的firstname):

Firstname,Feature1,Feature2,....Quentin,1,2Marc,0,2Gaby,1,0Quentin,1,0

对于这个特征(用于进行聚类),最佳的表示方式是什么:

  1. 我可以使用LabelEncoder将数据转换为整数,但这在这里没有意义,因为两个不同的标签之间没有逻辑上的“顺序”

    Firstname,F1,F2,....0,1,21,0,22,1,00,1,0
  2. 我可以将该特征拆分为1000个特征(每个标签一个),当标签匹配时为1,否则为0。然而,这将导致一个非常大的矩阵(如果我的分类器不能使用稀疏矩阵,这将太大)

    Quentin,Marc,Gaby,F1,F2,....1,0,0,1,20,1,0,0,20,0,1,1,01,0,0,1,0
  3. 我可以将LabelEncoder的值表示为N列中的二进制,这将比前一个想法减少最终矩阵的维度,但我对结果不确定:

    LabelEncoder(Quentin) = 0 = 0,0LabelEncoder(Marc)    = 1 = 0,1LabelEncoder(Gaby)    = 2 = 1,0A,B,F1,F2,....0,0,1,20,1,0,21,0,1,00,0,1,0
  4. … 还有其他想法吗?

你对解决方案3有什么看法?


编辑以提供一些额外的解释

我应该在我的第一篇文章中提到,在真实数据集中,这个特征更像是分类树的最终叶子(示例中的Aa1Aa2等 – 这不是一个二叉树)。

             A                         B                    C       Aa          Ab             Ba          Bb         Ca      Cb    Aa1  Aa2  Ab1 Ab2 Ab3     Ba1 Ba2     Bb1 Bb2    Ca1 Ca2 Cb1 Cb2

因此,在同一级别下的两个术语之间存在相似性(Aa1Aa2Aa3相当相似,而Aa1Ba1Cb2的不同程度相同)。

最终目标是从较小的数据集中找到相似的实体:我们在较小的数据集上训练一个OneClassSVM,然后获取整个数据集中每个术语的距离


回答:

这个问题在很大程度上是一个独热编码的问题。我们如何以一种可以使用聚类算法的方式表示多个分类值,并且搞乱你的算法所需的距离计算(你可能在使用某种概率有限混合模型,但我就不多说了)?就像用户3914041的回答一样,真的没有确定的答案,但我会逐一审视你提出的每个解决方案并给出我的印象:

解决方案1

如果你像你提到的那样将分类列转换为数值列,那么你会面临你提到的一个相当大的问题:你基本上失去了该列的意义。如果Quentin是0,Marc是1,Gaby是2,这到底意味着什么?在那个时候,为什么还要在聚类中包含那个列?就像用户3914041的回答一样,这是将分类值转换为数值的最简单方法,但它们只是没有用处,并且可能会对聚类结果有害。

解决方案2

在我看来,根据你如何实施这一切以及你对聚类的目标,这将是你最好的选择。因为我假设你计划使用sklearn和类似k-Means的东西,你应该可以很好地使用稀疏矩阵。然而,像imaluengo建议的那样,你应该考虑使用不同的距离度量。你可以考虑将所有数值特征缩放到与分类特征相同的范围,然后使用像余弦距离的东西。或者混合使用距离度量,就像我下面提到的。但总的来说,这可能会是你分类数据对聚类算法最有用的表示方式。

解决方案3

我同意用户3914041的观点,这没有用,并且引入了与#1提到的一些相同的问题——当两个(可能)完全不同的名字共享一个列值时,你失去了意义。

解决方案4

另一个解决方案是遵循这里的回答的建议。你可以考虑开发你自己的k-means-like算法版本,该算法采用混合距离度量(对于独热编码的分类数据使用汉明距离,对于其余部分使用欧几里得距离)。似乎在开发针对混合分类和数值数据的k-means-like算法方面有一些工作,比如这里

我猜考虑你是否需要在这个分类数据上进行聚类也很重要。你希望看到什么?

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注