# k-NN 알고리즘을 이용한 Iris 품종 분류
# k-NN 알고리즘을 구현한 패키지를 설치
install.packages("class")
# 패키지를 검색경로(메모리)에 로드
library(class)
rm(list=ls())
# class::knn(학습데이터, 테스트데이터, 학습데이터의정답, k값)
# csv 파일에서 데이터프레임 생성
iris <- read.csv('mlwr/Iris.csv',stringsAsFactors = F)
str(iris)
head(iris)
table(iris$Species)
# 1~50 setosa, 51~100 versicolor, 101~150 virginica
# iris 품종 분류와는 상관없는 변수인 id를 제거
iris <- iris[-1]
head(iris)
#Species 컬럼을 factor로 만듦 - 레이블화
iris$Species <- factor(iris$Species,
levels= c('Iris-setosa','Iris-versicolor','Iris-virginica'),
labels=c('Setosa', 'Versicolor', 'Verginica'))
table(iris$Species)
# 학습 데이터 세트, 테스트 데이터 세트를 준비!!
# 품종별로 구분이 되어 있는 데이터를 랜덤하게 섞은 후 데이터 세트를 나눔
v<-c(1:10)
#sample(샘플 대상 벡터, 뽑을 샘플 수) : 벡터의 원소들을 랜덤하게 추출함
> sample(v)
[1] 8 10 5 2 3 4 6 9 1 7
> sample(v,7)
[1] 8 6 4 7 10 3 1
#sample(n): 1~n까지 정수를 랜덤하게 추출
> sample(150)
[1] 65 122 5 17 43 33 82 67 69 39 13 145 120 78 106 98 124 81 2 87
[21] 91 40 143 34 49 118 128 146 58 37 22 97 3 137 102 16 74 27 72 131
[41] 9 99 135 38 108 48 30 89 94 73 121 133 20 134 147 88 75 8 141 53
[61] 136 61 23 56 139 60 19 80 50 10 114 84 77 129 130 92 85 116 100 150
[81] 51 111 144 95 107 76 36 103 12 71 6 96 46 1 123 90 26 79 112 125
[101] 45 63 55 31 14 127 86 138 7 66 109 104 25 117 101 113 126 110 142 35
[121] 93 68 42 54 119 115 64 47 21 41 11 52 18 32 24 148 15 28 29 132
[141] 105 140 57 4 44 62 149 59 70 83
#nrow(데이터 프레임), ncol(데이터 프레임): 데이터프레임 행/열의 갯수
nrow(iris)
iris_shuffled = iris[sample(nrow(iris)),]
head(iris_shuffled)
tail(iris_shuffled)
table(iris_shuffled$Species)
# 최소-최대 정규화 함수 정의
normalize<- function(x){
return((x-min(x))/(max(x)-min(x)))
}
iris_n<-as.data.frame(lapply(iris_shuffled[1:4],normalize))
summary(train_set)
# 학습 데이터
train_set <- iris_n[1:100,]
head(train_set)
# 학습 데이터 레이블
train_set_label <- iris_shuffled[1:100,5]
head(train_set_label)
#테스트 데이터
test_set <- iris_n[101:150, ]
#테스트 데이터 레이블
test_set_label <- iris_shuffled[101:150,5]
head(train_set_label)
#knn을 적용했을 때 예측값
predict= knn(train = train_set,
test = test_set,
cl = train_set_label,
k = 11
)
table(predict)
CrossTable(x = test_set_label,
y = predict,
prop.chisq = F)
'R > R 머신러닝' 카테고리의 다른 글
R22_버섯 분류 - 나이브 베이즈 방법 (0) | 2019.11.01 |
---|---|
R21_규칙 기반 분류 (Classification Rules) (0) | 2019.10.31 |
R20_ 분할 정복 _ 의사결정 트리( Decision Tree ) (0) | 2019.10.30 |
R19_Naive Bays(확률적 학습), Text mining (0) | 2019.10.29 |
R17_ k-NN 알고리즘(최근접 이웃 분류) (0) | 2019.10.25 |