반응형
목차
앙상블 기법
1.앙상블 기법이란
2.배깅
3.부스팅
4.스태킹
5.랜덤 포레스트
6.성과분석
5.랜덤 포레스트(random forest)
의사결정나무의 특징인 분산이 크다는 점을 고려하여 배깅과 부스팅보다 더 많은 무작위성을 주어 약한 학습기들을 생성한 후 이를 선형 결합하여 최종 학습기를 만드는 방법이다.
Random subset of training data(bagging) + Random selection of features
즉, 나무마다 독립변수가 다르게 들어가도록 독립변수의 수를 제한하는 기법인데, 어떤 데이터에는 나이, 성별을 어떤데이터에는 주소, 나이를 사용하는 식으로 변수가 동일하지 않는 것이다.
1)랜덤 포레스트 특징
-랜덤한 forest에는 많은 트리들이 생성된다.
-수천 개의 변수를 통해 변수제거 없이 실행되므로 정확도 측면에서 좋은 성과를 보인다.
-category variable의 value 종류가 32개를 넘을 수 없다.
-이론적 설명이나 최종 결과에 대한 해석이 어렵다는 단점이 있지만 예측력이 매우 높은 것으로 알려져 있다.
-특히 입력변수가 많은 경우, 배깅과 부스팅과 비슷하거나 좋은 예측력을 보인다.
2)랜덤 포레스트 예시
#데이터 불러오기
data(iris)
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 1 1 1 ...
levels(iris$Species)
## [1] "setosa" "versicolor" "virginica"
iris(붓꽃 데이터셋)
-Sepal.Length: 꽃받침 길이
-Sepal.Width: 꽃받침 너비
-Petal.Length: 꽃잎 길이
-Petal.Width:꽃잎 너비
-Species: 붓꽃의 종
levels(iris$Species)
## [1] "setosa" "versicolor" "virginica"
붓꽃의 종은 세 가지다
#train/test 데이터 분할
set.seed(1234)
idx <- sample(2,nrow(iris),replace = TRUE,prob = c(.7,.3))
train.data <- iris[idx==1,]
test.data <- iris[idx==2,]
str(train.data)
## 'data.frame': 112 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5.4 4.6 5 4.4 4.9 5.4 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.9 3.4 3.4 2.9 3.1 3.7 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.7 1.4 1.5 1.4 1.5 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 0.2 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
str(test.data)
## 'data.frame': 38 obs. of 5 variables:
## $ Sepal.Length: num 5 4.3 5.7 5 5.2 5.2 5 4.4 5.1 5 ...
## $ Sepal.Width : num 3.6 3 4.4 3 3.5 3.4 3.2 3 3.4 3.3 ...
## $ Petal.Length: num 1.4 1.1 1.5 1.6 1.5 1.4 1.2 1.3 1.5 1.4 ...
## $ Petal.Width : num 0.2 0.1 0.4 0.2 0.2 0.2 0.2 0.2 0.2 0.2 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
sample함수를 이용해 1,2 숫자를 복원추출로, 7대 3 비율로, iris 관측치 수 만큼 생성한다. train데이터에는 70%, test데이터에는 30%를 준 것이다.
랜덤 포레스트
randomForest()함수
#1.forest 키우기
library(randomForest)
rforest.m <- randomForest(formula = Species ~ .,
data = train.data,
na.action = na.roughfix, #결측치 알아서 처리(범주는 최빈값, 연속은 평균)
importance = TRUE)
plot(rforest.m) #나무의 개수가 많아질수록 오차가 줄어든다.
randomForest 인자 -formula # 모델 포뮬러
-data # 포뮬러를 적용할 데이터
-ntree=500(디폴트값) # 나무의 개수
-mtry # 노드를 나눌 기준을 정할 때 고려할 변수의 수
-importance=FALSE # 변수의 중요도 평가 여부
#2.변수 중요도
rforest.m$importance
## setosa versicolor virginica MeanDecreaseAccuracy
## Sepal.Length 0.021652856 0.034015659 0.05788618 0.035824252
## Sepal.Width 0.004146321 0.001587125 0.01629752 0.006502707
## Petal.Length 0.315431487 0.271841653 0.31573393 0.294731939
## Petal.Width 0.313852557 0.294628816 0.31792067 0.306050940
## MeanDecreaseGini
## Sepal.Length 7.393007
## Sepal.Width 1.577971
## Petal.Length 30.539760
## Petal.Width 34.290976
varImpPlot(rforest.m)
MeanDecreaseAccuracy는 정확도를 기준으로, MeanDecreaseGini는 비순수성을 기준으로 측정한 값이다. 값이 클수록 중요한 변수이다.
#예측된 데이터와 실제 데이터 비교
table(train.data$Species,predict(rforest.m), dnn = c('Actual','Predicted'))
## Predicted
## Actual setosa versicolor virginica
## setosa 40 0 0
## versicolor 0 35 3
## virginica 0 2 32
rforest.m를 predict함수로 예측한 후, 실제 데이터와 비교한다. 5개 관측치를 제외하고 모두 동일하다. 즉, 오차율이 약 4.5%이다.
#test data로 정확성 검정
test.pre <- predict(rforest.m,newdata=test.data)
table(test.data$Species,test.pre, dnn = c('Actual','Predicted'))
## Predicted
## Actual setosa versicolor virginica
## setosa 10 0 0
## versicolor 0 12 0
## virginica 0 2 14
정확도가 약 94.7%이다.
6.성과분석
1)오분류에 대한 추정치
condition | ||||
positive | negative | |||
prediction | positive | True Postitve(TP) | False Positive(FP) | Poistive Predictive value |
negative | False Negative(FN) | True Negative(TN) | Negative predictive value | |
sensitivity(민감도) | specificy(특이도) |
-sensitivity TP/(TP+FN)
: 실제 참일때, 예측도 참인 확률
-specificy TN/(FP+TN)
: 실제 거짓일때, 예측도 거짓인 활률
-Poistive Predictive value( FP/(TP+FP) )
: 예측이 참일때, 실제도 참일 확률
-Negative predictive value( TN/(FN+TN) )
: 예측이 거짓일때, 셀제도 거짓일 확률
2)ROCR패키지
ROCR 패키지는 이진 분류(binary classification)만 지원 가능한 모형 평가 함수들이 들어있는 패키지이다.
Receiver Operating Characteristic (ROC) curve는 주로 의학 분야에서 진단 방법에 대한 유용성과 진단의 기준치(Cut-off Value) 판단을 위해 사용됩니다. 검사한 결과의 민감도(Sensitivity)와 특이도(Specificity)를 바탕으로 그려지는 그래프로 그래프의 면적인 AUC(area under the ROC curve)가 넓을수록 정확도가 높은 진단 방법이라고 볼 수 있습니다. 또한 기계 학습이나 데이터 마이닝 분야에서도 이항 분류기(Binary classifier)의 성능 평가 시에 많이 사용됩니다.
-TPR(True Positive Rate, 민감도) : 1인 케이스에 대한 1로 예측한 비율
-FPR(False Positive Rate, 1-특이도) : 0인 케이스에 대한 1로 잘못 예측한 비율
-AUROC(Area under ROC = (AR+1)/2 ) : 정확도 측정 기준
0.9 ~ 1.0 = excellent (A)
0.8 ~ 0.9 = good (B)
0.7 ~ 0.8 = fair (C)
0.6 ~ 0.7 = poor (D)
0.5 ~ 0.6 = fail (F)
-그리는 코드
pred <- prediction( ~ , ~ )
perf <- performance(pred, "tpr", "fpr")
plot(perf, main="제목", colorize=T)
3)이익도표(Lift Chart)
데이터셋의 각 데이터는 예측확률을 가진다.
전체 데이터셋을 예측확률에 대해 내림차순으로 정렬한다.
반응형
댓글