我的数据集由数百万行和几(10)个特征组成。
一个功能是由1000个不同的值组成的标签(想象每一行是用户,此功能是用户的名字:
Firstname,Feature1,Feature2,....
Quentin,1,2
Marc,0,2
Gaby,1,0
Quentin,1,0
此功能的最佳表示形式(执行群集):
我可以使用LabelEncoder
将数据转换为整数,但这里没有意义,因为两个不同的标签之间没有逻辑“顺序”
Firstname,F1,F2,....
0,1,2
1,0,2
2,1,0
0,1,0
我可以在标签匹配时将1000个要素(每个标签一个)中的要素拆分为1,否则为0。然而,这将导致一个非常大的矩阵(如果我不能在我的分类器中使用稀疏矩阵那么太大)
Quentin,Marc,Gaby,F1,F2,....
1,0,0,1,2
0,1,0,0,2
0,0,1,1,0
1,0,0,1,0
我可以将LabelEncoder
值表示为N列中的二进制值,与先前的想法相比,这会减少最终矩阵的维度,但我不确定结果:
LabelEncoder(Quentin) = 0 = 0,0
LabelEncoder(Marc) = 1 = 0,1
LabelEncoder(Gaby) = 2 = 1,0
A,B,F1,F2,....
0,0,1,2
0,1,0,2
1,0,1,0
0,0,1,0
......还有其他想法吗?
您如何看待解决方案3?
编辑以获得一些额外的解释
我应该在我的第一篇文章中提到,但在真实数据集中,该功能更像是分类树的最后一页(Aa1
,Aa2
等等 - 在示例中 - 它是不是二叉树)。
A B C
Aa Ab Ba Bb Ca Cb
Aa1 Aa2 Ab1 Ab2 Ab3 Ba1 Ba2 Bb1 Bb2 Ca1 Ca2 Cb1 Cb2
因此,相同级别下的2个术语之间存在相似性(Aa1
Aa2
和Aa3
非常相似,而Aa1
与{{1}的差别相同比Ba1
)。
最终目标是从较小的数据集中查找类似的实体:我们在较小的数据集上训练Cb2
,然后获取entiere数据集的每个项的距离
答案 0 :(得分:2)
这个问题主要是单热编码之一。我们如何以一种我们可以使用聚类算法的方式表示多个分类值,并且不搞砸了算法需要做的距离计算(您可能使用某种概率有限混合模型,但是我离题了)?与用户3914041的回答一样,确实没有明确的答案,但我会仔细阅读您提供的每个解决方案并给出我的印象:
解决方案1
如果您将分类列转换为您提到的数字列,那么您将面对您提到的那个相当大的问题:您基本上失去了该列的含义。如果Quentin在0,Marc 1和Gaby 2中,这甚至意味着什么呢?那时,为什么甚至在聚类中包含该列?与user3914041的答案一样,这是将分类值更改为数字值的最简单方法,但它们不是有用的,并且可能对群集的结果有害
解决方案2
在我看来,根据您如何通过群集实现所有这些以及您的目标,这将是您最好的选择。由于我假设你打算使用sklearn和类似k-Means的东西,你应该能够使用稀疏矩阵。但是,像imaluengo建议的那样,您应该考虑使用不同的距离度量。你可以考虑做的是将所有数字特征缩放到与分类特征相同的范围,然后使用余弦距离之类的东西。或者是距离指标的混合,就像我在下面提到的那样。但总而言之,这可能是您的聚类算法的分类数据的有用的表示。
解决方案3
我同意user3914041,因为这没有用,并且引入了与#1中提到的一些相同的问题 - 当两个(可能)完全不同的名称共享一个列值时,你会失去意义。
解决方案4
另一个解决方案是遵循答案here的建议。你可以考虑滚动你自己的类似k-means算法的版本,该算法采用混合的距离度量(单热编码分类数据的汉明距离,其余的为欧几里德)。似乎在开发k-means(如混合分类和数字数据的算法)方面有一些工作,例如here。
我认为考虑您是否需要对这些分类数据进行聚类也很重要。你还希望看到什么?
答案 1 :(得分:0)
解决方案3:
我说它有一个与使用1..N
编码(解决方案1)相同的缺点,以一种不太明显的方式。除了编码顺序之外别无其他原因,你的名字都会在某列中给出1
所以我建议不要这样做。
解决方案1 :
1..N
解决方案是解决格式问题的“简单方法”,因为您注意到它可能不是最好的。
解决方案2 :
这看起来是最好的方法,但它有点麻烦,根据我的经验,分类器并不总能很好地与大量的类别相比。
解决方案4 + :
我认为编码取决于你想要的:如果你认为相似的名字(如John和Johnny)应该接近,你可以使用字符-c来表示它们。我怀疑你的申请就是这种情况。
另一种方法是在(训练)数据集中对名称及其频率进行编码。通过这种方式,你所说的是:“主流人应该接近,无论他们是索菲亚还是杰克逊无关紧要。”
希望这些建议有所帮助,对此没有明确的答案,所以我很期待看到其他人的所作所为。