2011年7月14日木曜日

Efficient Clustering of High-Dimensional Data Sets with Application to Reference Matching

大規模なデータのクラスタリングの手法としてCanopy法というものを提唱。

仮定として、距離を計算する方法に軽い方法と重い方法があることを想定。
軽い方法でキャノピーを作り、そのなかで重い方法を使う。
キャノピーを作る際はN^2のオーダの計算が必要だが、軽いからOKだという理屈。

キャノピーを作る方法は簡単、
1. 1点を選びそこから半径T1内のものはひとつのキャノピーの中と見なす。
   さらにT2< T1内の点は、以降の選択から取り除く
32 これを点が亡くなるまで行う。

後段にはk-meansなどを使うことを想定している。

今考えているアプリケーションは距離行列は所与なので使いようがない。。

Efficient algorithms for accurate hierarchical clustering of huge datasets: tackling the entire protein space


Yaniv Loewenstein1,∗, Elon Portugaly1, Menachem Fromer1 and Michal Linial2,

蛋白を階層クラスタリング。
ポイントは距離がすべての蛋白の間に定義されるわけではないこと。
また、三角形の1辺は2辺の和より短い、という法則が成り立たないこと。

この前提ではcentroidが定義できない。kmeansのような方法も使えなさそう。。。

メモリに乗る範囲で何とかやる方法を提案している。
距離でソートして、短いほうからメモリに乗る範囲で載せて、上限と下限でしばりながら
クラスタリングを行う。これをなんどか繰り返す。

並列化は非常に難しそう。簡単に出来る方法は思いつかない。

2011年7月5日火曜日

An Efficient Hierarchical Clustering Method for Large Datasets with Map-Reduce

Tianyang Sun, Chengchun Shu, Feng Li, Haiyan Yu, and Lili Ma, Yitong Fang
1.2T 1million user 6時間
テキストの分類。前処理とクラスタリングにそれぞれMRを使用。
クラスタリングは3回のMRで。
なんか肝心な部分をmasterノードでon memoryでやっている。
あと、ある程度近いものを有無を言わさずペアにしているようだが、厳密には
これではまずいはず。

A New Agglomerative Hierarchical Clustering Algorithm Implementation based on the Map Reduce Framework

Hui Gao, Jun Jiang, Li She, Yan Fu 中国 uestc.
文書の分類。neuron initialization とか言ってるな。。分割してクラスタリングしたものを
後でアグリゲートしている?ただしその方法については書いてない。

2011年7月4日月曜日

Divisive hierarchical clustering

というのは、上流からどんどん分割していく方法。具体的にはKMeansをつかって2分割し、分割されたモノにまたKMeansを適用して、というようにやるようだ。
KMeans がm段で収束するとして、分割の深さを log2Nとすると m * log2N段のMRをやることになる。
実装的には複数のKMeans を同時にやる用にしないといけなさそうで、割に大変っぽい。まあやればできそうだが。問題はこのようにして求めた階層クラスタが要件にあうのかどうかだ。

MrsRF: an efficient MapReduce algorithm for analyzing large collections of evolutionary trees

Suzanne J Matthews and Tiffani L Williams Department of Computer Science and Engineering, Texas A&M University, College Station, TX URL
何をやってるかというと、大量の進化木を比較してそれぞれの間に距離を定義したマトリックスを作ろうとしている。距離の定義は、木をリーフ以外の枝で切断してできた集合を比較することで行う。同じ集合対を与える切断があると1点、と言う具合に加算していく。
でこれを2段のMRでやっている。割にストレートフォワードかもしれない。
Phoenix を使ってる。Phoenixはshared memory の実装なので、注意が必要。
RFは Robinson-Foulds distanceを意味している。OpenMPIも使ってる。
HashRFという方法を改良している。
基本的に進化木の比較に特化して、n^2のマトリクスをハッシュを使って作る。
ローカルにはMapper内部でOpenMPIを使い、グローバルにはMRを使ってハッシュを集計している。