2016-11-10 2 views
2

Использование Kmeans с TF-IDF-вектором позволяет получать термины, встречающиеся в более чем одном кластере?Kmeans: Условия, возникающие в нескольких кластерах?

Вот набор данных примеров:

documents = ["Human machine interface for lab abc computer applications", 
      "A survey of user opinion of computer system response time", 
      "The EPS user interface management system", 
      "System and human system engineering testing of EPS", 
      "Relation of user perceived response time to error measurement", 
      "The generation of random binary unordered trees", 
      "The intersection graph of paths in trees", 
      "Graph minors IV Widths of trees and well quasi ordering", 
      "Graph minors A survey"] 

Я использую TF-IDF векторизатор для извлечения признаков:

vectorizer = TfidfVectorizer(stop_words='english') 
feature = vectorizer.fit_transform(documents) 
true_k = 3 
km = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1) 
km.fit(feature) 
order_centroids = km.cluster_centers_.argsort()[:, ::-1] 
print "Top terms per cluster:" 
for i in range(true_k): 
    print "Cluster %d:" % i, 
    for ind in order_centroids[i, :10]: 
     print ' %s,' % terms[ind], 
    print 

Когда я кластеризация документов с использованием KMeans из scikit-узнать, результаты ниже:

Top terms per cluster: 
Cluster 0: user, eps, interface, human, response, time, computer, management, engineering, testing, 
Cluster 1: trees, intersection, paths, random, generation, unordered, binary, graph, interface, human, 
Cluster 2: minors, graph, survey, widths, ordering, quasi, iv, trees, engineering, eps, 

Мы можем видеть, что некоторые термины встречаются в нескольких кластерах (например, graph в кластере 1 и 2, eps в кластере 0 и 2).

Являются ли результаты кластера неправильными? или это приемлемо, потому что оценка tf-idf для приведенных выше терминов для каждого документа отличается?

+0

Хорошо, вы используете 'KMeans', но как вы вектурируете свои данные? – MMF

+0

с использованием TfidfVectorizer с секундомерами из списка слов моего языка. –

+0

Можете ли вы показать свой код, пожалуйста, который выполняет кластеризацию? – MMF

ответ

0

Я думаю, вы немного смущены тем, что вы пытаетесь сделать. Используемый вами код дает вам кластеризацию документов, а не терминов. Термины - это размеры, в которых вы кластеризуетесь.

Если вы хотите найти, к которому кластер каждый документ принадлежит вам просто нужно использовать predict или метод fit_predict, например:

vectorizer = TfidfVectorizer(stop_words='english') 
feature = vectorizer.fit_transform(documents) 
true_k = 3 
km = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1) 
km.fit(feature) 
for n in range(9): 
    print("Doc %d belongs to cluster %d. " % (n, km.predict(feature[n]))) 

И вы получите:

Doc 0 belongs to cluster 2. 
Doc 1 belongs to cluster 1. 
Doc 2 belongs to cluster 2. 
Doc 3 belongs to cluster 2. 
Doc 4 belongs to cluster 1. 
Doc 5 belongs to cluster 0. 
Doc 6 belongs to cluster 0. 
Doc 7 belongs to cluster 0. 
Doc 8 belongs to cluster 1. 

Берут посмотрите на User Guide of Scikit-learn

Смежные вопросы