통계 이야기
빅데이터 분석 ; LDA(선형판별분석) QDA(2차판별분석)
728x90
반응형
data는 kaggle에 있는 고객데이터 사용하였습니다.
- customer id ; 연속형 (고객아이디)
- Gender : 이산형(성별)
- Age : 여기서는 연속형으로 사용 (나이)
- Annual Income : 연속형(소득)
- Spending Score ; 연속형 (소비점수)
탐색
data <- read.csv('Mall\_Customers.csv')
attach(data)
str(data)
자료 구조 파악 ; 5개 변수, 200개의 행들
barplot(table(data$Gender))
이산형 변수 그래프로 탐색
par(mfrow= c(2, 2))
hist(data$Age)
hist(data$Annual.Income..k..)
hist(data$Spending.Score..1.100.)
summary(data)
200개 중 70%를 train, 나머지를 test로 지정한다.
index <- sample(nrow(data),nrow(data)\*0.7)
train<-data\[index,\]
test<-data\[-index,\]
선형판별함수 사용
ld1 <- lda(formula = Gender~Age + Annual.Income..k..+ Spending.Score..1.100., data = data)
y1 <- table(pred1$class,test$Gender)
y1
Result
Female Male
Female 34 20
Male 3 3
accuracy<-function(x){
sum(x\[row(x) == col(x)\])/sum(x)
}accuracy(y1)
정분류율 검사
0.6166667
오분류율 검사
1-accuracy(y1)
0.3833333
(여러 사전확률에 따른 모델의 성능 확인)
set.seed(NULL)
acc <- c()
for (x in 1:10){
index <- sample(nrow(data),nrow(data)\*0.7)
train<-data\[index,\]
test<-data\[-index,\]
ld1 <- lda(formula = Gender ~ ., data = train)
pred1 <- predict(ld1,test)
y1 <- table(pred1$class,test$Gender)
acc<-c(acc,accuracy(y1))
}
acc
0.5000000 0.5000000 0.5500000 0.5333333 0.5666667 0.4833333 0.4333333 0.5500000 0.5000000 0.4500000
mean(acc)
0.5066667
sd(acc)
0.04388537
사전확률 = 7:3로 랜덤샘플 10회 반복 시행
acc1 <- c()
for (x in 1:10){
index <- sample(nrow(data),nrow(data)\*0.7)
train<-data\[index,\]
test<-data\[-index,\]
ld1 <- lda(formula = Gender ~ Age + Annual.Income..k..+ Spending.Score..1.100., data = train,prior = c(0.7,0.3))
pred1 <- predict(ld1,test)
y1 <- table(pred1$class,test$Gender)
acc1<-c(acc1,accuracy(y1))
}
acc1
0.5000000 0.5666667 0.5000000 0.5833333 0.5166667 0.5666667 0.5166667 0.5166667 0.5166667 0.5500000
mean(acc1)
0.5333333
sd(acc1)
0.03042903
사전확률 = 3:7로 랜덤샘플 10회 반복 시행
acc2 <- c()
for (x in 1:10){
index <- sample(nrow(data),nrow(data)\*0.7)
train<-data\[index,\]
test<-data\[-index,\]
ld1 <- lda(formula = Gender ~ Age + Annual.Income..k..+ Spending.Score..1.100., data = train,prior = c(0.3,0.7))
pred1 <- predict(ld1,test)
y1 <- table(pred1$class,test$Gender)
acc2<-c(acc2,accuracy(y1))
}
mean(acc2)
0.4133333
sd(acc2)
0.06226189
acc2
0.3666667 0.3666667 0.5000000 0.4666667 0.4500000 0.3500000 0.3166667 0.4333333 0.4833333 0.4000000
boxplot(list(acc,acc1,acc2),names = c("default","7:3","3:7"),
main = "Accuracy Box-plot" )
반복 수 average accuracy sd
Bayes(default) 10 0.5066667 0.04388537
Bayes(7:3) 10 0.5333333 0.03042903
Bayes(3:7) 10 0.4133333 0.06226189
728x90
반응형
'통계 이야기' 카테고리의 다른 글
빅데이터 분석 ; LDA ; logistic regression ; dicision tree ; 동시 비교 (0) | 2021.07.22 |
---|---|
빅데이터 분석 ; logistic regression ; 로짓분석 ; 분류분석 ; classification analysis (0) | 2021.07.21 |
빅데이터 분석 ; 연관성 분석(2) ; kaggle 데이터에 적용 (0) | 2021.07.19 |
빅데이터 분석 ; 연관성 분석(1) ; kaggle 데이터에 적용 (0) | 2021.07.18 |
빅데이터 분석하기 ; 데이터 탐색하기 (0) | 2021.07.16 |
댓글