오늘은 저번 포스팅에서 설명하였던 SVM 을 구현할 예정이다.
테스트 데이터셋은 아래 링크에서 받을 수 있다.
https://archive.ics.uci.edu/ml/datasets/letter+recognition
데이터셋의 변수를 확인해보자.
변수마다 뭘 뜻하는지는 정확히 모르겠고, 여튼 글자 모양(좌표)에 대한 변수라고 생각하면 되겠다.
즉 letters마다 좌표, 넓이 등이 다르다는 것에 착안하여 모델을 만들고, 새롭게 들어오는 데이터들을 성공적으로 분류하는 것을 목표로 한다
코드는 아래와 같다.
1 2 3 4 5 6 7 8 9 10 | ## step.1 preparing the data ##### # 데이터 읽기와 구조 확인 letters<-read.csv("letter.csv") str(letters) #상형문자의 특징들 summary(letters) #최대최소값이 비슷하기 때문에 굳이 정규화 필요 없다 # Training (80%)와 Test(20%) 나누기 letters_train<-letters[1:16000,] letters_test<-letters[16001:20000,] | cs |
특징을 확인하고 학습용과 검증용 데이터로 나눈다.
1 2 3 4 5 6 | ## Step 2: Training a model on the data ---- # 단순 선형 SVM을 훈련으로 시작 install.packages("kernlb") library(kernlab) letters_classfier<-ksvm(letter~. , data = letters_train, kernel="vanilladot") # 선형커널 | cs |
우리가 사용할 라이브러리는 "kernlab" 라는 라이브러리다.
분류 모델을 만드는 핵심 함수는 ksvm함수인데, 설명은 아래와 같다.
우리의 경우는 letters를 예측할거고, 예측에 사용하는 데이터 프레임 속성은 전부 다 사용하니깐 .로 표시한다.
data 에는 학습용 데이터를 써주고, 사용할 kernel 종류는 vaniladot 을 사용하기로 한다.
여러 kernel 타입이 있는데, 목적에 맞게 선택하여 모델을 만들면 된다.
1 2 3 4 | ## Step 3: Evaluating model performance ---- # 테스트 데이터셋에 대한 예측 letter_predictions<-predict(letters_classfier,letters_test) #response - 예측된 범주 인지, probabilities - 예측된 확률인지 / 안쓰면 response | cs |
그 후 predict 함수를 사용하여 예측을 하게 된다.
해당 함수는 predict(사용할 모델, 예측하고싶은 데이터셋, response or probabilities) 를 사용하면 된다
여기서 response는 예측된 범주일 경우, probailities 는 확률일 경우 사용한다.
우리는 알파벳의 확률 예측이 아니고 범주를 나누는 것이니 response를 사용하기로 하는데, 디폴트 값이 response여서 따로 써줄필요는 없다.
1 2 3 4 | # 테스트 데이터 셋 문자와 예측된 문자 비교 View(table(letter_predictions,letters_test$letter)) | cs |
이렇게 View 와 table명령어를 사용하면, 예측값과 진짜 검증 데이터의 letter 컬럼이 얼마나 일치하는지 확인해볼 수 있다.
하지만 이럴경우 가독성이 떨어지고, 직관성이 떨어지기 때문에 아래 코드를 통해 간단하게 정확도를 확인 할 수 있다.
1 2 3 4 5 6 7 8 9 10 | # look only at agreement vs. non-agreement # 일치/불일치 예측을 표시하는 TRUE/FALSE 벡터 생성 agreement<-letter_predictions == letters_test$letter # 4000개 중 레코드 어떻게 나오는 지 식별 table(agreement) ## 3357개 정확히 식별 / 643개 틀리게 식별 # agreement실행결과 FALSE TRUE 643 3357 | cs |
즉 우리는 3357개를 정확히 식별했고, 643개를 잘못 식별했음을 알 수 있다.
'데이터분석 > with R' 카테고리의 다른 글
[R] R로 구현하는 상품추천기술(IBCF, UBCF) - (1) (2) | 2018.01.09 |
---|---|
[R] 상품추천기술: 협업필터링의 정의와 예시 (0) | 2018.01.02 |
[R] SVM 서포트 벡터 머신의 정의와 설명 (0) | 2017.12.28 |
[R] R로 구현하는 신경망 이론 (2) | 2017.12.22 |
[R] 암상자 기법과 신경망이론의 정의 및 구성 (0) | 2017.12.19 |