Machine learning: 始め方3/3

I.アイリス種別判定プログラムの概要

 

前回の復習もかねて、この機械学習プログラムの概要を説明します。

アイリスという花に3種類あって、それぞれ、ガクと花びらの大きさの違いで、Versicolor、Setosa、Virginicaに区別されます。

ガクと花びらの大きさと花の種類を一覧にした150件のデータがあり、これを機械学習しますが、150件のデータのうちの2/3をトレーニイングデータ、残りの1/3をテストデータとします。

前回はこの二つのデータの取り出しで終わりました。今回は、これらのデータを用いで機械学習しテストします。

このプログラムで用いる機械学習は散布図上の「距離の近さ」で分類するknnです。

トレーニングで得た判定ルールを残りの1/3のデータに適応してみて、適切に判定されているかを確認し、うまく判別できてきるようなら、新たなアイリスののデータを入れれば、どの種類かを判定できるという仕組みです。

間違いが多いなら、多くのデータでトレーニングするとか、散布図上の近隣3個の花の種類で判定していたのを近隣5個にするとかに変更します。

それでもだめなら、knn以外の他の方法を使うということになるでしょう。

機械学習のポイントは、花とガクの大きさに注目することは人が指定しますが、そのあとは、コンピュータが勝手にデータ処理し、判定してくれるという点です。

 

II.Step 6のknnを利用した機械学習の結果

 

上のデータから、あるアイリスのガクと花びらの大きさがわかったとき、アイリスの種類を判定するプログラムを作ります。

 

ふつうなら、3種類それぞれのガクと花の大きさの範囲を指定してその範囲に合うかどうかで判定することができます。

 

しかし、それは面倒です。コンピュータ自身がデータの特徴を把握して、判定ルールを決め、適当に分類してくれれば便利です。

 

そこで、機械学習させるために、与えられた150件のデータのうちの2/3をトレーにイングデータとし、それを用いて判定ルールを定めます。この場合は散布図上の「距離の近さ」で分類するknnを用いています。

 

トレーニングで得た判定ルールを残りの1/3のデータに適応してみて、適切に判定されているかを確認し、うまく判別しているようなら、新たなアイリスののデータを入れれば、どの種類かを判定できるという仕組みです。

 

間違った場合が多いなら、適切なより多くのデータでトレーニングするとか、散布図上の近隣3個の花の種類で判定していたのを近隣5個にするとかします。

それでもだめなら、knn以外の他の方法を使うということになるでしょう。

 

 

機械学習のポイントは、確かに、花とガクの大きさに注目することは人が指定しますが、そのあとは、機会が勝手にデータ処理し、判定してくれるということです。

 

Step 6のknnの解説をまとめると次のR-Fiddleのスクリプトになります。

一番最後に表示されているのがテストデータに機械学習結果を適応した判定と実際の種別です。

テストデータでは1件間違えただけだということがわかります。

 

# import libraries library(ggplot2) library(lattice) library(caret) library(class) # divide data into two groups set.seed(1234) ind <- sample(2, nrow(iris), replace=TRUE, prob=c(0.67, 0.33)) # Compose training set iris.training <- iris[ind==1, 1:4] # Inspect training set head(iris.training) # Compose test set iris.test <- iris[ind==2, 1:4] # Inspect test set head(iris.test) # Compose `iris` training labels iris.trainLabels <- iris[ind==1,5] # Inspect result print(iris.trainLabels) # Compose `iris` test labels iris.testLabels <- iris[ind==2, 5] # Inspect result print(iris.testLabels) # Build the model iris_pred <- knn(train = iris.training, test = iris.test, cl = iris.trainLabels, k=3) # Inspect `iris_pred` iris_pred # Put `iris.testLabels` in a data frame irisTestLabels <- data.frame(iris.testLabels) # Merge `iris_pred` and `iris.testLabels` merge <- data.frame(iris_pred, iris.testLabels) # Specify column names for `merge` names(merge) <- c("Predicted Species", "Observed Species") # Inspect `merge` merge

 

 

同じ基準で新たなテストデータを判定してみましょう。

もとのデータを適当に0.1増減して、次のテストデータを作成しました。

Sepal.Length, Sepal.Width, Petal.Length, Petal.Width
5.1, 3.3, 1.5, 0.3
5.5, 3.8, 1.6, 0.3
5.8, 2.9, 4.2, 1.4
6.8, 3.0, 5.3, 2.0

Runをクリックしてください。最後に上の4件のデータのアイリスの種別が判定されます。

 

# import libraries library(ggplot2) library(lattice) library(caret) library(class) # divide data into two groups set.seed(1234) ind <- sample(2, nrow(iris), replace=TRUE, prob=c(0.67, 0.33)) # Compose training set iris.training <- iris[ind==1, 1:4] # Inspect training set head(iris.training) # Compose test set iris.test <- iris[ind==2, 1:4] # Inspect test set head(iris.test) # Compose `iris` training labels iris.trainLabels <- iris[ind==1,5] # Inspect result print(iris.trainLabels) # Compose `iris` test labels iris.testLabels <- iris[ind==2, 5] # Inspect result print(iris.testLabels) # Build the model iris_pred <- knn(train = iris.training, test = iris.test, cl = iris.trainLabels, k=3) # Inspect `iris_pred` iris_pred # Put `iris.testLabels` in a data frame irisTestLabels <- data.frame(iris.testLabels) # Merge `iris_pred` and `iris.testLabels` merge <- data.frame(iris_pred, iris.testLabels) # Specify column names for `merge` names(merge) <- c("Predicted Species", "Observed Species") # Inspect `merge` merge # new test sample iris.test1 <- read.csv(header=T, text=' Sepal.Length,Sepal.Width,Petal.Length,Petal.Width 5.1,3.3,1.5,0.3 5.5,3.8,1.6,0.3 5.8,2.9,4.2,1.4 6.8,3.0,5.3,2.0 ') # apply knn to iris.test1 iris_pred1 <- knn(train = iris.training, test = iris.test1, cl = iris.trainLabels, k=3) # results iris_pred1

 

 

以上、Rのknnによる機械学習を学びました。ここで解説したのはMachine Learning in R for beginnersのの一部です。詳しくは、次のリンクを参照してください。

Machine Learning in R for beginners

R言語のスクリプトについては、わからないところがあったかと思いますが、これを機会にR言語を学ぼうという方は、次をご参考ください。

Rで機械学習を学ぶ1/3

 

Please follow and like us:
error

About shibatau

I was born and grown up in Kyoto. I studied western philosophy at the University and specialized in analytic philosophy, especially Ludwig Wittgenstein at the postgraduate school. I'm interested in new technology, especially machine learning and have been learning R language for two years and began to learn Python last summer. Listening toParamore, Sia, Amazarashi and MIyuki Nakajima. Favorite movies I've recently seen: "FREEHELD". Favorite actors and actresses: Anthony Hopkins, Denzel Washington, Ellen Page, Meryl Streep, Mia Wasikowska and Robert DeNiro. Favorite books: Fyodor Mikhailovich Dostoyevsky, "The Karamazov Brothers", Shinran, "Lamentations of Divergences". Favorite phrase: Salvation by Faith. Twitter: @shibatau

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.