タグ

clusteringに関するnihohiのブックマーク (4)

  • pythonでクラスタリングと表示 - 東邦大学理学部情報科学科 山内のサイト

    x-meansという論文 † クラスタリングのk-means法は広く使われ、パッケージも各言語環境で作られている。Pythonの 場合、scipyにあるkmeansと、多分その導出系のscikit-learnにあるKMeansが利用可能になっている。 k-means法はあらかじめクラスタ数を決めて分類するので、クラスタ数が不明なときにそのままは対応できない。 それに対して、BIC(ベイズ情報量規準)やAIC(赤池情報量規準)などを使って、最適なモデルを 選択しようという考え方があり、その選択のロジックを含めたのがxmeansパッケージらしい。 xmeanについては http://web-salad.hateblo.jp/entry/2014/07/19/200347 ↑ Scikit-learnでのk-meansパッケージ † Scikit-learnのkmeansパッケージの使い方は、n

  • Pythonでx-means法を実装した - WEB SALAD

    はじめに 最近、このままだと修士論文がすごくシンプルな内容になりそうなことに気づいたので、ページ数を稼ぐためによりよい示唆を得るために、何か分析を足す必要が出てきました。 色々考えた結果、x-means法によるクラスタリングを行うことにしたのですが、同手法のPythonによる実装が見つからなかったので、勉強も兼ねて自分で書くことにしました。 x-means法とは x-means法はk-means法を拡張したものであり、後者が実行時にあらかじめクラスタ数を指定しなければいけないのに対し、最適なクラスタ数を自動で推定できる点が優れています。 その基となるアイデアはPelleg and Moore(2000)で初めて提案されました。 今回は、これに改良を加えた石岡(2000)の手法を実装しました。 実装 肝心のコードですが、ここに掲載するには少し長いので、Gistに上げておきました。 Impl

    Pythonでx-means法を実装した - WEB SALAD
  • Ward法再実装で少し速くなった

    PythonでWard法によるクラスタリング Ward法のパフォーマンスと分散処理のための考察 このシリーズの続き。 プログラムを書き直し、真っ当な行列的データを用意したところ、ずいぶん速くなり、588件でも19秒程度となった。(1100件でも2分程度なので、ずいぶんと自分が想定している実用化に近づいたと思う。) しかし、真っ当な行列データにすると、今度は最小距離の探索に9割の時間を取られるようになったため、ここを改造すべきと強く思う。 ここまでくれば、常に行列の成分のソート情報をなんらか記憶しておけばいいように思うのだが、そのソート情報の維持にはまたコストがかかるというジレンマ。 今は可変長の行列として、pythonのdefaultdict(lambda: defaultdict(float))を使っている。これで定義した簡易行列クラスは非常に便利なのでそんなにシビアでない計算の目的には

  • PythonでWard法によるクラスタリング

    Pythonで、Ward法によるクラスタリング(デンドログラム作成まで)を実装してみた。 参考にしたのは、岡山大学が公開しているこの資料。 (岡山大学の先生ありがとう!) 今回こんな車輪の再発明をしたのは、距離表と呼ばれる行列データを行列のイメージで保存せず、 [(ベクトル1とベクトル2の距離, ベクトル番号1, ベクトル番号2), ...] という形式のリストにして、距離でソートしておき、そのソート結果を維持したままこのリストを分割、更新していくという方針で作ったらどうかと思ったからです。 196個の19次元の非スパースなデータのデンドログラム作成に2.5秒だからなかなかのパフォーマンスではないだろうか。 CもC++もNumpy系の数値計算ライブラリも使わないでこれだから、いいですねえ。 使い方 読み込むデータファイルをタブ区切りで用意する。 1カラム目はデータの識別用ID文字列、2カラ

  • 1