Python 为kmeans scikit堆叠3个变量

Python 为kmeans scikit堆叠3个变量,python,machine-learning,scipy,scikit-learn,k-means,Python,Machine Learning,Scipy,Scikit Learn,K Means,我有3个变量,我想适合kmeans模型。一个是TFIDF向量,一个是计数向量,第三个是文档中的字数(句子列表) 这是我的密码: 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=

我有3个变量,我想适合kmeans模型。一个是TFIDF向量,一个是计数向量,第三个是文档中的字数(句子列表)

这是我的密码:

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()?

只需将向量串联起来即可。请参见
numpy.concatenate
numpy.vstack
/
numpy.hstack
。但是,请注意,kmeans在高维数据中无法正常工作,并且可能会忽略“小”特征。您有三种不同比例的特征,这将严重影响聚类结果。一般来说,kmeans不是NLP群集任务的好方法。

官方方法是使用:


这与您使用hstack的示例有何不同?没有大的区别。在这里你加入变换矩阵,在这里你直接使用矢量器。这也可以在管道中使用,因此更易于使用,例如在CrossValidation中。我当时还认为,由于你还在学习,最好能看到幕后发生了什么。
from sklearn.pipeline import FeatureUnion

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