R의 2차 판별 분석(단계별)
2차 판별 분석은 일련의 예측 변수가 있고 응답 변수를 두 개 이상의 클래스로 분류하려는 경우 사용할 수 있는 방법입니다. 이는 선형 판별 분석 과 비선형적으로 동등한 것으로 간주됩니다.
이 튜토리얼에서는 R에서 2차 판별 분석을 수행하는 방법에 대한 단계별 예를 제공합니다.
1단계: 필요한 라이브러리 로드
먼저 이 예제에 필요한 라이브러리를 로드합니다.
library (MASS)
library (ggplot2)
2단계: 데이터 로드
이 예에서는 R에 내장된 붓꽃 데이터 세트를 사용합니다. 다음 코드는 이 데이터 세트를 로드하고 표시하는 방법을 보여줍니다.
#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단계: 학습 및 테스트 샘플 만들기
다음으로 데이터 세트를 모델을 훈련하기 위한 훈련 세트와 모델을 테스트하기 위한 테스트 세트로 분할합니다.
#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"
그러면 두 가지 변수가 포함된 목록이 반환됩니다.
- 클래스: 예측된 클래스
- 사후: 관측치가 각 클래스에 속할 사후 확률
테스트 데이터 세트의 처음 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 코드는 여기에서 찾을 수 있습니다.