# neuralnet 함수를 이요해 역전파 알고리즘을 사용 가능 install.packages("neuralnet") library("neuralnet") set.seed(123) idx <- sample(1:nrow(iris),0.7 * nrow(iris)) # 7:3으로 나눔 train_iris <- iris[idx, ] test_iris <- iris[-idx, ] head(train_iris) #꽃잎 꽃밭임의 길이를 보고 꽃의 종류 구분하기 train_iris$Species2[train_iris$Species == 'setosa'] <-1 train_iris$Species2[train_iris$Species == 'versicolor'] <-2 train_iris$Species2[train_iris$Species == 'virginica'] <-3 train_iris$Species <- NULL #Species 값이 없어짐 head(train_iris) test_iris$Species2[test_iris$Species == 'setosa'] <-1 test_iris$Species2[test_iris$Species == 'versicolor'] <-2 test_iris$Species2[test_iris$Species == 'virginica'] <-3 test_iris$Species <- NULL #Species 값이 없어짐 head(test_iris) #데이터 정규화 : 0~1 범위로 정규화 작업 normal_func <- function(x){ return ((x-min(x))/ (max(x)-min(x))) } #normal_func(c(1,5,4,5)) train_nor <-as.data.frame(lapply(train_iris, normal_func)) train_nor summary(train_nor) test_nor <-as.data.frame(lapply(test_iris, normal_func)) test_nor summary(test_nor) # 분류모델 생성 ~ 은닉층 1개 model_net <- neuralnet(Species2 ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = train_nor,hidden=1) model_net plot(model_net) #모델 성능 평가 (예측) ~ predict()대신 compute() model_result <- compute(model_net, test_nor[c(1:4)]) model_result #상관관계 cor(model_result$net.result,test_nor$Species2) # 0.9732786101, 강한양의 상관관계를 보여주고 있다. model_net2 <- neuralnet(Species2 ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = train_nor, hidden=2 ,algorithm = "backprop" ,learningrate = 0.01) model_net2 plot(model_net2) model_result2 <- compute(model_net2, test_nor[c(1:4)]) model_result2 cor(model_result$net.result,test_nor$Species2) #0.9732786101