为kmeans scikit堆叠3个变量

Posted

技术标签:

【中文标题】为kmeans scikit堆叠3个变量【英文标题】:stacking 3 variables for kmeans scikit 【发布时间】:2015-02-15 09:23:13 【问题描述】:

我有 3 个变量要适合 kmeans 模型。一个是 TFIDF 向量,一个是 Count 向量,第三个是文档中的单词数(sentence_list_len)。

这是我的代码:

vectorizer=TfidfVectorizer(min_df=1, max_df=0.9, stop_words='english', decode_error='ignore')
vectorized=vectorizer.fit_transform(sentence_list)

count_vectorizer=CountVectorizer(min_df=1, max_df=0.9, stop_words='english', decode_error='ignore')
count_vectorized=count_vectorizer.fit_transform(sentence_list)

sentence_list_len # for each document, how many words are there

km=KMeans(n_clusters=num_clusters, init='k-means++',n_init=10, verbose=1)
km.fit(vectorized)

如何将 3 个变量拟合到 km.fit 中?具体来说,我如何将它们全部堆叠起来并将其提供给 km.fit()?

【问题讨论】:

【参考方案1】:

简单地连接你的向量。请参阅 numpy.concatenatenumpy.vstack / numpy.hstack。但是,请注意,kmeans 不适用于高维数据,它可能会忽略“小”特征。您拥有三种不同尺度的特征,这将严重影响聚类结果。一般来说,kmeans 不是 NLP 聚类任务的好方法。

【讨论】:

【参考方案2】:

官方的方式是使用FeatureUnion:

from sklearn.pipeline import FeatureUnion

tfidf =TfidfVectorizer()
cvect = CountVectorizer()
features = FeatureUnion([('cvect', cvect), ('tfidf', tfidf)])
X = features.fit_transform(sentence_list)

【讨论】:

这与您使用 hstack 的示例 ***.com/questions/27496014/… 有何不同? 没有太大区别。在那里你加入转换后的矩阵,在这里你直接使用矢量化器。这也可以在管道中使用,因此更容易使用,例如在交叉验证中。我当时也想,既然你还在学习,最好还是看看幕后发生的事情。

以上是关于为kmeans scikit堆叠3个变量的主要内容,如果未能解决你的问题,请参考以下文章