O algoritmo de quantização de vetores de aprendizagem (LVQ) é um algoritmo de rede neural artificial que permite escolher quantas instâncias de treinamento você deseja trabalhar e aprende exatamente como elas devem ser.
Aqui nós criamos um dataframe com dez mil frutas e uma condição para definir a bandeira ‘flag’ de cada fruta.
library(class)
library(e1071)
library(caret)
## Loading required package: lattice
## Loading required package: ggplot2
set.seed(88)
n = 10000
a = sample(1:20, n, replace = T)
b = sample(20:45, n, replace = T)
f = ifelse(a > 9 & b > 30, "cítrica",
ifelse(a < 4 | b < 11, "seca", "vermelha"))
df = data.frame(a = a, b = b, flag = as.factor(f))
head(df)
## a b flag
## 1 13 43 cítrica
## 2 7 24 vermelha
## 3 19 26 vermelha
## 4 2 45 seca
## 5 17 36 cítrica
## 6 16 38 cítrica
Para esta divisão criamos um vetor ‘amostra’ com ‘1’ e ‘2’, em que a probabilidade de aparecer ‘1’ é de 70% e ‘2’ é de 30%. Em seguida criamos o arquivo de treino e o arquivo de teste.
set.seed(88)
amostra <- sample(2,n,replace = T,prob = c(0.7,0.3))
treino_d <- df[amostra==1,]
teste_d <- df[amostra==2,]
treino = data.matrix(treino_d[, c("a","b")])
teste = data.matrix(teste_d[, c("a","b")])
treino_label = factor(treino_d[, "flag"])
teste_label = teste_d$flag
codeBook = lvqinit(treino, treino_label, size = 100)
buildCodeBook = olvq1(treino, treino_label, codeBook)
predict = lvqtest(buildCodeBook, teste)
confusionMatrix(teste_label, predict)
## Confusion Matrix and Statistics
##
## Reference
## Prediction cítrica seca vermelha
## cítrica 989 0 11
## seca 0 440 0
## vermelha 15 3 1536
##
## Overall Statistics
##
## Accuracy : 0.9903
## 95% CI : (0.9861, 0.9935)
## No Information Rate : 0.5167
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.9838
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: cítrica Class: seca Class: vermelha
## Sensitivity 0.9851 0.9932 0.9929
## Specificity 0.9945 1.0000 0.9876
## Pos Pred Value 0.9890 1.0000 0.9884
## Neg Pred Value 0.9925 0.9988 0.9924
## Prevalence 0.3353 0.1480 0.5167
## Detection Rate 0.3303 0.1470 0.5130
## Detection Prevalence 0.3340 0.1470 0.5190
## Balanced Accuracy 0.9898 0.9966 0.9902
Em relação às frutas cítricas, o algoritmo acertou 989 e errou 15, informando que 15 seriam vermelhas, quando na verdade eram cítricas. Quanto às frutas secas, acertou 440 e errou 3. Já quanto às frutas vermelhas, o algoritmo acertou 1536 e errou 11.