Rを使って葉っぱを分類してみた①(k近傍法)

 

今回はk近傍法をRで動かしてみます。

使用するデータセットは以下のサイトから引用します。

https://archive.ics.uci.edu/ml/datasets/Leaf

UCI Machine Learning Repository: Leaf Data Set

40種の葉っぱについて、形状データと手触り(texture)データが記録されています。今回はこのデータセットを用いて、多クラス分類の手法の一つであるk近傍法を利用してみます。

 

変数1~7の形状データを用いて散布図を描いてみます。

f:id:r_std:20170122123631p:plain

 

変数8~14の手触り(texture)データは次の通りになります。f:id:r_std:20170122123955p:plain

変数とクラスが多いため、散布図で一見して評価するのは難しいように思われます。

 

今回利用するk近傍法は、直近のk点の学習データから多数決を行って最も多いクラスに分類を行う直感的に分かりやすい方法になります。

データセットを区分せず、学習データ=テストデータとすると次のような結果になりました。

k=3の場合の識別率 0.7764706

k=5の場合の識別率 0.7264706

k=10の場合の識別率 0.6588235

多数決に用いるデータ数を増やすと識別率が落ちることが分かりました。

 

参考に以前取り上げた線形判別分析も行ってみると、次の通りになりました。

線形判別分析の識別率 0.8705882

線形判別分析の方が良い結果を得られてしまいました。結果の評価の仕方は難しいですが、クラス内でのデータの距離が大きいことで、kNNが機能しにくくなっている可能性があります。

 

次回はSVMやNaiveBayesを取り上げたいと思います。

 

今回使用したソースコードは以下の通りです。

leaf