我有 3 个变量,我想将其拟合到 kmeans 模型中。一个是TFIDF向量,一个是计数向量,第三个是文档中的字数(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((?
只需连接您的向量。请参阅numpy.concatenate
或numpy.vstack
/numpy.hstack
。但是,请注意,kmeans 不能很好地处理高维数据,并且可能会忽略"小"特征。您有三种不同比例的要素类型,这将严重影响聚类结果。一般来说,kmeans不是NLP聚类任务的好方法。
官方方法是使用FeatureUnion:
from sklearn.pipeline import FeatureUnion
tfidf =TfidfVectorizer()
cvect = CountVectorizer()
features = FeatureUnion([('cvect', cvect), ('tfidf', tfidf)])
X = features.fit_transform(sentence_list)