目次(まとめ)
- ボロノイ図とは、それぞれのデータ点に似ている領域を示した図
- 参考文献



こんにちは、みっちゃんです。

今回の記事では「手元にあるデータをクラス分けして、新しいデータに対して適切なクラスを見つけたい」という方向けに「ボロノイ図」について紹介します。

ボロノイ図とは、それぞれのデータ点に似ている領域を示した図

ここでは、以下のようなデータをエクセルファイルで準備して、説明に使用したいと思います。

このエクセルファイルには、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さんということがわかります。

参考文献

平井有三「はじめてのパターン認識」森北出版