Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
67 views

Классификация с обучением

Линейный дискриминантный анализ (LDA)

%r library(cluster) flea <- read.table('flea.tsv', header=TRUE, sep="\t") str(flea) flea.st <- scale(flea[, 1:2]) flea.dist <- daisy(flea)
'data.frame': 74 obs. of 3 variables: $ Width : int 150 147 144 144 153 140 151 143 144 142 ... $ Angle : int 15 13 14 16 13 15 14 14 14 15 ... $ Species: Factor w/ 3 levels "Con","Hei","Hep": 1 1 1 1 1 1 1 1 1 1 ...
%r library(MASS) train <- sample(1:74, 50) # создаём список индексов для тренировочной выборки flea.lda <- lda(Species ~ ., flea, subset=train) # строим модель (для определения вида блох) методом линейного дискриминантного анализа flea.ldap <- predict(flea.lda, flea[-train, ])$class # на основании этой модели предсказываем, в какой класс попадут остальные блохи flea.ldap # выводим результат на экран table(flea.ldap, flea[-train, 3]) # сравниваем наш результат с реальным положением вещей
  1. Con
  2. Con
  3. Con
  4. Con
  5. Con
  6. Con
  7. Con
  8. Con
  9. Con
  10. Hei
  11. Hei
  12. Hei
  13. Hei
  14. Hei
  15. Hei
  16. Hei
  17. Hei
  18. Hei
  19. Hei
  20. Hep
  21. Hep
  22. Hep
  23. Hep
  24. Hep
flea.ldap Con Hei Hep Con 9 0 0 Hei 0 10 0 Hep 0 0 5

Статистическая проверка результатов LDA

%r flea.ldam <- manova(as.matrix(flea[-train, 1:2]) ~ flea.ldap) summary(flea.ldam, test="Wilks")
Df Wilks approx F num Df den Df Pr(>F) flea.ldap 2 0.055065 32.615 4 40 4.18e-12 *** Residuals 21 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Визуализация LDA

%r flea.lda2 <- lda(flea[,1:2], flea[,3]) flea.ldap2 <- predict(flea.lda2, dimen=2)$x plot(flea.ldap2, type="n", xlab="LD1", ylab="LD2") text(flea.ldap2, labels=flea$Species)

Деревья решений

%r library(rpart) flea.tree <- rpart(Species ~ ., method="class", data=flea) plot(flea.tree) text(flea.tree)
%r library(party) fit <- ctree(Species ~ ., data=flea) plot(fit, main="Flea Beetles")
Loading required package: grid Loading required package: mvtnorm Loading required package: modeltools Loading required package: stats4 Loading required package: strucchange Loading required package: zoo Attaching package: ‘zoo’ The following objects are masked from ‘package:base’: as.Date, as.Date.numeric Loading required package: sandwich

Random Forest

%r library(randomForest) fit <- randomForest(Species ~ ., data=flea) print(fit) # view results importance(fit) # importance of each predictor
Call: randomForest(formula = Species ~ ., data = flea) Type of random forest: classification Number of trees: 500 No. of variables tried at each split: 1 OOB estimate of error rate: 2.7% Confusion matrix: Con Hei Hep class.error Con 20 1 0 0.04761905 Hei 0 30 1 0.03225806 Hep 0 0 22 0.00000000
MeanDecreaseGini
Width26.11666
Angle20.74728

Предсказание

%r set.seed(17) train = sample(1:74, 50) flea.train <- flea[train, ] flea.unknown <- flea[-train, ] flea.rf <- randomForest(flea.train[, 3] ~ ., data=flea.train[, 1:2]) flea.rfp <- predict(flea.rf, flea.unknown[, 1:2]) flea.rfp table(flea.rfp, flea.unknown[, 3])
3
Con
4
Con
6
Con
7
Con
9
Con
11
Con
17
Hei
19
Con
20
Con
25
Hei
31
Hei
40
Hei
42
Hei
43
Hei
49
Hei
50
Hei
53
Hep
57
Hep
61
Hep
62
Hep
63
Hep
65
Hep
69
Hep
74
Hep
flea.rfp Con Hei Hep Con 8 0 0 Hei 1 7 0 Hep 0 0 8

Визуализация

%r set.seed(17) flea.urf <- randomForest(flea[, -3]) MDSplot(flea.urf, flea[, 3])