Más contenido relacionado
R言語で統計分類基本
- 2. 自己紹介
●
Pawe Rusin (ł パヴェウ・ルシン)
●
pawel.rusin@brilliantservice.co.jp
Facebook: Pawe Rusin (ł
iofar@o2.pl)
●
会社:
●
株式会社ブリリアントサービス
●
業務:
データマイニング
- 5. 分類の例
pregnant glucose pressure triceps insulin mass pedigree age diabetes
1 6 148 72 35 NA 33.6 0.627 50 pos
2 1 85 66 29 NA 26.6 0.351 31 neg
3 8 183 64 NA NA 23.3 0.672 32 pos
4 1 89 66 23 94 28.1 0.167 21 neg
5 0 137 40 35 168 43.1 2.288 33 pos
6 5 116 74 NA NA 25.6 0.201 30 neg
pregnant glucose pressure triceps insulin mass pedigree age diabetes
763 9 89 62 NA NA 22.5 0.142 33 ?
764 10 101 76 48 180 32.9 0.171 63 ?
765 2 122 70 27 NA 36.8 0.340 27 ?
766 5 121 72 23 112 26.2 0.245 30 ?
767 1 126 60 NA NA 30.1 0.349 47 ?
768 1 93 70 31 NA 30.4 0.315 23 ?
訓練例:
テスト例:
- 6. 分類の例
WHO Risk Group 1
WHO Risk Group 2
WHO Risk Group 3
WHO Risk Group 4
time status sex age year thickness ulcer
1 10 3 1 76 1972 6.76 1
2 30 3 1 56 1968 0.65 0
3 35 2 1 41 1977 1.34 0
4 99 3 0 71 1968 2.90 0
5 185 1 1 52 1965 12.08 1
6 204 1 1 28 1971 4.84 1
7 210 1 1 77 1972 5.16 1
8 232 3 0 60 1974 3.22 1
9 232 1 1 49 1968 12.88 1
10 279 1 0 68 1971 7.41 1
- 7. データを片付ける
pregnant glucose pressure triceps insulin mass pedigree age diabetes
1 6 148 72 35 NA 33.6 0.627 50 pos
2 1 85 66 29 NA 26.6 0.351 31 neg
3 8 183 64 NA NA 23.3 0.672 32 pos
4 1 89 66 23 94 28.1 0.167 21 neg
5 0 137 40 35 168 43.1 2.288 33 pos
6 5 116 74 NA NA 25.6 0.201 30 neg
> install.packages("MASS")
> library(MASS)
> data(PimaIndiansDiabetes2)
> indians = na.omit(PimaIndiansDiabetes2)
> indians = indians[,c(2,5,9)]
glucose insulin diabetes
4 89 94 neg
5 137 168 pos
7 78 88 pos
9 197 543 pos
14 189 846 pos
15 166 175 pos
- 8. 訓練例とテスト例を分ける
learning.sample = sample(x=1:nrow(indians),size=nrow(indians)/2)
learning.set = indians[learning.sample,]
sample(x, size, replace = FALSE, prob = NULL)
x=[1,2...392],size=196
[1] 120 321 292 11 49 318 ...
glucose insulin diabetes
317 89 94 neg
318 137 168 pos
319 78 88 pos
320 197 543 pos
321 189 846 pos
322 166 175 pos
[[120,321,292,11,49,318...],]
- 14. 線形判別分析
lin.class.predict = predict(lin.classify, newdata=test.set)
predict (object, ...)
$class
[1] neg neg pos neg neg pos neg neg neg pos neg neg neg neg neg neg neg neg neg neg neg neg neg neg neg
pos neg neg neg pos neg neg neg neg
[35] pos neg pos neg neg neg neg pos neg neg pos neg pos neg neg neg neg neg pos neg neg neg pos neg neg
neg neg neg pos neg neg neg neg neg
[69] neg neg neg neg neg pos pos neg pos neg neg neg neg neg pos pos neg neg pos neg neg neg pos neg neg
neg neg neg neg neg neg neg pos neg
[103] pos neg neg pos pos neg neg neg neg neg neg neg neg pos neg neg neg neg neg neg neg neg pos neg neg
neg pos neg neg pos neg neg neg neg
[137] neg pos neg neg neg neg neg neg neg neg pos neg neg neg neg neg pos pos pos pos neg neg neg neg neg
neg neg neg pos pos neg neg neg neg
[171] pos pos pos neg neg neg neg neg neg neg pos pos neg neg neg neg pos neg neg neg pos neg neg neg neg
neg
Levels: neg pos
$posterior
neg pos
4 0.9100464 0.08995355
5 0.5700686 0.42993137
14 0.2765809 0.72341915
21 0.7073037 0.29269633
...
res.table = table(real=true.test.set,classified=lin.class.predict$class)
classified
real neg pos
neg 102 28
pos 51 15
- 15. 線形判別分析
drawparti(grouping,x,y,method=”lda”...) [klaR]
drawparti(indians[,3],indians[,1],indians[,2]...)
drawparti(grouping, x, y, method = "lda", prec = 100, xlab = NULL,
ylab = NULL, col.correct = "black", col.wrong = "red",
col.mean = "black", col.contour = "darkgrey",
gs = as.character(grouping), pch.mean = 19, cex.mean = 1.3,
print.err = 0.7, legend.err = FALSE, legend.bg = "white",
imageplot = TRUE, image.colors = cm.colors(nc),
plot.control = list(), ...)
- 17. quad.classify = qda(indians[,1:2],grouping=indians$diabetes,subset=learning.sample)
qda(x, grouping, ..., subset, na.action) [MASS]
Call:
qda(indians.formatted[, 1:2], grouping = indians.formatted$diabetes,
subset = learning.set.sample)
Prior probabilities of groups:
neg pos
0.6377551 0.3622449
Group means:
glucose insulin
neg 113.2400 135.1520
pos 146.4366 208.0282
二次判別分析
- 18. quad.class.predict = predict(quad.classify, newdata=test.set)
predict (object, ...)
res.table = table(real=true.test.set,classified=quad.class.predict$class)
$class
[1] neg neg pos neg neg pos neg neg neg pos neg neg neg neg neg neg neg neg neg neg neg neg neg neg neg pos
neg neg neg pos neg neg neg neg
[35] pos neg pos neg neg neg neg pos neg neg pos neg pos neg neg neg neg neg pos neg neg neg pos neg neg neg
pos neg pos neg neg neg neg pos
[69] neg neg neg neg neg pos neg neg pos neg neg neg neg neg pos pos neg neg pos neg neg neg pos neg neg neg
neg neg neg neg neg neg pos neg
[103] pos neg neg pos pos neg neg neg neg neg neg neg neg neg neg neg neg neg neg neg neg neg pos neg neg neg
pos neg neg pos neg neg neg neg
[137] neg pos neg neg neg neg neg neg neg neg pos neg neg neg neg pos pos pos pos pos neg neg neg neg neg neg
neg neg pos pos neg neg neg neg
[171] pos pos pos neg neg neg neg neg neg neg pos pos neg neg neg neg pos neg neg neg pos neg neg neg neg neg
Levels: neg pos
$posterior
neg pos
4 0.903509648 0.09649035
5 0.651253333 0.34874667
14 0.000552298 0.99944770
classified
real neg pos
neg 103 27
pos 49 17
二次判別分析
- 20. 分類器 R言語のパッケージと関数
線形判別分析,二次判別分析 MASS(lda,qda)
単純バイズ分類器 e1071(naiveBayes), klaR(NaiveBayes)
決定木 tree(tree),rpart(rpart),party(cpart)
Random Forest randomForest(randomForest)
k近傍法 class(knn),kknn(kknn),knncat(knncat)
サポートバクターマシン e1071(svm)
ニューラルネットァーク nnet(nnet)
意外の分類器