Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- merge
- 순위출력
- 정보획득량
- 그래프시각화
- 회귀분석
- sql
- 단순회귀 분석
- %in%
- 여러 데이터 검색
- Sum
- 빅데이터분석
- 막대그래프
- 히스토그램 그리기
- count
- 데이터분석
- 데이터분석가
- if문 작성법
- loop 문
- 팀스파르타
- 빅데이터
- Intersect
- 상관관계
- 불순도제거
- 그래프 생성 문법
- max
- 총과 카드만들기
- sqld
- difftime
- Dense_Rank
- 회귀분석 알고리즘
Archives
- Today
- Total
ch0nny_log
[빅데이터분석] R _ 73. 랜덤 포레스트 본문
■ 네번째 이수자 평가 문제
# 이원 교차표 데이터 TP <- 70 FN <- 10 TN <- 60 FP <- 10 # 민감도 print( TP / (TP+FN) ) # # 특이도 print( TN / (TN+FP) ) # # 정밀도 print( TP /( TP+FP) ) #
출처: https://cafe.daum.net/oracleoracle/Sotv/886
-> 랜덤 포레스트가 배깅보다 더 다양하고 좋은 결과를 얻음
■ 실습. 아이리스 데이터를 활용하여 랜덤포레스트 모델을 시각화하시오.
# 패키지 설치 (한번만 실행하면 됩니다) install.packages("randomForest") # 패키지 로드 library(randomForest) # iris 데이터셋 로드 data(iris) # 데이터 확인 head(iris) # 데이터셋을 랜덤하게 섞고, 70%를 훈련 데이터, 30%를 테스트 데이터로 분리 set.seed(42) # 랜덤 시드 설정 (재현 가능성 위해) train_indices <- sample(1:nrow(iris), 0.7 * nrow(iris)) train_data <- iris[train_indices, ] #105 test_data <- iris[-train_indices, ] #45 # 랜덤 포레스트 모델 학습 rf_model <- randomForest(Species ~ ., data=train_data, ntree=100, mtry=2, importance=TRUE) # 모델 요약 정보 확인 print(rf_model) # 테스트 데이터에 대한 예측 수행 predictions <- predict(rf_model, test_data) # 혼동 행렬(Confusion Matrix) 확인 confusion_matrix <- table(predictions, test_data$Species) print(confusion_matrix) # 정확도 계산 accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix) print(paste("Accuracy:", accuracy)) # 변수 중요도 확인 importance(rf_model) # 변수 중요도 시각화 varImpPlot(rf_model)
설명:
1. ntree=100(랜덤으로 생성할 나무 100개) / mtry=2 (노드를 분할 시 선택된 2개의 변수만 고려하여 최적의 분할 을 찾음)
2. mtry 값이 적을 때는 질문이 적어지고 과적합 될 가능성이 줄어듦/ 많을 때는 과적합 될 가능성 높아짐
3. importance=TRUE 는 랜덤 포레스트 모델을 학습 할때 변수의 중요도를 계산하도록설명하는 옵션입니다. 이 옵션을 설정하면 모델이 각 변수의 중요도를 계산하고어떤 변수가 예측에 더 중요한 변수인지를 알수 있게 해줍니다.어떤 변수가 중요한지는 지니계수와 엔트로피를 이용해서 정보획득량으로 중요도를 정합니다.※ 그래프 설명:
1. MeanDecreaseAccuracy : 변수를 제거 했을 때 모델의 정확도가 얼마나 감소하는지를 측정하는 지표이고 값이 클수록 해당 변수가 모델의 예측 성능에 큰 영향을 미침
2. MeanDecreaseGini: 변수의 gini 불순도 지수를 얼마나 감소 시키는지를 측정함. 값이 클 수록 해당 변수가 분류에 중요한 역할을 한다는 의미임.
분류 모델에서 꽃잎의 길이와 넓이가 꽃받침의 길이와 넓이에서 비해서 상대적으로 더 중요한 변수라는 것을 보여주고 있음.
문제. 와인 데이터를 활용하여 와인의 종류를 분류하는 모델을 생성하고 분류하는데 있어서 중요한 변수가 무었인지 확인하시오.
# 패키지 설치 (한번만 실행하면 됩니다) #install.packages("randomForest") # 패키지 로드 library(randomForest) # iris 데이터셋 로드 data <- read.csv("c:\\data\\wine2.csv") # 데이터 확인 data$Type <- as.factor(data$Type) # 데이터셋을 랜덤하게 섞고, 70%를 훈련 데이터, 30%를 테스트 데이터로 분리 set.seed(42) # 랜덤 시드 설정 (재현 가능성 위해) train_indices <- sample(1:nrow(data), 0.7 * nrow(data)) train_data <- data[train_indices, ] test_data <- data[-train_indices, ] # 랜덤 포레스트 모델 학습 rf_model <- randomForest(Type ~ ., data=train_data, ntree=100, mtry=2, importance=TRUE) # 모델 요약 정보 확인 print(rf_model) # 테스트 데이터에 대한 예측 수행 predictions <- predict(rf_model, test_data) # 혼동 행렬(Confusion Matrix) 확인 confusion_matrix <- table(predictions, test_data$Type) print(confusion_matrix) # 정확도 계산 accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix) print(paste("Accuracy:", accuracy)) # 변수 중요도 확인 importance(rf_model) # 변수 중요도 시각화 varImpPlot(rf_model)
'빅데이터 분석(with 아이티윌) > R' 카테고리의 다른 글
빅분기 R_CBT 예상 문제 (0) | 2024.07.31 |
---|---|
[빅데이터분석] R _ 74. carot 튜닝 (0) | 2024.07.30 |
[빅데이터분석] R _ 72. 앙상블 (0) | 2024.07.30 |
[빅데이터분석] R _ 71. k-foldout (0) | 2024.07.30 |
[빅데이터분석] R _ 70. ROC 커브와 cut-off (0) | 2024.07.30 |