728x90

08.랜덤포레스트(randomForest) h2o 패키지 사용 in r

 

 

아래소스랑 은행데이터사용해보기

 

m013<-randomForest(like1~month+stay+with+nat+sex+age+season, data = dd, ntree=1000)

m013

plot(m013)

print(m013)

varImpPlot(m013,sort = T,n.var = 5)

str(join_total)

LocalH2O<-h2o.init(nthreads=-1)

d002<-as.h2o(dd) # d001을 H2O데이터인 d002로 변환

head(d002)

str(d002)

m014<-h2o.randomForest(y=3,x=c(1,2,5,6,7,9,10),training_frame = d002,ntrees = 5000,mtries = 6,max_depth = 5,seed=1122) #100회 RF 시행

h2o.performance(m014) # 1 - total error rate = accracy

h2o.varimp(m014)

?h2o.randomForest

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

728x90

군집분석(k-means) in R

 

k-means 는 비지도 학습에 포함되는 군집분석중 하나입니다.

여러 특성들을 거리로 비교해서 비슷한 특성을 가진 값들끼리 묶어주는 방법입니다.

하지만 몇개의 군집으로 나눠줄지는 사용자가 정해주어야 합니다.

 

r에서 기본으로 제공하는 iris데이터로 군집분석을 해보겠습니다.

 

#k-means 군집분석 (data=iris)

library(caret)
data <- iris
set.seed(123)

 

#표준화
scaled.data <- scale(data[,-5])
summary(training.data)
head(scaled.data,5)

 

#k-means의 사전 군집수를 3개로 지해서 시행
set.seed(0723)#난수설
result <- kmeans(scaled.data,3)

 

#k-means clustering 결과 확인
result$centers #각 군집의중시점 확인

#교차표로 확인
table(data$Species, result$cluster, dnn=c("class","clustering"))

 

#k - means clustering 시각화
plot(scaled.data[,1:2], col=result$cluster)
points(result$centers[,1:2],pch=8,co=1:3, cex=2)

 

#silhouette : k-means cluster이 잘되었는지 판단, 1에 가까울수록 잘된
library(cluster)
plot(silhouette(result$cluster, dist = dist(data[,-5])), col = 1:3)

 

#사전 군집수 3개가 정당한지 알기위해 2~6개까지 조정하면서 k-means clustering을 시행하고
#군집수에 따른 SSE를 시각화

#여러번 k-means 해서 확인
visual <- NULL
for (i in 2:6){
  set.seed(0723)
  eval(parse(text=paste("result",i,"<-kmeans(scaled.data,",i,");",sep="")))
  eval(parse(text=paste("visual[",i,"] <- result",i,"$tot.withinss",sep="")))
}
plot(visual[-1], type="l"  ,ylab = "", xlab = "",
     main = "cluster의 개수에 따른 클러스터 내부분산", )
abline(v=3,col="red") #군집수가 3에서 SSE감소폭이 줄어들고잇음


 

 

728x90

06.랜덤포레스트(RandomForest) in R

 

랜덤포레스트란 앞에서 배운 의사결정트리를 랜덤으로 만들어 나온 결과를 투표방식으로 예측하는 알고리즘 입니다.

그렇기 때문에 하나의 트리를 통해 분류하는 의사결정트리보다 높은 정확성을 갖는 강력한 알고리즘이라고 할 수 있습니다.

 

랜덤포레스트 모델을 생성할때 ntree(트리개수), mtry(변수개수)를 지정해주어야 합니다.

 

먼저 randomForest패키지를 install해주고 불러옵니다.

데이터셋은 R에서 기본으로 제공하는 iris데이터셋을 사용하겠습니다.

 

그다음 랜덤포레스트 모델을 생성한뒤

파라미터를 조정해주는 코드 입니다.

 

일단 ntree=300, mtry=4로 지정을 한뒤 모델을 생성해 보겠습니다.

 

model2를 실행시키면

다음과 같이 결과를 확인할 수 있습니다.

결과에서 confusion matrix를 통해 분류한 내용과

error rate를 확인할 수 있습니다.

 

 

 

다음은 변수중요도로 랜덤포레스트 모델을 생성하는 것입니다,

iris데이터는 변수가 4개밖에 되지않아서 큰 차이는없지만

변수가 많고 큰데이터는 변수중요도에 따라 error rate가 크게 변하기 때문에

변수 종요도로 생성해주는 것이 좋습니다.

importance = T를 추가해주면 됩니다.

 

 

랜덤포레스트는 모델을 생성할 때 파라미터를 입력을 해 주기때문에

어떤 파라미터가 높은 정확도를 갖는지 알수 없습니다.

그렇기 때문에 for문을 사용해서 최적의 파라미터를 찾을 수 있습니다.

 

이 코드를 돌리면 결과값이 쭉 출력되는데

그중 error rate가 낮은 파라미터값을 사용하면 됩니다.

 

 

728x90

05.의사결정트리(Decision Tree) in R (2) 



iris 데이터 셋을 이용하여, Training Set과 Test Set을 생성한 뒤, Training Set으로 분류모델을 생성하고,  Test Set을 이용하여 분류모델을 평가 해보겠습니다.


먼저 전체 소스입니다.



다음은 iris_ctree결과입니다.

결과를 보시면 Species결정에 Petal.Length와 Petal.Width가 중요한 변수라는걸 알 수 있습니다.




다음은 Iris_ctree를 시각화한 그림입니다.

 

다음은 stats패키지에서 제공하는 predict()함수로 정확도를 구하는 방법입니다.

pred <- predict(iris_ctree,Test_set) 를 통하여 예측치를 구한뒤

table(pred,Test_set$Species)로 혼돈 매트릭스를 생성한뒤 정확도를 계산합니다.

저의 경우에는 97.8%의 정확도가 나왔으며, sample에 따라 결과의 차이는 약간 있을수 있습니다.

set.seed()를 사용하면 매번 동일결과를 얻을 수 있습니다. 



+ Recent posts