パッケージの概要
classパッケージは分類に関する様々な関数を提供します。本ドキュメントではknn関数を用いたk最近傍法の使用方法を確認します。
使用例:irisデータの分類
irisデータを用いて、がく弁・花弁の長さ・幅の情報からアヤメを分類するモデルをclassパッケージを用いて構築します。
irisデータセットを読み込む
irisデータを読み込み、データの先頭を表示します。
- Sepal.Length:がく弁の長さ
- Sepal.Width:がく弁の幅
- Petal.Length:花弁の長さ
- Petal.Width:花弁の幅
アヤメの種類はsetosa(1)、versicolor(2)、virginica(3)の3種類です。
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
irisデータの構造
irisデータの各種構造を確認します。
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
また、データを散布図にプロットして確認します。
plot(iris, col=c(2, 3, 4)[iris$Species])
モデル構築
irisデータをモデル生成のための訓練データと、モデル評価のためのテストデータに分割します。データ割合は訓練データを7割、テストデータを3割とします。確認のため、データサイズを出力します。
# 再現性のためにシードを設定
set.seed(123)
# データの分割
sample_indices <- sample(1:nrow(iris), 0.7 * nrow(iris))
train_data <- iris[sample_indices, ]
test_data <- iris[-sample_indices, ]
# データサイズの確認
c(nrow(iris), nrow(train_data), nrow(test_data))
knn関数を使用し、k最近傍法を実行します。
res <- knn(train_data[-5], test_data[-5], train_data$Species, k = 3)
分類結果とテストデータを比べてみます。概ね合っていることが分かります。
(table(res, test_data$Species))
res setosa versicolor virginica
setosa 14 0 0
versicolor 0 17 0
virginica 0 1 13