Rデータ分析の例:Irisデータセットで学ぶ分類と可視化の例
データ分析を始めようとするとき、最初に接するデータセットの一つが菖蒲です。 Irisデータセットこのデータセットは、データ分析の基礎学習でよく活用される代表的なRデータ分析例です。菖蒲の様々な特徴(花びらと花받침の長さと幅)に基づいて、それぞれのサンプルがどの品種に属するかを分類する問題を扱います。

今回の記事では、Rデータ分析の例としてIrisデータセットを使ってデータを探索し、可視化し、簡単な分類モデルを作成する方法を学びます。 最後まで読んでいただければ、分類と可視化に関する重要な情報を得ることができます!
Irisデータセットの概要
Irisデータセットは、菖蒲の形に関する情報を含んでおり、データから菖蒲の品種を予測する問題を解決するのに役立ちます。データセットは合計150個のサンプルで構成されており、各サンプルは4つの特性(萼の長さ、萼の幅、花びらの長さ、花びらの幅)を持っています。今回の データ分析例では、これらの特徴をもとに、3つのアヤメの品種(Setosa、Versicolor、Virginica)を分類する方法を紹介します。
データのロードとナビゲーション
まずはRを使ってIrisのデータを読み込んで、簡単に探索してみましょう。 Rには アイリス データセットが組み込まれているため、別途インストールする必要がありません。
Rでデータを読み込む
# Irisデータセットの読み込み
data(iris)
#のデータ構造確認
str(iris)
summary(iris)
head(iris)
アイリス データセットは5つの列で構成されており、各列は次のような変数を含んでいます:
セパル.長さ花弁の長さセパル.幅花弁の幅花びら.長さ花びらの長さ花びら.幅花びら幅生物種アヤメの品種(Setosa、Versicolor、Virginica)
データ構造の説明
上記のコードで アイリス データの構造を確認し、要約統計を見ることができます。 各特性ごとに平均、中央値、最小値、最大値などの基礎統計情報を確認することで、データの全体的な分布を簡単に把握することができます。
Rデータ分析例 データの可視化
データを探索した後は、それを視覚化して、各特性間の関係を視覚的に把握することが重要です。Rの ggplot2 パッケージを使用すると、簡単に視覚化を行うことができます。今回の データ分析例では、花びらと花弁の長さと幅を散布図で表現してみます。
Rで散布図を描く
# ggplot2のインストールとロード
# install.packages("ggplot2") #ggplot2 パッケージがインストールされていない場合はインストールしてください。
library(ggplot2)
# 花びらと萼の長さ、幅の視覚化
ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) + ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species))
geom_point(size = 3) + +...
labs(title = "花びらの長さと幅による品種分布", x = "花びらの長さ", y = "花びらの幅")このコードを実行すると、花びらの長さと幅を基準に菖蒲の品種別の分布を視覚化した散布図を確認することができます。品種ごとに色を変えているので、データが視覚的にどのように分布しているのかが一目でわかります。
このビジュアライゼーションでは、セトサが他の2つの品種と明確に区別され、VersicolorとVirginicaは一部重なる部分があることがわかります。
K-最近傍(K-NN)分類モデルの構築
これで、簡単な 分類モデル今回はK-NN(K-NN)アルゴリズムを使用して菖蒲の品種を予測してみます。 K-NNは、新しいデータポイントがあるとき、最も近いK個の近傍データを参照してそのデータを分類するシンプルで直感的なアルゴリズムです。
RでK-NNモデルの構築
# 必要なパッケージのインストールとロード
install.packages("class")
library(class)
#のデータセットをトレーニングセットとテストセットに分けます。
set.seed(123)
index <- sample(1:nrow(iris), 0.7 * nrow(iris))
train_data <- iris[index, ]です。
test_data <- iris[-index, ]です。
# K-NNモデルのトレーニングと予測
train_labels <- train_data$Species
test_labels <- test_data$Species
knn_pred <- knn(train = train_data[, -5], test = test_data[, -5], cl = train_labels, k = 3)
# 予測結果確認
table(knn_pred, test_labels)
# 実行結果データ #
test_labels
knn_pred setosa versicolor virginica
setosa 14 0 0
versicolor 0 17 0
virginica 0 1 13上記のコードは K-NNアルゴリズムを利用して、Irisデータセットのアヤメの品種を予測するプロセスです。トレーニングデータとテストデータを分けた後、テストデータに対して品種を予測し、その結果を実際の値と比較します。
予測結果評価
予測結果を評価する方法の1つは 混同行列(confusion matrix)を使うことです。 混同行列はモデルがどれだけ正確に予測したか、誤分類されたサンプルがどれくらいあるかを一目で確認することができます。上のコードで table() 関数を使用して予測値と実際の値を比較すると、混同行列を出力することができます。 しかし、実行結果だけでは、その意味を分析するのは難しいです。
そのため、K-NN分類モデルで性能を評価する場合、一般的に、K-NN分類モデルは 精度(precision), 再現性(リコール), F1スコア などの指標を使用して、モデルのパフォーマンスを具体的に分析することができます。
カレット パッケージまたは e1071 パッケージを使用すると、精度、再現性、F1スコアを簡単に計算することができます。ここでは カレット パッケージを使ってこれを取得する方法を説明します。
1.caretパッケージのインストールとロード
まずは カレット パッケージをインストールして読み込みます。
# 必要時のパッケージのインストール
# install.packages("caret")
library(caret)2.混同行列の生成と性能評価
table() 関数を使って自分で作った混同行列を利用して性能評価をすることもできますが、 カレット パッケージの confusionMatrix() 関数を使用すると、精度、再現性、F1スコアなどを自動的に計算することができます。
#混同行列の生成及び性能評価
confusion_matrix <- confusionMatrix(knn_pred, test_labels)
# 結果出力
print(confusion_matrix)このコードを実行すると、各クラスごとに 精度, 再現性, F1スコアはもちろん 精度(accuracy)まで確認できます。
3.結果の解釈
confusionMatrix() 関数は様々なパフォーマンス指標を含む結果を返します。ここでは、主な指標を説明します:
- 精度(Precision): 特定のクラスに対して予測した値のうち、実際にそのクラスに属するデータの割合です。
- 再現率(Recall): 実際にそのクラスに属するデータのうち、正しく予測した割合です。
- F1スコア精度と再現性の調和平均で、両方の値をバランスよく評価することができます。
- Accuracy(精度): 全データのうち、正確に予測した割合です。
4.結果例
confusionMatrix() 関数で求めた結果はおおよそ次のような形で出力されます。
コンフュージョンマトリクスと統計学
参考文献
予測 setosa versicolor virginica
setosa 14 0 0
versicolor 0 17 0
バージニカ 0 1 13
全体統計
精度 : 0.9778
95% CI : (0.8887, 0.9994)
無情報率 : 0.3556
P-Value [Acc > NIR] : < 2e-16
Kappa : 0.9662
Mcnemar's Test P-Value : NA
クラス別の統計量です:
クラス:setosa クラス:versicolor クラス:virginicaクラス
感度 1.0000 0.9444 1.0000 1.0000
特異度 1.0000 1.0000 1.0000 0.9722
Pos Pred Value 1.0000 1.0000 1.0000 0.9286
ネガティブ予測値 1.0000 0.9667 1.0000
有病率 0.2889 0.3556 0.3556 0.3556 0.3556
検出率 0.2889 0.3333 0.3556 0.2889 0.3333 0.3556
検出有病率 0.2889 0.3333 0.3833 0.3833
平衡精度 1.0000 0.9722 0.9861各主要指標の解釈:
- 感度: 再現率(Recall)です。予測した値が実際の値とどれだけ一致するかを示します。
- 特異性: 特定のクラスではなく、データをどれだけうまく予測したかの指標です。
- Pos Pred Value精度(Precision)であり、予測したもののうち当てた割合を意味します。
- ネガティブ予測値:予測していないもののうち、当てた割合を意味します。
- 精度全体の予測で合わせた割合です。
このような方法で、モデルの性能をより具体的に評価・分析することができます。
データ分析でよくあるミスと解決方法
今回の データ分析例を行う際に、初心者がよく犯す間違いを避けるためのヒントを紹介します。
- データ前処理を怠る:データを分析する前に必ず欠損値、異常値などを処理する必要があります。Irisデータには欠測値がありませんが、他のデータセットでは必ず前処理を行う必要があります。
- 適切なK値の選択K-NNモデルから
k値を適切に選択することが重要です。K値が小さすぎると過適合になり、大きすぎると重要なパターンを見逃す可能性があります。 - データ分割に注意しない: トレーニングデータとテストデータを分けるときは、必ずランダムにデータをサンプリングする必要があります。 そうしないと、モデルが特定のデータだけに偏る可能性があります。
よくある質問
Q1: Irisデータセットはどこでダウンロードできますか?
A: Irisデータセットは、Rに基本的に組み込まれているため、別途ダウンロードする必要はありません。 データ(虹彩) コマンドで呼び出すことができます。
Q2: K-NNモデルのK値はどのように設定しますか?
A: K値は一般的に奇数に設定し、クロス検証を通じて最適なK値を見つけることをお勧めします。データセットのサイズと分布によって、K値は異なる場合があります。
Q3: 他の分類アルゴリズムも使えますか?
A: もちろんです!K-NN以外にも、ロジスティック回帰、決定木、ランダムフォレストなど、様々な分類アルゴリズムを実習することができます。
整理する
今回の記事では データ分析例でIrisデータセットを活用して基本的な探索的データ分析と可視化を行った後、K-NN(K-Nearest Neighbor)アルゴリズムを使用して分類モデルを構築してみました。 Irisデータセットは小さくてシンプルですが、分類問題の学習と分析に非常に有用な資料です。 この例を通して、データ分析の基本的な概念を理解し、より複雑な問題に進むための足がかりをつかんでいただけたと思います。
皆さんもこの例をもとに その他のデータセットに挑戦してみてください!



