5

私はpythonとscikit-learnの両方が初めてなので、ご容赦ください。

k means clustering からk means clustering アルゴリズムのこのソース コードを取得しました。

次に、load_file 関数を使用してローカル セットで実行するように変更しました。

アルゴリズムは終了しますが、どのドキュメントがクラスター化されているかなどの出力は生成されません。

km オブジェクトには、各ドキュメントのセントロイド ID をリストする「km.label」配列があることがわかりました。

また、「km.cluster_centers_」の重心ベクトルもあります。

しかし、それは何の文書ですか?「束」オブジェクトである「データセット」にマップする必要があります。

dataset.data[0] を印刷すると、シャッフルされたと思われる最初のファイルのデータが取得されます。でも名前だけ知りたい。

Does the document at dataset.data[0] is clusterd to centoid at km.label[0] ? のような質問に混乱しています

私の基本的な問題は、どのファイルが一緒にクラスター化されているかを見つけることです。それを見つける方法は?

4

2 に答える 2

12

Bunchオブジェクトを忘れてください。scikit-learn にバンドルされているおもちゃのデータセットを読み込むための実装の詳細にすぎません。

実生活では、実際のデータを使用して、直接呼び出す必要があります。

km = KMeans(n_clusters).fit(my_document_features)

次に、以下からクラスター割り当てを収集します。

km.labels_

my_document_features2D データ構造です: numpy 配列または shape を持つ scipy.sparse 行列のいずれか(n_documents, n_features)です。

km.labels_shape を持つ 1D numpy 配列(n_documents,)です。したがって、 の最初の要素は、特徴マトリックスlabels_の最初の行に記述されているドキュメントのクラスターのインデックスです。my_document_features

通常、オブジェクトを使用して構築my_document_featuresします。TfidfVectorizer

my_document_features = TfidfVectorizer().fit_transform(my_text_documents)

ドキュメントを直接(データベースから、または単一のCSVファイルからの行などから)読み取る場合は、Python Unicodeオブジェクトのリストを作成するか、次のいずれかを行いmy_text_documentsます。

vec = TfidfVectorizer(input='filename')
my_document_features = vec.fit_transform(my_text_files)

ここmy_text_filesで、ハードドライブ上のドキュメント ファイルのパスの Python リストです (ファイルが UTF-8 エンコーディングを使用してエンコードされていると仮定します)。

my_text_filesまたはmy_text_documentsリストの長さは である必要があるn_documentsため、 とのマッピングkm.labels_は直接的です。

scikit-learn はドキュメントのクラスタリングや分類だけではないため、「ドキュメント」ではなく「サンプル」という名前を使用します。これは、ライブラリ内のすべての推定器の引数と属性の予想される形状を文書化するn_samples代わりに、 を使用する方法です。n_documents

于 2013-07-22T14:49:25.180 に答える
2

dataset.filenamesが鍵です:)

これが私がやった方法です。

load_files 宣言は次のとおりです。

def load_files(container_path, description=None, categories=None,
           load_content=True, shuffle=True, charset=None,
           charse_error='strict', random_state=0)

そうする

dataset_files = load_files("path_to_directory_containing_category_folders");

その後、結果が得られたとき:

それらを辞書であるクラスターに入れます

clusters = defaultdict(list)

k = 0;
for i in km.labels_ :
  clusters[i].append(dataset_files.filenames[k])  
  k += 1

そして、私はそれを印刷します:)

for clust in clusters :
  print "\n************************\n"
  for filename in clusters[clust] :
    print filename
于 2013-07-23T05:20:11.577 に答える