python - 如何更改 K 均值聚类的特征权重?

标签 python machine-learning scikit-learn cluster-analysis feature-selection

我正在使用 Scikit-learn 对有关 #oscars 的推文语料库(仅文本)进行聚类。

如果 @LeonardoDiCaprio 这样的用户名或 #redcarpet 这样的主题标签在预处理中被认为更重要,那将非常有用。

我想知道是否可以为这些常见的用户名和主题标签添加更多权重,使其成为更重要的功能。

最佳答案

K-means 仅适用于欧几里德空间,其中向量 A 和 B 之间的距离表示为

|| A - B || = sqrt( SUM_i (A_i - B_i)^2 )

因此,如果您想“权衡”特定功能,您会想要类似的东西

|| A - B ||_W = sqrt( SUM_i w_i(A_i - B_i)^2 )

这将导致特征 i 更加重要(如果 w_i>1) - 因此你会因为具有不同的值而受到更大的惩罚(就词袋/词集而言 - 这仅仅意味着如果两个文档该特定单词的数量不同,因此假定它们比另一组单词的差异更大)。

那么如何强制执行呢?好吧,基础数学就足够了!你可以很容易地看到

|| A - B ||_W = || sqrt(W)*A - sqrt(W)*B ||

换句话说 - 你拿出你的 tfidf 转换器(或者任何你用来将文本映射到恒定大小向量的东西),检查哪些特征负责你感兴趣的单词,你创建一个向量(大小等于到维度数)并增加您关心的单词的值(例如 10x)并计算该值的平方根。然后,您只需通过将“逐点”广播 (np.multiply) 乘以该权重向量来预处理所有数据。这就是您所需要的,现在您的言语将以这种明确的方式变得更加重要。从数学角度来看,这是引入马哈拉诺比斯距离而不是欧几里得距离,协方差矩阵等于 w*I (因此 - 对角高斯用作范数的生成器)。

关于python - 如何更改 K 均值聚类的特征权重?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37197622/

相关文章:

python - Django 呈现模板 `500.html` 而不是 `404.html`

python - 如何解释作为最后一层 sigmoid 激活输出的深度学习模型的概率预测?

python - 使用 cross_val_score 计算的指标与从 cross_val_predict 计算的相同指标有何不同?

python - 使用语言模型进行术语加权

python - [d[k] for k in d] 这样的表达式叫什么?

c# - Python3.6内调用C#代码

tensorflow 2 : Customized Loss Function works differently from the original Keras SparseCategoricalCrossentropy

python - 值错误: No feature in X meets the variance threshold

python - 如何在 Python 中没有交互式提示的情况下以编程方式更改用户密码?

machine-learning - 分类算法训练集的错误