2017-11-23 7 views
0

私は、クラスタドキュメント用のPython Kmeanクラスタリングアルゴリズムを使用しています。私は私の次のタスクがgoogoleでの検索、すべてのクラスタ内のトップ用語を確認することですクラスタ内のトップ用語をクラスタリングする

km = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1) 
y=km.fit(X) 

は、多くのことを示唆し

from sklearn.feature_extraction.text import TfidfVectorizer 
    from sklearn.cluster import KMeans 
    vectorizer = TfidfVectorizer(tokenizer=tokenize, encoding='latin-1', 
          stop_words='english') 
    X = vectorizer.fit_transform(token_dict.values()) 

は、その後、私は次のコードを使用してKmeanクラスタリングを適用される用語 - 文書行列を作成しました人々は)(km.cluster_centers_.argsortを使用しています[:: :, - 1]次のコードを使用してクラスタ内の最上位語を見つけるために:

print("Top terms per cluster:") 
order_centroids = km.cluster_centers_.argsort()[:, ::-1] 
terms = vectorizer.get_feature_names() 
for i in range(true_k): 
    print("Cluster %d:" % i, end='') 
    for ind in order_centroids[i, :10]: 
     print(' %s' % terms[ind], end='') 
     print() 

今、私の質問はその私の理解kにm.cluster_centers_はクラスタの中心の座標を返します。たとえば、100個のフィーチャと3つのクラスタがある場合、各クラスタの重心を表す3行と100列の行列を返します。上記のコードでクラスターの上位の用語を判別する方法を理解したい。 ありがとうコメントありがとうございます Nadeem

+0

私はそれを見ることができると確信していますが、 'TfidfVectorizer'と' KMeans'はどのライブラリから来ていますか?そのパッケージのエキスパートでこれをターゲットにすれば、おそらくより良い対応が得られます。具体的には、この情報はタグだけでなく、質問そのものや本文の本文にも挿入できます。 –

+0

は、私は今sklearn.clusterインポート関数kmeans – Nhqazi

答えて

1

あなたはクラスタセンターの形状と意味は正しいですか。 Tf-Idfベクトル化ツールを使用しているため、「フィーチャ」は特定のドキュメント内の単語です(各ドキュメントは独自のベクトルです)。したがって、ドキュメントベクトルをクラスタ化すると、重心の各「フィーチャ」は、その単語の関連性を表します。

get_feature_names呼び出しは、それが表す単語への列インデックスのマッピングを取得します(したがって、それは次のように見えます): "word"(語彙)= "feature"ドキュメントが期待どおりに機能しない場合は、vocabulary_行列を逆にして同じ結果を得るだけです)。

次に、.argsort()[:, ::-1]行は、各重心をその中で最も関連性の高い(したがって高価値の)列のソート(降順)リストに変換します。

コードの残りの部分だけが印刷されていますが、私はそれが何の説明も必要ないと確信しています。すべてのコードが本当にやっているのは、各重心を、その中で最も価値のある特徴/単語の降順にソートし、それらの元の単語に戻してマッピングして印刷することです。

+0

Scnerd、説明のための感謝からsklearn.feature_extraction.text輸入TfidfVectorizer から が、しかし、私はまだそれについて少し当惑しています私が使用しているライブラリを言及しています。私の懸念は、クラスターは「n」個の文書をそれぞれが「M」個の用語からなる特徴ベクトルによって表現されることである。しかし、クラスタの重心には "M"個の特徴からなる1つのベクトルがあるので、クラスタ内にある "n"個の文書にはどのような用語があるのだろうか。上記のコードの上位の用語は、重心を逆転させることによって抽出されます。我々がそれを逆にすると、セントロイドに存在する用語は、ドキュメント内の他のすべての用語ではなく強調表示されます....... – Nhqazi

+0

K平均では、セントロイドはクラスタ内のドキュメントの平均であり、 Tf-Idfでは、すべての値が負ではないので、クラスタ内のすべての文書のすべての単語が重心で表されます。従って、重心において重要な用語は、そのクラスタ内のすべての文書にわたって最も重要な用語である。どんな言葉も除外されませんが、十分に重要ではありません。文書ベクトルの最高のTf-Idf値は、その文書にとって最も重要な単語である。同様に、重心の最も高い値の単語は、クラスタ全体にとって最も重要な単語です。それは役に立ちますか? – scnerd

+0

ちなみに、言葉の存在だけに基づいてドキュメントをクラスタリングすることに興味がある場合は、LDAとトピックモデリングについて検討しましたか? – scnerd

関連する問題