# 필요 패키지 설치 및 데이터 가져오기
library(readxl)
dataset3<-read_excel("C:\\Users\\Catharina\\Desktop\\b\\noname_data.xlsx")
str(dataset3)
install.packages("caret")
library(caret)
library(class)
library(scales)
# 데이터셋 만들기
attach(dataset3)
str(dataset3)
line<-mean(cf_exp,cf_sat,trim=0, na.rm=FALSE)
# 분류기준 만들기
class_cf<-ifelse(cf_mean<3,'low',
ifelse(cf_mean>4.5, 'high', 'middle'))
data<-data.frame(cf_exp,cf_sat,class_cf)
# 표준화(단위, 범주가 다르지 않으면 굳이 안 해도 될 듯..? 더 알아보기)
normalize<-function(x){
num<-x-min(x)
denom<-max(x)-min(x)
return(num/denom)}
norm_exp1<-normalize(EXP1)
norm_exp2<-normalize(EXP2)
norm_exp3<-normalize(EXP3)
# 데이터 나누기(train, validation, test)
set.seed(123) # 난수 생성
idx<-sample(1:nrow(data), nrow(data)*0.7)
train<-data[idx, ]
test<-data[-idx,]
# 보통 데이터를 분할할 때 Train:8, Test:2로 분할(혹은 7:3)함.
set.seed(123) # 난수 생성
idx<-sample(1:nrow(data), nrow(data)*0.7)
train<-data[idx, ]
test<-data[-idx,]
table(train$class_cf)
# 산점도들 그리기
tune<-caret::trainControl(method="none")
model1<-carat::train(class_cf ~., data=train,
method="knn",
trControl=tune)
#------------ 자료 전처리 끝
# knn 식 적용하기
# x와 y로 나누기
train_x<-train[,-3]
valid_x<-valid[,-3]
test_x<-test[,-3]
# -3 : 3번째 열을 제한다
train_y<-train[,3]
valid_y<-valid[,3]
test_y<-test[,3]
# +3 3번째 열만 가져온다
library(caret)
library(class)
knn_1<-knn(train=train_x,test=test_x,cl=train_y,k=6)
library(gmodels)
CrossTable(x=test_y, y=knn_1, prop.chisq=FALSE)
# 다른 것도. 난수 생성해서 트레인, 테스트모델 만들기
set.seed(123)
idx<-sample(1:nrow(data), nrow(data)*0.7)
train<-data[idx, ]
test<-data[-idx,]
table(train$class_cf)
table(test$class_cf)
# knn 분석 시행할 모델
model1<-caret::train(class_cf ~., data=train,
+ method="knn",
+ trControl=tune)
# predict, confusionmatrix. 나중에 꼭 찾기
predict1<-predict(model1,newdata=test)
caret::confusionMatrix(predict1, as.factor(test$class_cf))
# 안 될 땐 factor 데이터를 형성해줘야 함!
# 랜덤 서치 방법으로 파라미터 찾는 코드(튜닝)
tune2<-caret::trainControl(method="CV", number=5) #crossvalidation
model2<-caret::train(class_cf~., data=train,
method="knn",
trControl=tune2,
tuneLength=20)