반응형

인공지능:

사람 처럼 해동하도록 만들어진 장치 (또는 소프트웨어)

 

머신러닝 :

명시적인 프로그래밍 없이 컴퓨터가 학습하는 능력을 갖추게 하는 연구 분야.

Arthur Samuel, 1959

 

 

빅데이터 :

엄청  나게 많은 양의 데이터를 다루는 것

 

딥러닝 :

머신러닝에 포함된것이다.

수많은 기법중의 하나이다.

뉴런 층을 사용해서 

 

지도학습 Supervised Learning :

"답" 이 있고 이 답을 맞추는 게 학습의 목적

 

분류 classification :

여러가지 옵션에서 고르는 것 

 

회귀 regression :

연속적인 수에서 고르고 몇가지 옵션에서 고르지는 않다.

 

비지도 학습 Unsupervised Learning

"답" 이 없고 이 답을 맞추는 게 학습의 목적 

묶으는 기준이 프로그램이 한다.

 

k최근접 이웃 알고리즘

k- Nearest Neighbors Algorithm : KNN

가장 가까운 이웃 데이터 K개를 찾음

 

 

 

 

참조 :

처음 배우는 인공지능

핸즈온 머신러닝 2판

반응형
반응형

통계적 분석 / 머신러닝 
통계분석
• 기초통계 • 가설과 검정 
1. 기초통계 
1. 통계학과 데이터 
정의->데이터를 통하여 분석하고 분석결과를 통해 정보를 제공하는 분야
목적-> 통계학을 시작함에 앞서 통계적 목적에 따른 통계학의 분류와 분석에 사용되는  
데이터의 구성 및 형태를 파악하기 위함 
Focus! ->1. 통계학은 통계적 목적에 따라 어떻게 구분되는가 ?   
         ->2. 데이터의 구성은 어떻게 정의하는가 ?  
         ->3. 데이터의 형태는 어떻게 구분되는가 ? 
1. 통계학은 통계적 목적에 따라 어떻게 구분되는가 ? 
->
기술 통계학 
방대한 데이터를 그래프나 표 또는 몇 개의 숫자로 요약하여 데이터의 
전반적인 내용을 쉽고 빠르게 파악 
가능한 방법을 다루는 통계학 
추측 통계학
관심 대상의 일부를 추출하고 
추출된 대상을 통해 수집된 데이터를 
근거로 하 여 관심 대상 전체의 
특성을 추측하고 검정하는 방법을 
다루는 통계학 
기술 통계학 descriptive statistics

 

히스토그램 ,원 그림 ,꺾은선 그림 ,상자 그림 ,최솟값, 사분위수, 평균, 최댓값 ,줄기-잎 그림 
줄기-잎 그림
1,2,6
11,12,16

 

%문제가 크다.
선거출구조사 
Focus 1 
Ⅱ. 통계적 초급 이론  
추측통계학
선거출구조사
전체 유권자들을 대상으로 투표 내용을 조사하는 것이 목적인 선거 출구조사에서  
출구 조사원들이 유권자 전체에게 설문을 하지 않는다.  
전체 유권자들을 설문하기에는 시간도 많이 소요되지만 이에 따른 비용 또한 많이  
들기 때문에 현실적으로 불가능하기 때문이다. 
이와 같이 관심 대상의 일부를 통해 관심 대상 전체의 결과를 추측하는 것을 의미함
변수 (variable) 
데이터를 저장한 이름으로 데이터의 속성을 표현하며 
NO(데이터의 넘버링), SEX(성별), AGE(나이),  
SCORE(점수)와 같은 것을 의미함 

수집된 변수에 따라 분석의 범위가 달라질 수 있다 ? 
→ 반별로 성별에 따른 영어점수를 비교하고자 하는데  
    반 변수가 없는 경우 반별 분석 불가능 

개체 (observation) 
서로 다른 데이터를 구분해주는 값으로 중복되지 않는  
값이며, NO변수에 입력된 데이터의 넘버링 값과 같은  
고유한 값을 의미함 
수집된 개체 수에 따라 분석의 범위가 달라질 수 있다 ? 
→ 성별 비교를 하고자 하는데 수집된 데이터가 남자 5명
    여자 100명일 경우 성별 비교 분석 불가능

 

관측값 (observed value) 
변수에 대응되는 값으로 SEX변수에 대한 M, W,  
AGE변수에 대한 23, 25, ∙∙∙, 25 등과 같은 값을 의미
함  
(개체 값도 관측값이 될 수 있음) 

수집된 관측값 입력 상태에 따라 결과가 달라질 수 있다 
→ 점수의 평균을 파악하고자 하는데 응답자의 70%가  
    응답하지 않은 경우 결과가 왜곡됨 (Not Available)  

 

양적 데이터 
- 숫자로 표현된 데이터 (= 수치형 데이터) 
- 숫자나 그래프로 요약 가능한 데이터
이산형 데이터 
연속형 데이터 
질적 데이터  
- 속성을 나타낸 데이터 (= 범주형 데이터) 
- 표나 그래프로 정리 가능한 데이터
명목형 데이터 
순서형 데이터 
양적 데이터를 가지고 표로 정리할 경우  전달력이 떨어질 수 있다 ? 
질적 데이터를 가지고 숫자로 요약할 경우  잘못된 결과가 전달 될 수 있다 ? 
2. 데이터 요약 
정의 
데이터의 전반적인 내용을 쉽고 빠르게 파악할 수 있도록 하는 방법 
목적 
데이터에 내재된 정보의 특성을 왜곡하지 않고 정확하게 파악하기 위해 왜곡된 사례와
주의해야하는 데이터를 살펴보고 올바른 데이터 요약 및 표현 방법을 파악하기 위함

 

Focus! 
1. 데이터가 나타내는 의미가 왜곡된 경우가 있는가 ?   
2. 데이터의 왜곡됨을 줄이기 위해 살펴봐야 하는 데이터는 어떤 것인가 ?  
3. 데이터를 숫자로 요약하고자 할 때 어떤 방법이 있는가 ? 
4. 데이터를 시각적으로 표현하고자 할 때 어떤 방법이 있는가 ? 

 

남 녀 1,2 인데 3이 있으면 오류값이다.
극단값(이상치)->  boxplot
결측치 ->is.na
범위->range
왜도 -> 기울 어지는 지
첨도 -> 뽀족하다.
평균 -> 극단치 값의 영향을 받는다.
중앙값 ->
 - 데이터 크기 순으로 정렬했을 때 중앙에     위치하는 값   
- 극단값들의 영향을 적게 받음 
 최빈값 
- 데이터 중 빈도가 가장 많은 값  - 극단값에 영향을 받지 않음 
분산 
평균을 중심으로 데이터의 흩어진 정도를      가늠하는 값 (단위 변동 o , 제곱) 
표준편차
분산의 제곱근 (단위 변동 x) 
데이터에서 평균을 빼는 것 ->편차
편차 다 더하면 0이 된다.
절대값 으로 하던가 ? 아니면 편차를 제곱해서 해주는 것 
제곱하면 루트 해진다.
제곱하면 다루기 힘들어서 루트를 한다.
 분산 
파란것이 균일하다.고르다. 0으로 점수대에 많은 것들이 모여있다.

 

상대도수 ->확률
원 그림  ->4~5정도의 쪼가리가 있어야 한다. 5개 이상 되면 마지막 부분은 기타로 해야 한다. 12시부터 시작하게 오른쪽 방향으로 큰것 부터 
정규분
데이터의 분포 형태가 평균을 기준으로 대칭에 가깝게 따를 때 일반적으로 정규분 포라 칭함 
(중심극한정리에 의하여 데이터가 충분히 클 경우 데이터의 분포는 정규분포를 따름) 
표준화 
평균을 0으로, 표준편차를 1로 만드는 것으로 비교하고자 하는 대상이 다른 분포를 가 지거나 다른 단위를 가질 때 상대적인 크기로 비교하기 위해 사용 
표준화는 표준정규분표로 만든다.
4일차 -> 45페이지
관측치 - 평균 / 표준편차(시그마) = 표준화 값 
표준화는 단위가 사라진다. 숫자만 남는다.
정규화는 1과 0 사이에 남아서 하는 것
가장 큰 값은 1 가장 작은 값은 0이다.
단점은 : 이상치가 1로 잡혀서 특수한 데이터는 정규화 하기 힘들다.
분산이 크면 표준편차가 크다.
48페이지 하나 숫자가 어디에 여도 결과는 같다.

 

회귀regression->예측해서 하는것 
실제치와 예측치의 차이는 오차이다.
하지만 아마 예측이기때문에 잔차이라고 한다.
부모가 키가 크다 그래서 자식이 키가 얼마인지 예측 하는가 ?->
평균족으로 모여드는 경향이 있다.
설명 변수(Explanatory Variable) 
종속 변수에 선행하며, 종속 변수에 영향을 줄 것으로 기대되거나 종속 변수의 변화를 예측(predict)핛 수 있다고 여겨지는 변수  
한 마디로 말하면 원인으로 갂주되는 변수 
독립 변수 (independent variable), 예측 변수 (predictor variable), 입력 변수 (input variable), 특징 (feature) 등 여러 이름으로 부른다. 
x = 독립변수 = 열
설명 변수 
예측 변수 
특성(키 등 )

반응 변수

 

회귀분석은 선형회귀분석은 가정이 필요하다. 직선을 그을 수 있는 상황이 되여야 한다.
회귀분석의 기본가정
두 변수의 관계는 선형이다.(선형성
오차항의 확률 분포는 정규분포를 이루고 있다.(정규성)
등분산성
오차항의 평균(기대값)은 0이다.
오차항들끼리는 독립이다. 어떤 패턴을 나타내면 안 된다.(독립성)
회귀는 인과관계를 찾는 것이다.

회귀 분석은 직선을 찾는 것이다.
회귀모형
회귀분석의 목적: 종속변수 Y와 설명변수 X 사이의 관계를 선형으로 가정하고 이를 가장 잘 설명하는 회귀 계수(coefficients)를 추정하는 것 
3가지의 직선이 있다.
최소제곱법(OLS; Ordinary Least Squares) 
y hat(예측)과 y 의 차이를 최소화(정확하는 y축 거리의 곱)
차이를 구한다.
제곱해서 다 더해주면 된다.
수가 작으면 오차가 적다는 의미한다.
수학에서 거리는 점과 직선사이의 거리이다. edit distance
점에서 직선을 걸때 거리가 짧은 것이다.
y가 예측한것과 y의 실제값이 차이가 오차이다.

회귀는 최소제곱법으로 찾는다.
점들이 직선을 가장 설명 잘 해준다.
제곱을 하는 것은 정사각형을 그렸다.
제곱오차를 사용하면 오차가 커질수록 비용이 엄청사게 커진다.
이상치는  정사각형을 크게 그려진다. 최소제곱법은 이상치를 빼고 해야만 정확도가 높아진다.

 

library(dplyr)
library(ggplot2)

#-------daimonds
names(diamonds)
#carat, price
lm_dia <- lm(price ~ carat, data = diamonds)
lm_dia
plot(diamonds$carat, diamonds$price)
abline(lm_dia, col= "blue",lwd= 2)
plot(diamonds$price ~ diamonds$carat)
plot(price ~ carat, diamonds)

lm_dia$coefficients
abline(lm_dia , col = "blue", lwd = 2)

#------------cars
cars
head(cars)
str(cars)
plot(cars)
#선형회귀분석 
#cars speed 
#     dist
#lm( y ~ x)
#lm(cars$dist ~ cars$speed )
lm_car <- lm(dist ~ speed, data = cars )
lm_car
abline(lm_car , col="red")#이 데이터를 선을 거으기
abline(lm_car , col="red",lwd = 2)
#y = a+bx
ggplot(cars, aes(x=speed, y = dist))+geom_point()+geom_smooth(method = "lm")
#파난색 라인 주위에 오차가 있다. 벗어났다. 
#많이 흩어지면 정확도가 별로 높지 않다.
ggplot(cars, aes(x=speed, y = dist))+geom_point()+geom_smooth(method = "lm")+theme_dark()#배경 

lm_car
#선형 예측을 하는데 크다.
#Call:
#  lm(formula = dist ~ speed, data = cars)

#Coefficients:
#  (Intercept)        speed  
#-17.579->distance        3.932->기울기

cars$speed
str(cars)
cars$speed
predict(lm_car, data.frame(speed = 30))#예측 100.3932

lm_car 
names(lm_car)

y = -17.579 + 3.392 * 30
y
  100.3932- 84.181
predict(lm_car, data.frame(speed = c(30,35,40)))#예측 100.3932
summary(lm_car)
lm_car$coefficients
a <- lm_car
a$coefficients
names(a)
#[1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values" "assign"       
#[7] "qr"            "df.residual"   "xlevels"       "call"          "terms"         "model"   
a$residuals#잔차 오차
a$effects
a$rank
a$fitted.values
a$assign
a$qr
a$df.residual#잔차이다. 정확하지 않아서 오차라고 할 수 없다.
a$xlevels
a$call
a$terms
a$model

predict()
#이쪽에 많는 것을 하고 있다.
#predict.glm, predict.lm, predict.loess, predict.nls, predict.poly, predict.princomp, predict.smooth.spline.
#원래는 지정해야 하는데 lm을 사용해서 했기 때문에 
#예측해서 알아서 해준다.plot과 같다.
#predict.lm
## S3 method for class 'lm'
##predict(object, newdata, se.fit = FALSE, scale = NULL, df = Inf,
##        interval = c("none", "confidence", "prediction"),
##        level = 0.95, type = c("response", "terms"),
##        terms = NULL, na.action = na.pass,
##        pred.var = res.var/weights, weights = 1, ...)
#object는 원래것 해야 하고 
#newdata 새로운 data.frame()으로 해야 한다.
c <- data.frame(speed = c(122))
predict(lm_car, newdata = c)

new <- data.frame(speed = c(122))
predict(lm_car, newdata = new , interval = "confidence")


new <- data.frame(speed = c(122,125,130,133))
predict(lm_car, newdata = new , interval = "confidence")

new <- data.frame(speed = c(122))
predict(lm_car, newdata = new , interval = "confidence")

new <- data.frame(speed = c(122))
predict(lm_car, newdata = new , interval = "confidence", level = 0.9)#위에 것에 비해서 폭이 더 넓어졌다.


fitted.values

f1 <- function(x){
  y = -17.579095+3.932409
  return(y)
}

상간관계

e->숫자 10이다.
1.49e-12 10의 지수로 -12제곱 
1.49* (10의 -12승) 아주 작은 숫자이다.


귀무가설을 기각할 활귤->영가설->제로 가설
귀무(guiwu) -> 
예:한국인의 평균키는 170이다. 정확하는지 판단한다. 170이 맞다고 하는 편하고 170이 아닌 편이라고 한다.
2가지 가설이 있다.
귀무가설 한쪽이 , 다른 한쪽이 대립가설이라고 한다.
어느 한쪽이 정해지면 170을 귀무가설이라고 한다. 
100명중 95명이 신뢰구간에서 뽑혀졌다.  
유의수준은 5%정도이다.
귀무가설은 95%이다.
중간에 겹치는 부분이 있다. 왼쪽에는 점은 왼쪽이고 
오른쪽에 있는 점은 오른쪽의 집단이라고 한다.
5%보다 적으면 오른쪽으로 정해진다.
유의수준 영역에 해당하는 경우가 대립가설을 충족하는 경우를 의미

0에 가까울수록 중요핚(통계적으로 유의미핚) 변수임을 의미핚다. 
R-제곱 값: 직선이 데이터를 설명하는 정도, 상관계수와 관렦된 값 
R-제곱 값의 정확핚 의미는? 그리고 구하는 방법은? 

모형의 적합도 평가 

오차가 적어야 잘 설명했다. 
평균이 옆으로 직선
회귀선을 그린다.
 

편차 -산술 평균, 각각의 값

상간관계가 0이면 아무관계가 없엇 1.49e-12를 하는 것은 대립관계를 설명 하는 것이다.

오차 = 모집단의 회귀식에서 예측된 값 - 실제 관측값

잔차 = 표본집단의 회귀식에서 예측된 값 - 실제 관측값 

오차는 예측하기 위하여 추정된 값과 실제값의 차이 ,즉 예측값이 정확하지 못한 정도->완전히 벗어난 것
잔차: 평균이 아니라 회귀식 등으로 추정된 값과의 차이 ,즉 추정된 값이 설명할 수 없어서 
아직도 남아 있는 편차 ,잔차는 편차의 일부분

---------------------------오후
베이지안 bayesian 
빈도확률->동전의 던져서 몇번 나오는지 ?->시행횟수를 반복하여 빈도수를 측정하게 되면 ,우리에게 익숙한 빈도 확률을 계산할 수 있따.
베이지안 확률->화산이 폭발할 확률을 빈도 확률로 계산할 수 있을가 ?세상에는 반복할 수 없는 사건이 무수히 많고 , '빈도 확률'의 개념을 
그러한 사건에 적용할 수 없다.일어나지 않은 일에 대한 확률을 불확실성의 개념. 즉 ,사건과 관련 있는 어려 확률을 이용해 새롭게 일어날 
사건을 추정하는 것이 베이지안 확률이다.
사전확률 p(A)  과 우도확률 p(B|A)를 안다면 사후확률 p(A|B)를 알 수있다는 것이다.

1) 18세기 영국의 수학자 토마스 베이즈(Thomas Bayes)가 도입.
2) 사전확률(Prior Probability)  : 추가적 정보가 주워지기전의 정보
3) 사후확률(Posterior Probability) : 추가적 정보가 주워진 상태에서의 사전확률 조건부확률과 같음
4) 사전확륙과 사후확률을 알고 있다면 우도확률(Likehood Probability)을 구할 수 있다.

 

https://brunch.co.kr/@chris-song/59

 

베이지안 추론 - 1편

설령 믿어지지 않는다고 해도, 가능성을 제외하고 남는 게 진짜 범인이다. | 셜록 홈즈의 베이지안 추론 베이지안 추론에 적합한 짤방으로 베이지안 추론에 대한 이야기를 시작하겠습니다. 명탐

brunch.co.kr

새로운 확률을 사전활류 가지고 업데이터한다.
예: 100명중에 남자50명 ,여자 50명 , 
50명중 긴머리 여자 25명  짧은 머리 여자 25명
50명중 짧은 머리 남자 48명 긴머리 남자 2명



사전확률:  현재상황에서 판단할 수  있는 것
사후확률:  새로운 증거에서 알아내고 계산하는 방법
사전확률에 따라 사후활률이 달라진다.

navi 사건에 따라 증거가 많이 나온다. 새로운 증거들이 독립적인지 확신을 못한다. 독립적이야만 이 베이직안 에 맞다.
독립적인지 확인못한다.
naive하게 
나이브 개발사건마다 독립적이지 않는 것을 확인 시켰다. 잘 맞는다.
메일에서 스팸의 반대 햄
비아그라는 사전에 이미 알고 있는 것 
업데이트 하면서 정상메일인지 스팸메일인지 한다.

http://rpubs.com/qa6273/HW4_1

 

RPubs - RSanford HW4 - #1

 

rpubs.com:443

#-------------------베이지안
library(readr)
sms_raw = read.csv("sms_spam.csv",stringsAsFactors = F)
#sms_raw = read_csv("sms_spam.csv")
View(sms_raw)
str(sms_raw)
head(sms_raw)

sms_raw$type <- factor(sms_raw$type)#범주형으로 바꾸기 
str(sms_raw)
table(sms_raw$type)#빈도수 확인
write.csv(sms_raw,"sms_raw.csv")

install.packages("tm")#build a corpus using the  text mining(tm)package
library(tm)

maintainer("tm")#만들은 분
citation("tm")# 정보 
?tm
vignette("tm")#간단한 예제를 보여준다.
#Corpus 말뭉치다.
#VCorpus( volatile Corpus)->메모리 휘발성 말뭉치
#PCorpus( permant COrpus) 영구저장 말뭉치
sms_corpus <- VCorpus(VectorSource(sms_raw$text))#뭉친다.
sms_corpus
#VCorpus : 문서를 Corpus class로 만들어 주는 함수로써 결과는 메모리에 저장되어 현재 그덩 중인 R object에만 영향을 끼침 
#PCorpus : VCorpus와 달리 문서를 Corpus로 만들어 database화 해주는 함수

#examine the sms corpus
print(sms_corpus)#구조 찍어보기 VCorpus되여졌음 메모리에 올라가서 나름 구조화 되여있다.
inspect(sms_corpus[1:2])#요약해 보겠다.

#check corpus message
as.character(sms_corpus[[1]])#cha로 바꾼다.
lapply(sms_corpus[1:2], as.character)#모든데 열에 다 적용해라 

#for (i in 1:length(sms_corpus)){
#  Encoding(corpus[[i]])="UTF-8"
#}
#sms_corpus_clean <- tm_map(sms_corpus, tolower)
sms_corpus_clean <- tm_map(sms_corpus, content_transformer(tolower))#소문자로 바꾸서 clean해라



as.character(sms_corpus[[1]])
as.character(sms_corpus_clean[[1]])

sms_corpus_clean <- tm_map(sms_corpus_clean, removeNumbers)#숫자 빼기
sms_corpus_clean <- tm_map(sms_corpus_clean, removeWords, stopwords()) #stop words 무의미한 단어 빼기
sms_corpus_clean <- tm_map(sms_corpus_clean, removePunctuation) # remove punctuation
removePunctuation("hello...world")
replacePunctuation <- function(x){gsub("[[:punct:]]+"," ",x)}
replacePunctuation("hello..world")

install.packages("SnowballC")
library(SnowballC)
wordStem(c("learn","learned","learning","learns"))

sms_corpus_clean <- tm_map(sms_corpus_clean,stemDocument)#변형된것 치우고 나머지 지우기 단어의 변형들을 포함되는 것만 빼기 
sms_corpus_clean <- tm_map(sms_corpus_clean,stripWhitespace)

#아래 두개 비교해본다.
lapply(sms_corpus[1:3], as.character)
lapply(sms_corpus_clean[1:3],as.character)

#단어를 해아려서 몇개 몇개 하는 것이다.
sms_dtm <- DocumentTermMatrix(sms_corpus_clean)
class(sms_dtm)
dim(sms_dtm)
colnames(sms_dtm)
#write.csv(sms_dtm,file="sms_dtm.csv")
#install.packages("tidytext")
#DocumentTermMatrix 한 내용을 보여주는 부분
# library(tidytext)
# as_td <- tidy(sms_dtm)
# View(as_td)
#inspect(sms_dtm)
#as.matrix(sms_dtm)
#View(sms_dtm)

sms_dtm2 <- DocumentTermMatrix(sms_corpus,control = list(
  tolower = TRUE,
  removeNumbers = T,
  stopwords= T,
  removePunctuation = T,
  stemming =T
))

sms_dtm3 <- DocumentTermMatrix(sms_corpus,control = list(
  tolower = TRUE,
  removeNumbers = T,
  stopwords= function(x){removeWords(x,stopwords())},
  removePunctuation = T,
  stemming =T
))
sms_dtm2
sms_dtm3

sms_dtm_train <- sms_dtm[1:4169,]#학습문제 
sms_dtm_test <- sms_dtm[4170:5559,]#시험문제

sms_train_lables <- sms_raw[1:4169,]$type #답 여주는 것
sms_test_lables <- sms_raw[4170:5559,]$type

prop.table(table(sms_train_lables))#범위를 계산하는 것 spam is similar
prop.table(table(sms_test_lables))

install.packages("wordcloud")
library(wordcloud)
wordcloud(sms_corpus_clean,min.freq = 50, random.order = F)
#스팸으로 해서 
spam <- subset(sms_raw, type=="spam")
ham <- subset(sms_raw, type=="ham")

wordcloud(spam$text, max.words = 40, scale = c(3,0.5))
wordcloud(ham$text, max.words = 40, scale = c(3,0.5))

sms_dtm_freq_train <- removeSparseTerms(sms_dtm_train,0.999)
sms_dtm_freq_train

findFreqTerms(sms_dtm_train,5)#5번이상 나오는 것을 여기 

save_freq_words <- findFreqTerms(sms_dtm_train,5)
str(save_freq_words)

sms_dtm_freq_train <- sms_dtm_train[,save_freq_words]
sms_dtm_freq_test <- sms_dtm_test[,save_freq_words]

convert_counts <- function(x){
  x <- ifelse(x>0,"Yes","No")
}

sms_train <- apply(sms_dtm_freq_train,MARGIN = 2, convert_counts)
sms_test <- apply(sms_dtm_freq_test,MARGIN = 2, convert_counts)

#Trainging a model on the data
install.packages("e1071")
library(e1071)
#naive로 나이브베이지안으로 스팸인지 아닌지 확인한다.
sms_clasifier <- naiveBayes(sms_train,sms_train_lables)

#evaluating model perfrmance
sms_test_pred <- predict(sms_clasifier, sms_test)

install.packages("gmodels")
library(gmodels)
CrossTable(sms_test_pred, sms_test_lables, prop.chisq = F, prop.t =  F, prop.r =  F, dnn= c('predict','actual'))

sms_clasifier2 <- naiveBayes(sms_train, sms_train_lables, laplace = 1)
sms_test_pred2 <- predict(sms_clasifier2, sms_test)
CrossTable(sms_test_pred2, sms_test_lables, prop.chisq = F, prop.t =  F, prop.r =  F, dnn= c('predict','actual'))
반응형

'Study > R' 카테고리의 다른 글

R-10  (0) 2020.09.05
R-9  (0) 2020.09.05
R-7  (0) 2020.09.05
R-6  (0) 2020.09.05
R-5  (0) 2020.09.05

+ Recent posts