【问题标题】:stacking 3 variables for kmeans scikit为kmeans scikit堆叠3个变量
【发布时间】: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()?

【问题讨论】:

    标签: python machine-learning scipy scikit-learn k-means


    【解决方案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 的示例 stackoverflow.com/questions/27496014/… 有何不同?
      • 没有太大区别。在那里你加入转换后的矩阵,在这里你直接使用矢量化器。这也可以在管道中使用,因此更容易使用,例如在交叉验证中。我当时也想,既然你还在学习,最好还是看看幕后发生的事情。
      猜你喜欢
      • 2014-10-18
      • 1970-01-01
      • 2014-05-11
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 2013-10-12
      • 1970-01-01
      相关资源
      最近更新 更多