R での二次判別分析 (ステップバイステップ)
二次判別分析は、一連の予測子変数があり、 応答変数を2 つ以上のクラスに分類する場合に使用できる方法です。これは、 線形判別分析と同等の非線形とみなされます。
このチュートリアルでは、R で二次判別分析を実行する方法の例を段階的に説明します。
ステップ 1: 必要なライブラリをロードする
まず、この例に必要なライブラリをロードします。
library (MASS)
library (ggplot2)
ステップ 2: データをロードする
この例では、R に組み込まれているirisデータセットを使用します。次のコードは、このデータセットをロードして表示する方法を示しています。
#attach iris dataset to make it easy to work with attach(iris) #view structure of dataset str(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 ...
データセットには 5 つの変数と合計 150 の観測値が含まれていることがわかります。
この例では、特定の花が属する種を分類するための 2 次判別分析モデルを構築します。
モデルでは次の予測子変数を使用します。
- がく片の長さ
- がく片の幅
- 花びらの長さ
- 花びらの幅
そして、それらを使用して、次の 3 つの潜在的なクラスをサポートする種の応答変数を予測します。
- セトサ
- 癜風
- バージニア州
ステップ 3: トレーニングおよびテストのサンプルを作成する
次に、データセットを、モデルをトレーニングするためのトレーニング セットと、モデルをテストするためのテスト セットに分割します。
#make this example reproducible set.seed(1) #Use 70% of dataset as training set and remaining 30% as testing set sample <- sample(c( TRUE , FALSE ), nrow (iris), replace = TRUE , prob =c(0.7,0.3)) train <- iris[sample, ] test <- iris[!sample, ]
ステップ 4: QDA モデルを調整する
次に、 MASSパッケージのqda() 関数を使用して、QDA モデルをデータに適合させます。
#fit QDA model model <- qda(Species~., data=train) #view model output model Call: qda(Species ~ ., data = train) Prior probabilities of groups: setosa versicolor virginica 0.3207547 0.3207547 0.3584906 Group means: Sepal.Length Sepal.Width Petal.Length Petal.Width setosa 4.982353 3.411765 1.482353 0.2411765 versicolor 5.994118 2.794118 4.358824 1.3676471 virginica 6.636842 2.973684 5.592105 2.0552632
モデルの結果を解釈する方法は次のとおりです。
グループ事前確率:これらはトレーニング セット内の各種の割合を表します。たとえば、トレーニング セット内のすべての観測値の 35.8% は、 virginica種に関するものでした。
グループ平均:これらは、種ごとの各予測変数の平均値を表示します。
ステップ 5: モデルを使用して予測を行う
トレーニング データを使用してモデルを適合させたら、それを使用してテスト データの予測を行うことができます。
#use QDA model to make predictions on test data predicted <- predict (model, test) names(predicted) [1] "class" "posterior" "x"
これにより、2 つの変数を含むリストが返されます。
- class:予測されたクラス
- 事後確率:観測値が各クラスに属する事後確率
テスト データセットの最初の 6 つの観測値に対するこれらの各結果をすぐに視覚化できます。
#view predicted class for first six observations in test set head(predicted$class) [1] setosa setosa setosa setosa setosa setosa Levels: setosa versicolor virginica #view posterior probabilities for first six observations in test set head(predicted$posterior) setosa versicolor virginica 4 1 7.224770e-20 1.642236e-29 6 1 6.209196e-26 8.550911e-38 7 1 1.248337e-21 8.132700e-32 15 1 2.319705e-35 5.094803e-50 17 1 1.396840e-29 9.586504e-43 18 1 7.581165e-25 8.611321e-37
ステップ 6: モデルを評価する
次のコードを使用すると、QDA モデルが種を正しく予測した観測値の割合を確認できます。
#find accuracy of model
mean(predicted$class==test$Species)
[1] 1
このモデルは、テスト データセット内の観測値の100%について種を正しく予測したことがわかりました。
現実の世界では、QDA モデルが各クラスの結果を正確に予測することはほとんどありませんが、この虹彩データセットは、機械学習アルゴリズムが非常にうまく機能する傾向にある方法で単純に構築されています。
このチュートリアルで使用される完全な R コードは、ここで見つけることができます。