R 5장. 결정트리
R(알) 2017. 9. 8. 19:27
■ 어제까지 배운 R 수업 복습
- R기본수업
- R머신러닝
- 머신러닝을 이해하기 위한 R 기본문법
- knn
- 나이브베이즈
- 결정트리
- 회귀 (단순,다중)
- 신경망
- 서포트벡터 머신
- ...
*머신러닝의 종류3가지중에
1.지도학습:
분류: knn, 나이브 베이즈
회귀:
2.비지도 학습
3.강화학습
P(비아그라|스팸)*P(돈|스팸)*P(식료품|스팸)*P(주소삭제|스팸)*P(스팸)
문제199. 나이가 20대이고 성별이 여자이고 직업이 IT이고 미혼인 여자가 공포영화를 선택할 확률?
P(20대,여자,IT,미혼 | '공포영화' ) =
P(20대 |'공포영화' ) * P(여자 |'공포영화' ) * P(IT |'공포영화' ) * P(미혼|'공포영화' )
이렇게 계산하느게 naive bayes의 전부이다.
nm <- naiveBayes(movie[1:5], movie$장르, laplace=0)
nm
문제200. 4장의 실습예제인 스팸과 햄 메일을 구분하는 실습을 진행해서
아래의 결과를 도출 하시오!
sms csv파일이 잇는데 이파일은 text(메세지)와 라벨(type)로 구성된 데이터가 있다.
라벨은 ham, spam으로 구분되어있는 라벨이다
↓
데이터를 클린징 하는 작업 (데이터 정제 작업)
↓
메일메세지를 단어별로 구분해서 메일별로 단어가 몇번 사용되었는지 빈도수를 표형태로 만든다.
↓
훈련 데이터와 테스트 데이터로 데이터를 나누고 --> 워드 클라우드 그림
↓
훈련 데이터로 나이브 베이즈 모델을 만든다.
↓
테스트 데이터로 위에서 만든 모델로 스팸인지 햄인지를 예측
↓
예측을 잘 했는지 확인한다(crosstable)
## 예제 : 스팸 SMS 메시지 제거 ----
## 2 단계 : 데이터 준비와 살펴보기 ----
# sms 데이터 프레임으로 sms 데이터 읽기
sms_raw <- read.csv("sms_spam.csv", stringsAsFactors = FALSE)
# sms 데이터 구조
str(sms_raw)
# 팩터로 spam/ham으로 변환
sms_raw$type <- factor(sms_raw$type)
# 변수형 확인
str(sms_raw$type)
table(sms_raw$type)
# 텍스트 마이닝(tm) 패키지를 사용하여 말뭉치 생성
install.packages("tm")
library(tm)
sms_corpus <- Corpus(VectorSource(sms_raw$text))
# sms 말뭉치 확인
print(sms_corpus)
inspect(sms_corpus[1:3])
# 로케일을 us(미국)으로 변경해주는 작업을 해줘야 한다.
Sys.setlocale(category = "LC_ALL", locale = "us")
# tm_map() 사용하여 말뭉치 정리 ( 데이터 정제 작업)
corpus_clean <- tm_map(sms_corpus, tolower)
# 설명 : 전부 소문자로 바꾸겠다.
corpus_clean <- tm_map(corpus_clean, removeNumbers)
# 설명 : 숫자를 다 제거하겠다.
corpus_clean <- tm_map(corpus_clean, removeWords, stopwords())
# 설명 : to, and, but, or 를 제거한다.
corpus_clean <- tm_map(corpus_clean, removePunctuation)
# 설명 : 마침표(.) 제거한다.
corpus_clean <- tm_map(corpus_clean, stripWhitespace)
# 설명 : 공백을 제거한다.
# 말뭉치 정리 확인
inspect(sms_corpus[1:3])
inspect(corpus_clean[1:3])
# 문서-용어 희소 매트릭스 생성 ( 책 150페이지의 표와 같은 형태로 변환)
sms_dtm <- DocumentTermMatrix(corpus_clean)
sms_dtm
# 훈련과 테스트 데이터셋 생성
sms_raw_train <- sms_raw[1:4169, ] # 원래 데이터 (훈련)
sms_raw_test <- sms_raw[4170:5559, ] # 원래 데이터 (테스트)
sms_dtm_train <- sms_dtm[1:4169, ] # 정제후의 표현태 변경한 데이터(훈련)
sms_dtm_test <- sms_dtm[4170:5559, ] # 정제후의 표형태 변경한 데이터(테스트)
sms_corpus_train <- corpus_clean[1:4169] # 정제후의 데이터 (훈련)
sms_corpus_test <- corpus_clean[4170:5559] # 정제후의 데이터 (테스트)
# 스팸 비율 확인
prop.table(table(sms_raw_train$type)) #훈련데이터의 스팸 : 80% 햄 : 20%
prop.table(table(sms_raw_test$type)) #테스트데이터의 스팸 : 80% 햄 : 20%
# 단어 클라우드 시각화 (워드 클라우드로 햄의 단어가 무엇이고
# 스팸의 단어가 무엇인지 확인하는 작업)
# R 을 2.15.3(2013-03-01) 로 설치하고 아래 패키지를 install 해야함
install.packages("Rcpp")
install.packages("wordcloud")
library(wordcloud)
wordcloud(sms_corpus_train, min.freq = 30, random.order = FALSE)
# 훈련 데이터를 스팸과 햄으로 구분
spam <- subset(sms_raw_train, type == "spam")
ham <- subset(sms_raw_train, type == "ham")
wordcloud(spam$text, max.words = 40, scale = c(3, 0.5))
wordcloud(ham$text, max.words = 40, scale = c(3, 0.5))
# 빈번한 단어에 대한 속성 지시자
findFreqTerms(sms_dtm_train, 5) # 5개 이상사용된 단어만 다시 추출
sms_dict <- Dictionary(findFreqTerms(sms_dtm_train, 5))
sms_train <- DocumentTermMatrix(sms_corpus_train, list(dictionary = sms_dict))
sms_test <- DocumentTermMatrix(sms_corpus_test, list(dictionary = sms_dict))
# 개수를 팩터로 변환 (라벨의 1과 0으로 변경하고 1과 0을 yes와 no로 변경하는 작업)
convert_counts <- function(x) {
x <- ifelse(x > 0, 1, 0)
x <- factor(x, levels = c(0, 1), labels = c("No", "Yes"))
}
# apply() convert_counts()를 사용한 훈련/테스트 데이터 추출
sms_train <- apply(sms_train, MARGIN = 2, convert_counts)
sms_test <- apply(sms_test, MARGIN = 2, convert_counts)
## 3 단계 : 데이터로 모델 훈련 ----
install.packages("e1071")
library(e1071)
sms_classifier <- naiveBayes(sms_train, sms_raw_train$type)
sms_classifier
## 4 단계 : 모델 성능 평가 ----
sms_test_pred <- predict(sms_classifier, sms_test)
install.packages("gmodels")
library(gmodels)
CrossTable(sms_test_pred, sms_raw_test$type,
prop.chisq = FALSE, prop.t = FALSE, prop.r = FALSE,
dnn = c('predicted', 'actual'))
## 5 단계 : 모델 성능 향상 ----
sms_classifier2 <- naiveBayes(sms_train, sms_raw_train$type, laplace = 1)
sms_test_pred2 <- predict(sms_classifier2, sms_test)
CrossTable(sms_test_pred2, sms_raw_test$type,
prop.chisq = FALSE, prop.t = FALSE, prop.r = FALSE,
dnn = c('predicted', 'actual'))
문제201. mushroom dataset을 활용한 나이브 베이즈 분석을 하시오 !
install.packages('rpart')
library(rpart)
tree1 <- rpart(mushroom[,1] ~. , data= mushroom[,-1] , control=rpart.control(minsplit=2) )
plot(tree1, compress = T , uniform = T , margin=0.1)
text(tree1, use.n = T , col = "blue")
□ 5장 . 결정트리 (p164)
- 머신러닝의 종류 3가지
1.지도학습 :
- 분류 : knn, naivebayes, decision tree
- 회귀 : 회귀(6장)
2.비지도학습
3.강화학습
■ 5장. 목차
1.결정트리란?
2.엔트로피와 정보획득량
3.결정트리 실습1(은행의 대출 위험 기업 확인)
4.결정트리 실습2(배드민턴 데이터와 자동차 평가)
■ 1.결정트리란?
학습 데이터를 가지고 아래와 같은 트리구조의 학습 모델을 만들어서
새로운 테스트 데이터에 대한 라벨을 예측하는 알고리즘
그림 : 5장. 결정트리 이미지 첫번째
■ 결정트리가 사용되는 곳?
1.지원자에게 거절된 이유를 명시해야하는 신용등급 모델
예 : 은행 대출, 회사 인사 채용
2.변심이 심한 고객이나 고객 만족은 관리하는 부서와 광고부서에서 공유되어야 하는 시장조사
예: 스킨샵 쿠폰반응
3.연구 측정, 증상, 매우 드문 질병 진행 과정을 바탕으로한 질병 관찰
예: 지방간
■ 결정트리의 장단점
- 장점: 1.모든 문제에 적합한 분류기
2.결측치, factor, number를 잘 처리할 수 있다.
3.가장 중요한 속성만 사용
4.다른 복잡한 모델보다 높은 효율
- 단점: 1.모델이 쉽게 오버피팅 되거나 언더피팅이 됨
2.훈련데이터에 약간의 변경이 잇어도 결정트리에 큰 변화를 준다.
■ 최적의 구분 선택 (p170)
결정트리를 만들때 가장 먼제 해야할 것은 컬럼(변수)들중 가장 중요한
컬럼(변수)를 찾는것 이다. 중요한 변수는 정보획득량이 가장 높은 변수를
말한다.
↓
정보획득량이 높은 변수를 알아내려면 뭘 먼저 알아야 하는가?
↓
엔트로피(entrophy) 함수
■ 엔트로피(entrophy) 함수(불확실성)
"데이터의 불확실성이 얼마나 되는가 ? "
이 값이 커지면 커질수록 불확실성이 커진다
예: 1. 확률(p) ====> x 축
2.엔트로피(불확실성) ----> y 축 (공식 : -p * log(p) )
> -0.60 * log2(0.60) - 0.40 * log2(0.40)
[1] 0.9709506
> curve(-x * log2(x) - (1 - x) * log2(1 - x), col="red", xlab = "x", ylab = "Entropy", lwd=4)
설명 : 부자거나(x축 1) 부자가 아니거나 (x축 0)이면
불확실성 (엔트로피) y 축이 0이다.
- 결정트리를 구하려면 ?
어떤 컬럼을 가장 먼저 물어볼것인가를 결정해야한ㄷ
정보획득량이 높은 컬럼을 가장 먼저 물어보게해야한다.
정보획득량 = 분할전 엔트로피 - 분할후 엔트로피
문제202. 아래의 데이터 프레임을 만드시오 !
x <- data.frame(
cust_name=c('SCOTT','SMITH','ALLEN','JONES','WARD'), card_yn=c('Y','Y','N','Y','Y'), review_yn=c('Y','Y','N','N','Y'), before_buy_yn=c('Y','Y','Y','N','Y'), buy_yn=c('Y','Y','N','Y','Y') )
|
문제203. 위의 구매 데이터의 정보 획득량을 구하시오
install.packages("FSelector")
library(FSelector)
weights<- information.gain(buy_yn~.,x)
print(weights )
문제204. skin.csv를 내려받고 R로 로드한 후에 skin데이터셋 변수들의
정보획득량을 구하시오 ~
skin <- read.csv("skin.csv",header = T)
weights<- information.gain(cupon_react~.,skin )
print(weights )
문제205. 위의 정보를 가지고 결정트리를 그리시오
install.packages('rpart')
library(rpart)
tree1 <- rpart(cupon_react~. , data= skin, control=rpart.control(minsplit=2) )
plot(tree1, compress = T , uniform = T , margin=0.1)
text(tree1, use.n = T , col = "blue")
문제206. 지방간 데이터의 정보획득량을 구하시오
fatliver<- read.csv("fatliver2.csv",header =T)
weights<- information.gain(FATLIVER~.,fatliver)
print(weights)
tree1 <- rpart(FATLIVER ~. , data= fatliver , control=rpart.control(minsplit=2) )
plot(tree1, compress = T , uniform = T , margin=0.1)
text(tree1, use.n = T , col = "blue")
##### 5장 : 결정 트리와 규칙(Decision tree and Rules)을 사용한 분류 -------------------
#### Part 1: 결정 트리 -------------------
## 결정 트리 이해 ----
# 두 부분 분류의 엔트로피 계산
-0.60 * log2(0.60) - 0.40 * log2(0.40)
curve(-x * log2(x) - (1 - x) * log2(1 - x),
col="red", xlab = "x", ylab = "Entropy", lwd=4)
## 예제 : 위험 은행 대출 식별 ----
## 2 단계 : 데이터 준비와 살펴보기 ----
credit <- read.csv("credit.csv")
str(credit)
# 지원자의 두 특성 확인
table(credit$checking_balance)
table(credit$savings_balance)
# 대출의 두 특성 확인
summary(credit$months_loan_duration)
summary(credit$amount)
# 분류 변수 확인
table(credit$default)
# 훈련과 테스트 데이터에 대한 무작위 샘플 생성
# 예제와 같은 무작위 수열을 사용하기 위해 set.seed 사용
set.seed(12345)
credit_rand <- credit[order(runif(1000)), ]
# credit과 credit_rand 데이터 프레임간 비교
summary(credit$amount)
summary(credit_rand$amount)
head(credit$amount)
head(credit_rand$amount)
# 데이터 프레임 나누기
credit_train <- credit_rand[1:900, ]
credit_test <- credit_rand[901:1000, ]
# 분류 변수의 비율 확인
prop.table(table(credit_train$default))
prop.table(table(credit_test$default))
## 3 단계 : 데이터로 모델 훈련 ----
# 가장 단순한 결정 트리 생성
library(C50)
credit_model <- C5.0(credit_train[-17], credit_train$default)
# 트리 정보 출력
credit_model
# 트리에 대한 상세 정보 출력
summary(credit_model)
## 4 단계 : 모델 성능 평가 ----
# 테스트 데이터에 대한 예측 팩터 벡터 생성
credit_pred <- predict(credit_model, credit_test)
# 예측과 실제 분류의 교차표
library(gmodels)
CrossTable(credit_test$default, credit_pred,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
dnn = c('actual default', 'predicted default'))
## 5 단계 : 모델 성능 향상 ----
## 결정 트리의 정확성 부스팅
# 10 trials과 부스트드 결정 트리
credit_boost10 <- C5.0(credit_train[-17], credit_train$default,
trials = 10)
credit_boost10
summary(credit_boost10)
credit_boost_pred10 <- predict(credit_boost10, credit_test)
CrossTable(credit_test$default, credit_boost_pred10,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
dnn = c('actual default', 'predicted default'))
# 100 trials과 부스트드 결정 트리
credit_boost100 <- C5.0(credit_train[-17], credit_train$default,
trials = 100)
credit_boost_pred100 <- predict(credit_boost100, credit_test)
CrossTable(credit_test$default, credit_boost_pred100,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
dnn = c('actual default', 'predicted default'))
## 가중치 매트릭스 생성
# 가중 비용 매트릭스
error_cost <- matrix(c(0, 1, 4, 0), nrow = 2)
error_cost
# 트리에 비용 매트릭스 적용
credit_cost <- C5.0(credit_train[-17], credit_train$default,
costs = error_cost)
credit_cost_pred <- predict(credit_cost, credit_test)
CrossTable(credit_test$default, credit_cost_pred,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
dnn = c('actual default', 'predicted default'))
#### Part 2: 규칙 학습기 -------------------
> table(credit$checking_balance)
< 0 DM > 200 DM 1 - 200 DM unknown
274 63 269 394
> table(credit$savings_balance)
< 100 DM > 1000 DM 100 - 500 DM 500 - 1000 DM unknown
603 48 103 63 183
설명 : 대출 신청사의 에금계좌와 적금계좌의 예금정도를 확인해서 예금액이 많을 수록 대출이 안전하다고 가정할 수 있다.
> summary(credit$months_loan_duration)
Min. 1st Qu. Median Mean 3rd Qu. Max.
4.0 12.0 18.0 20.9 24.0 72.0
설명 : 대출 기간이 짧게는 4달에서 기게는 72개월까지 분포가 됨
> summary(credit$amount)
Min. 1st Qu. Median Mean 3rd Qu. Max.
250 1366 2320 3271 3972 18420
설명 : 대출 금액은 독일돈으로 205 마르크 ~ 184020 마르크
100 마르크가 6~ 7만원 정도 한다
table(credit$default)
#분류 변수 확인 ( default 가 라벨인데 대출금 상환했는지 상환안했는지 )
table(credit$default)
no yes
700 300
설명 : 대출자가 협의한 반납기간 안에 대출금을 반납했는지 안했는지 나타냄.
채무이행자가 300명 , 채무불이행자가 700명
set.seed(12345)
credit_rand <- credit[order(runif(1000)), ]
runif(10)
order(runif(1000))
설명 : runif(10)이라고 하면 0과 1사이의 10개의 숫자가 랜덤으로 출력된다.
order(runif(1000)) 라고 하면 무작위 숫자가 1000개가 출력된다.
credit[order(runif(1000)),] 하면 행을 무작위로 섞어서 결과를 출력해준다.
서머리는 같지만 잘 섞였음
#분류 변수의 비율 확인
no yes
0.7022222 0.2977778
> prop.table(table(credit_test$default))
no yes
0.68 0.32
위의 데이터에 결정트리 기계학습ㅇ르 하려는 목적?
지금 채무 불이행자가 70% 가 되는데 이 채무 불이행자의 수치를 낮추는것이 (30%로 떨어짐) 이 기계학습의 목표이다.
## 3단계 : 데이터로 모델 훈련
# 가장 단수한 결정 트리 생성
install.packages("C50")
library(C50)
credit_model <- C5.0(credit_train[-17], credit_train$default)
summary(credit_model)
Evaluation on training data (900 cases):
Decision Tree
----------------
Size Errors
66 125(13.9%) <<
(a) (b) <-classified as
---- ----
609 23 (a): class no
102 166 (b): class yes
설명: 13.9% 의 오차로 125개를 잘못 분류했다.
23개는 실제값은 no이지만 yes로 잘못 분류했고
102개는 실제값은 yes이지만 no로 잘못분류했다.
credit_pred <- predict(credit_model, credit_test)
cbind(credit_test, credit_pred)
CrossTable(credit_test$default, credit_pred,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
dnn = c('actual default', 'predicted default'))
| predicted default
actual default | no | yes | Row Total |
---------------|-----------|-----------|-----------|
no | 57 | 11 | 68 |
| 0.570 | 0.110 | |
---------------|-----------|-----------|-----------|
yes | 16 | 16 | 32 |
| 0.160 | 0.160 | |
---------------|-----------|-----------|-----------|
Column Total | 73 | 27 | 100 |
---------------|-----------|-----------|-----------|
57 + 16 = 73, 11 + 16 = 27
73% 는 정확히 예측
27% 는 정확히 예측하지 못함
## 5 단계 : 모델 성능 향상 ----
## 결정 트리의 정확성 부스팅
# 10 trials과 부스트드 결정 트리
credit_boost10 <- C5.0(credit_train[-17], credit_train$default,
trials = 10)
credit_boost10
summary(credit_boost10)
Evaluation on training data (900 cases):
Trial Decision Tree
----- ----------------
Size Errors
0 66 125(13.9%)
1 40 205(22.8%)
2 46 196(21.8%)
3 45 193(21.4%)
4 68 163(18.1%)
5 62 175(19.4%)
6 56 186(20.7%)
7 62 188(20.9%)
8 66 156(17.3%)
9 49 200(22.2%)
boost 31( 3.4%) <<
(a) (b) <-classified as
---- ----
626 6 (a): class no
25 243 (b): class yes
credit_boost_pred10 <- predict(credit_boost10, credit_test)
CrossTable(credit_test$default, credit_boost_pred10,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
dnn = c('actual default', 'predicted default'))
# 100 trials과 부스트드 결정 트리
credit_boost100 <- C5.0(credit_train[-17], credit_train$default,
trials = 100)
credit_boost_pred100 <- predict(credit_boost100, credit_test)
CrossTable(credit_test$default, credit_boost_pred100,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
dnn = c('actual default', 'predicted default'))
| predicted default
actual default | no | yes | Row Total |
---------------|-----------|-----------|-----------|
no | 61 | 7 | 68 |
| 0.610 | 0.070 | |
---------------|-----------|-----------|-----------|
yes | 15 | 17 | 32 |
| 0.150 | 0.170 | |
---------------|-----------|-----------|-----------|
Column Total | 76 | 24 | 100 |
---------------|-----------|-----------|-----------|
## 가중치 매트릭스 생성
# 가중 비용 매트릭스
error_cost <- matrix(c(0, 1, 4, 0), nrow = 2)
error_cost
# 트리에 비용 매트릭스 적용
credit_cost <- C5.0(credit_train[-17], credit_train$default,
costs = error_cost)
credit_cost_pred <- predict(credit_cost, credit_test)
CrossTable(credit_test$default, credit_cost_pred,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
dnn = c('actual default', 'predicted default'))
#### Part 2: 규칙 학습기 -------------------
badminton <- read.csv("badminton.csv",header=T)
install.packages("C50")
library(C50)
x <- badminton [1:4]
y <- badminton [,5]
model <- C5.0(x,y)
model
summary(model)
plot(model)
p <- predict(model,x,type="class")
sum(p==y)/length(p)
문제207. **이가 첫번째로 발표한 차 평가에 관련한 결정트리 실습 코드에
예측하는 predict을 추가해서 실제 라벨과 예측 라벨의
차이를 한눈에 보여주는 CrossTable결과를 출력하시오
car_evaluation <- read.csv("car_evaluation.csv",head=T)
head(car_evaluation)
install.packages("C50")
library(C50)
x <- car_evaluation[,2:7]
y <- car_evaluation[,1] #기준이 되는 컬럼
model <- C50::C5.0(x,y)
model
summary(model)
plot(model)
또는
x <- car_evaluation[,2:7]
build_tree <- C5.0(car_evaluation$buyingprice~.,data=x)
summary(build_tree)
plot(build_tree)
p <- predict(model,x,type="class")
sum(p==y)/length(p)
CrossTable(car_evaluation[,1] ,p)
> CrossTable(car_evaluation[,1] ,p)
Error in CrossTable(car_evaluation[, 1], p) :
함수 "CrossTable"를 찾을 수 없습니다
> library(gmodels)
경고메시지(들):
패키지 ‘gmodels’는 R 버전 3.4.1에서 작성되었습니다
> CrossTable(car_evaluation[,1] ,p)
Cell Contents
|-------------------------|
| N |
| Chi-square contribution |
| N / Row Total |
| N / Col Total |
| N / Table Total |
|-------------------------|
Total Observations in Table: 1728
| p
car_evaluation[, 1] | high | low | med | vhigh | Row Total |
--------------------|-----------|-----------|-----------|-----------|-----------|
high | 46 | 13 | 49 | 324 | 432 |
| 16.480 | 29.484 | 0.146 | 1.528 | |
| 0.106 | 0.030 | 0.113 | 0.750 | 0.250 |
| 0.451 | 0.062 | 0.237 | 0.268 | |
| 0.027 | 0.008 | 0.028 | 0.188 | |
--------------------|-----------|-----------|-----------|-----------|-----------|
low | 0 | 121 | 53 | 258 | 432 |
| 25.500 | 90.461 | 0.030 | 6.546 | |
| 0.000 | 0.280 | 0.123 | 0.597 | 0.250 |
| 0.000 | 0.579 | 0.256 | 0.213 | |
| 0.000 | 0.070 | 0.031 | 0.149 | |
--------------------|-----------|-----------|-----------|-----------|-----------|
med | 10 | 75 | 79 | 268 | 432 |
| 9.422 | 9.906 | 14.349 | 3.935 | |
| 0.023 | 0.174 | 0.183 | 0.620 | 0.250 |
| 0.098 | 0.359 | 0.382 | 0.221 | |
| 0.006 | 0.043 | 0.046 | 0.155 | |
--------------------|-----------|-----------|-----------|-----------|-----------|
vhigh | 46 | 0 | 26 | 360 | 432 |
| 16.480 | 52.250 | 12.813 | 10.930 | |
| 0.106 | 0.000 | 0.060 | 0.833 | 0.250 |
| 0.451 | 0.000 | 0.126 | 0.298 | |
| 0.027 | 0.000 | 0.015 | 0.208 | |
--------------------|-----------|-----------|-----------|-----------|-----------|
Column Total | 102 | 209 | 207 | 1210 | 1728 |
| 0.059 | 0.121 | 0.120 | 0.700 | |
--------------------|-----------|-----------|-----------|-----------|-----------|
내일 : 6장. 회귀분석
7장 .신경망 (앞부분 까지)
스킨데이터 트리 그리기 !
'R(알) ' 카테고리의 다른 글
R 9장. k-means 알고리즘 (0) | 2017.09.09 |
---|---|
R 7장 신경망과 서포트 벡터 머신 (0) | 2017.09.09 |
R 4장. 나이브 베이즈의 이해활용한 기계학습4 (0) | 2017.09.08 |
R 3장. knn (최근접 이웃을 사용한 분류의 이해) (0) | 2017.09.08 |
R 1장 R기본문법 (0) | 2017.09.08 |