Mahoutで使える学習と分析のアルゴリズムは MahoutのList of Algorithmのページ によると以下のように分類されています。前回の記事 Mahoutで使える学習アルゴリズム(1) では上2つの概要を書きましたので、今回は残りについて書きたいと思います。
- 協調フィルタリング (Collaborative Filtering)
- 分類 (Classification)
- クラスタリング (Clustering)
- 行列の次元削減と分解 (Dimensionality Reduction)
- トピックモデル(Topic Models)
- その他 (Miscellaneous)
分類について説明だけ読んでもイメージがよくわからんと思いつついろいろ探していたところ銀座で働くData Scientistのブログさんの記事を見つけました。Mahoutの分類のアルゴリズムとは若干異なるかもしれませんが、以下の分類方法について、平面上のデータに対して適用した時の比較が図示されていてとてもイメージがつかみやすいです。数式は難しくて理解できなくても「この分類方法にはこういう特性がある」というのがなんとなく直感でつかめるのでおすすめです。
- 決定木
- ロジスティック回帰
- SVM(ガウシアンカーネル)
- ニューラルネットワーク
- ランダムフォレスト
ちょっと横道にそれましたが本題に戻りましょう。
クラスタリング (Clustering)
種別 | 内容 |
---|---|
k-Means Clustering | k平均法によるクラスタリング。単純なので広く使われている。初期クラスタをもとに順次クラスタ中心を更新し結果を求める。結果は初期クラスタの取り方に大きく依存。 |
Canopy Clustering | 教師無しのクラスタリング手法。k-Meansなどの前処理として使うことで、クラスタリングの高速化をすることができるらしい。 |
Fuzzy k-Means | k-Meansの亜種。クラスタの境界付近の曖昧なデータはどちらにも所属するデータとしてクラスタリングする。 |
Streaming k-Means | k平均法の計算の1手法。入力データを保持せずに計算するため計算のメモリの使用量がおさえられるという特徴。 |
Spectral Clustering | グラフのスペクトルを使ったクラスタリング手法。 |
行列の次元削減と分解 (Dimensionality Reduction)
種別 | 内容 |
---|---|
Singular Value Decomposition | 行列の特異値分解。 |
Lanczos Algorithm | ランチョス法。対象行列を三重対角化する。 |
Stochastic SVD | 計算量をおさえた方法をつかい行列の特異値分解をする。(で合ってる?) |
Principal Component Analysis (via Stochastic SVD) | 主成分分析 |
トピックモデル(Topic Models)
種別 | 内容 |
---|---|
Latent Dirichlet Allocation (LDA) | 1つの文章が複数のトピックからなることを仮定した言語モデル。自然言語処理で使われる代表的なトピックモデル。 |
その他
種別 | 内容 |
---|---|
Frequent Pattern Mining | 頻出パターンマイニング。ある制約を満たすパターンでデータベース中にあるものをすべて列挙する。 |
RowSimilarityJob | 共起の計算をMap Reduceで効率的に実施するための手法。 |
ConcatMatrices | 2つの行列またはベクトルを1つの行列にまとめる |
Collocations | テキスト中の共起するトークンを見つける |
おわりに
ここ数日の間にMahout本家のアルゴリズム一覧のページが先行して(?)バージョン1.0の内容になっています。搭載されているアルゴリズムもだいぶ変わってるようです。もうすぐ1.0がリリースされるのかも。このページも書き直さなくては...