R 언어 기반의 의사 결정 트리 및 랜덤 포레스트 (2)

마지막 섹션에서 우리는 의사 결정 트리에 대해 이야기했습니다. 오늘은 랜덤 포레스트에 대해 이야기 할 것입니다. 랜덤 포레스트 알고리즘은 지난 2 년 동안 정말 인기가있었습니다. 저는 방금 문헌을 확인했습니다. 랜덤 포레스트를 포함하는 한 당신은 할 수 있습니다 BB의 몇 마디를 보내세요. 중국어 코어 또는 듀얼 코어 논문의 경우 지금 임의의 숲에 참여하는 것이 좋습니다. 시간이 기다리지 않습니다. 무엇을 기다리고 있습니까?
랜덤 포레스트는 2001 년 Breiman에 의해 제안되었습니다. 로지스틱 회귀에서 공선 성 문제를 해결합니다. 여기에는 결 측값을 추정하는 알고리즘이 포함되어 있습니다. 데이터의 일부가 누락 되어도 일정 수준의 정확도를 유지할 수 있습니다. 랜덤 포레스트의 분류 트리 알고리즘은 자연적으로 변수의 상호 작용을 포함하므로 변수의 상호 작용과 비선형 성이 유의한지 확인할 필요가 없습니다. 대부분의 경우 모델 매개 변수의 기본 설정은 최적 또는 거의 최적의 결과를 제공 할 수 있습니다.
랜덤 포레스트는 분류 투표를 통해 간단히 많은 의사 결정 번호로 이해 될 수 있습니다. 원칙은 대략 다음과 같습니다. 훈련 세트의 무작위 샘플링은 교체와 함께 수행되고, 획득 된 여러 샘플은 새로운 훈련 세트로 훈련 세트의 하위 집합을 형성합니다. 그런 다음 생성 된 새 훈련 세트에서 훈련 세트의 p 특성을 무작위로 추출하여 서브 세트를 형성하고 서브 세트를 사용하여 잘라 내지 않고 의사 결정 트리를 훈련합니다. n 개의 의사 결정 트리가 훈련 될 때까지이 프로세스를 반복하고 각 의사 결정 트리에 대해 분류 할 테스트 샘플을 분류하고 각 의사 결정 트리의 분류 결과를 계산하고 가장 많은 의사 결정 트리가 인식 한 카테고리를 최종 분류 결과로 사용합니다.
랜덤 포레스트에 대한 마지막 데이터를 계속 사용합니다. randomForest, pROC, 외부 패키지가 필요합니다. 먼저 데이터를 가져 와서 변수를 봅니다.

library(randomForest)
library(pROC)
library(foreign)
bc <- read.spss("E:/r/test/bankloan_cs.sav",
                use.value.labels=F, to.data.frame=T)
names(bc)

여기에 사진 설명 삽입
여기에 사진 설명 삽입
중복 변수
bc <-bc [, c (-1 : -3, -13 : -15, -5)] 중 일부를 삭제
하여 다음 데이터 가져옵니다.
연령, 고용 된 고용주,이 장소에 거주 한 주소, 소득 소득, 부채의 부채 소득 비율, 신용 카드 부채의 신용 카드 부채, 기타 부채, 마지막 기본값은 우리의 결과 지표, 즉 고위험 고객인지 여부입니다.
여기에 사진 설명 삽입
데이터를 학습 세트와 예측 세트 (즉, 모델링 및 검증)로 나누고 시드를 먼저 설정하여 반복성을 확보해야합니다.

###设置训练和预测集
set.seed(1)
index <- sample(2,nrow(bc),replace = TRUE,prob=c(0.7,0.3))
traindata <- bc[index==1,]
testdata <- bc[index==2,]
###拟合随机森林模型,默认的mtry的值是自变量除以3
def_ntree<- randomForest(default ~age+employ+address+income+debtinc+creddebt
                         +othdebt,data=traindata,
                         ntree=500,important=TRUE,proximity=TRUE)

모델 오류가 여전히 상당히 크다고 생각합니다
여기에 사진 설명 삽입

plot(def_ntree)##画图

여기에 사진 설명 삽입
사진은 500 개의 나무 가지에 도달했고 오류가 거의 변하지 않았 음을 보여줍니다. 다음 코드를 사용하여 오류가 가장 작은 나무를 찾을 수도 있지만 그림을 보는 것이 더 신뢰할 수 있다고 생각합니다

which.min(def_ntree $err.rate[,1])### 最小误差的树

랜덤 시뮬레이션으로 고객 데이터를 생성하고 시스템을 판단합니다.

newdata1<-data.frame(age=30,employ=5,address=2,income=100,
                     debtinc=5.2,creddebt=0.3,othdebt=0.2)
predict(def_ntree,newdata1)

여기에 사진 설명 삽입
이 시스템은 고위험 고객으로 간주됩니다. 세 가지 범주의 결과 지표 인 경우 확률 분석 및 투표에 다음 문법을 사용할 수도 있습니다.

predict(def_ntree,newdata1,type = "prob")

모델과 관련된 중요 지표를 살펴보고 채점 및 다이어그램을 통해 모델에 영향을 미치는 가장 중요한 지표를 파악합니다. 부채 대 소득 비율이 가장 중요하다는 것을 알 수 있으며 이는 의사 결정 트리와 동일합니다. 심판.

importance(def_ntree)
varImpPlot(def_ntree)

여기에 사진 설명 삽입
여기에 사진 설명 삽입
가장 영향력있는 부채 대 소득 비율 지표가 결과 지표에 미치는 영향을 알고 싶다면 아래 오른쪽 그림은 부채 소득이 30보다 큰 경우 고위험 고객으로 쉽게 판단 할 수 있음을 보여줍니다.

partialPlot(def_ntree,traindata,debtinc,"0",xlab = "debtinc",ylab = "Variabl effect")

여기에 사진 설명 삽입
마지막으로 검증 세트를 통해 모델을 검증합니다.

def_pred<-predict(def_ntree, newdata=testdata)##生成概率
roc<-multiclass.roc (as.ordered(testdata$default) ,as.ordered(def_pred))#拟合ROC
roc1<-roc(as.ordered(testdata$default) ,as.ordered(def_pred))
round(auc(roc1),3)##AUC
round(ci(roc1),3)##95%CI
plot(roc1)
plot(roc1,print.auc=T, auc.polygon=T, grid=c(0.1, 0.2), grid.col=c("green","red"), 
     max.auc.polygon=T, auc.polygon.col="skyblue",print.thres=T)


여기에 사진 설명 삽입
이렇게 그릴 수도 있습니다

plot(1-roc1$specificities,roc1$sensitivities,col="red",
     lty=1,lwd=2,type = "l",xlab = "specificities",ylab = "sensitivities")
abline(0,1)
legend(0.7,0.3,c("AUC=0.82"),lty=c(1),lwd=c(2),col="red",bty = "n")

여기에 사진 설명 삽입
참조 :

  1. R의 randomForest 설명
  2. Tang Dawei. Random Forest를 기반으로 한 일일 유출 예측 모델에 대한 연구 및 R 언어로 구현 [J]. Heilongjiang Water Conservancy Science and Technology, 2019 (12).
  3. Zheng Zhiwei, Qiu Jialing, Yang Qingling, Gong Xiaochun, Guo Shanqing, Jia Zhongwei, Hao Chun. 무작위 숲을 텍스트 감정 분석에 적용하고 R 소프트웨어 구현 [J] .Modern Preventive Medicine, 2018,45 (8) : 1345-1348,1353.
  4. Li Xinhai. 분류 및 회귀 분석에 무작위 숲 모델 적용 [J] .Acta Applied Entomology, 2013,50 (4) : 1190-1197.
    더 흥미로운 기사를 보려면 공개 번호 : Zero-Basic Research를 참조하십시오.
    여기에 사진 설명 삽입

추천

출처blog.csdn.net/dege857/article/details/114794505