目次(まとめ)
- ボロノイ図とは、それぞれのデータ点に似ている領域を示した図
- 参考文献
こんにちは、みっちゃんです。
今回の記事では「手元にあるデータをクラス分けして、新しいデータに対して適切なクラスを見つけたい」という方向けに「ボロノイ図」について紹介します。
ボロノイ図とは、それぞれのデータ点に似ている領域を示した図
ここでは、以下のようなデータをエクセルファイルで準備して、説明に使用したいと思います。
このエクセルファイルには、Aさん、Bさん、Cさん、Dさん、Eさんの算数、国語の点数が書かれています。
ここで、以下のような問題を考えます。
問題
転校生Fさんは、算数85点、国語78点です。A〜Eさんのうち、一番似た点数を取った人は誰でしょうか?
「一番似た点数」というのが少し漠然としていますが、つまり、算数と国語の点数を見て、Fさんと似ている人を探してください、という問題です。
まず、エクセルファイルをCSV形式(コンマ区切り形式)でデスクトップに保存して、Rで図示してみます。
$ R -q
> data <- read.csv("~/Desktop/test_result.csv", header = T)
> plot(data$算数, data$国語, xlab = "Mathematics", ylab = "Japanese", xlim = c(80, 100), ylim = c(65, 85))
プロット関数(plot)のオプションの意味は、以下の通りです。
- xlab:x軸のラベルの名前
- ylab:y軸のラベルの名前
- xlim:x軸のプロット範囲
- ylim:y軸のプロット範囲
実行すると、以下のようなプロット(散布図)が得られます。
ここに、転校生Fさんの点数(算数85点、国語78点)をプロットしてみます。
> par(new=T)
> plot(85, 78, xlab = "Mathematics", ylab = "Japanese", xlim = c(80, 100), ylim = c(65, 85), col = "red", pch = 16)
「par(new=T)」とすると、その次のプロットが上書きされます。
また、プロット関数(plot)のオプションの意味は、以下の通りです。
- col:プロットの色の指定(ここでは赤色)
- pch:プロットのマーカー(記号)の指定 詳細はこちら
やりたいことは、転入生Fさんと似ている人を探すことです。
図をみれば、Bさん、Cさん、Dさんは、Fさんに比較的似ていると判断できますが、そのうち誰が一番似ているでしょうか?
それを可視化して判定するのに便利なのが「ボロノイ図」です。
プロットするためには、まず、以下のようにtripackパッケージをインストールします。
> install.packages("tripack")
> library("tripack")
※もしかすると、FORTRAN(フォートラン)という言語が必要というエラーがでるかもしれませんが「$ brew cask install gfortran」とすると解決するかもしれません。
> tri.vm <- voronoi.mosaic(data$算数, data$国語)
> plot.voronoi(tri.vm, pch = 1, cex = 0, add = TRUE)
これを実行すると、先ほどのプロットが上書きされて、以下のようなプロットが描かれます。
このプロットは「ボロノイ図」「ボロノイモザイク」と呼ばれます。
線は、人と人の境界(ボロノイ境界)を示しており、点と点の二等分線になっていることがわかります。また点線は、無限に遠い先まで伸びていく境界を示しています。
境界線に囲まれた領域は「ボロノイ領域」であり、その人に近い点数の領域を示しています。
このボロノイ図から、Fさんに近い人はDさんということがわかります。