Rによる階層クラスタリング

機械学習技術 自然言語技術 人工知能技術 デジタルトランスフォーメーション技術 関係データ学習 アルゴリズムとデータ構造 数学 プログラミング技術 R言語 一般的な機械学習 構造学習 本ブログのナビ 

Rによる階層クラスタリング

前回までで、Rのインストールからデータの導入、そして実用的な機械学習の応用として使われる頻度の高いクラスタリングについて、データの準備までを述べた。今回はその続きとして、階層クラスタリングでの学習と評価について述べる。

階層クラスタの関数hclustは以下になる。

hclust(d, method = "使用メソッド")

dは距離で、methodは使用する距離測定メソッドとなる。methodとしてはsingle(最短距離法)、complete(最長距離法)、average(群平均法)、centroid(重心法)、median(メディアン法)、mcquitty(McQuitty法、ward.D2(ウォード法)となる。関数hclustの実行は以下となる。

> distance <- dist(data)
> hc <- hclust(distance, "ward.D2")
> plot(hc)

distance変数に関数distで求めた距離を入れ、変数hcに関数hclustで求めたウォード法での値を入れる。そして最後にplot関数で結果を表示する。結果としてデンドグラム(樹形図)が出力される。

データの分割にはcutree関数を用いる。cutree関数は以下になる。

cutree(tree, k = NULL, h = NULL)

treeは分割したいデータ(今回はhc)、kはクラスター数、hは樹形図を分割する高さとなる。3つのクラスタに分ける場合は以下となる。

> result <- cutree(hc,k=3)
> result
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [36] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 [71] 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3
[106] 3 2 3 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 2 3 3 3 2 3
[141] 3 3 2 3 3 3 2 3 3 2

データが1,2,3の3つに分けられていることが確認される。次にirisデータの5列目 Species のデータを 変数 answer に代入し、品種とクラスタリング結果のクロス表を作成し、分類精度を確認する。

> answer <- iris[,5]
> table <- table(answer, result)
> table
            result
answer        1  2  3
  setosa     50  0  0
  versicolor  0 49  1
  virginica   0 15 35

クロス表から、150サンプル中 (50+49+35=)134サンプルを正確に分類できたことがわかる。

次回は非階層クラスタリングであるk-meansについて述べる。

コメント

  1. […] 前回はクラスタリングの例として、階層クラスタリングについて紹介した。今回は非階層クラスタリングであるk-meansについて紹介する。 […]

  2. […] ピンバック: Rによる機械学習(3) – Deus Ex Machina […]

  3. […] Rでの階層クラスタリング […]

  4. […] Rのhclustを用いた階層クラスタリング […]

  5. […] んされる。階層的クラスタリングでは、デンドログラムと呼ばれる木構造を生成する。具体的な実装に関しては”Rによる階層クラスタリング“に述べている。そちらも参照のこと。 […]

タイトルとURLをコピーしました