为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.concatenate
或 numpy.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个变量的主要内容,如果未能解决你的问题,请参考以下文章
堆叠条形图将变量转换为ggplot2 R中不相关变量的基于存在缺失的百分比
R语言ggplot2可视化:可视化人口金字塔图直方图(堆叠直方图连续变量堆叠直方图离散变量堆叠直方图)密度图箱图(添加抖动数据点tufte箱图多分类变量分组箱图)小提琴图