Sunteți pe pagina 1din 6

SVM pentru determinarea calitatii vinului dintr-un set de date

> library(e1071)

>library(scales)

> data <- read.csv("C:/winequality-red.csv", header = TRUE, sep = ";") Citeste fisierul “winequality-
red.csv”aflat in C:\

>data
>train <- data Setul de date de antrenare este chiar setul initial.

>t <- ncol(train) t =nr. de coloane ale setului de antrenare

>t

>target <- train[, t] target retine ultima coloana din setul antrenare, care contine variabila calitativa
“calitate”

> model <- svm(quality ~ ., data = train)

>model

Pe ecran apare:

Call:

svm(formula = quality ~ ., data = train)

Parameters:

SVM-Type: eps-regression

SVM-Kernel: radial

cost: 1

gamma: 0.09090909

epsilon: 0.1

1
Number of Support Vectors: 1332

Vom previziona ultima coloana a setului de date, asa ca o excludem:


>prediction <- predict(model, train[, -t])

Se compara predictiile (rotunjite superior prin comanda “ceiling”) cu valorile reale ale ultimei coloane:

> tab <- as.data.frame(cbind(pred = ceiling(prediction), actual = target)) Comanda “cbind” combina
un sir de valori in coloane ale unei matrici.

> tab

Se creeaza acum matricea de confuzie:

>tab1 <- table(pred = ceiling(prediction), true = target)

>tab1

Pe ecran obtinem matricea de confuzie:

true

pred 3 4 5 6 7 8

5 4 19 132 10 0 0

6 6 32 526 431 32 0

7 0 2 23 197 160 15

8 0 0 0 0 7 3

> cls <- classAgreement(tab1)

>cls

Pe ecran apare:

$diag

[1] 0.03689806

$kappa

[1] -0.1072297

$rand

[1] 0.5859396

2
$crand

[1] 0.1644809

>print(sprintf("Correctly classified: %f, kappa %f", cls$diag, cls$kappa)) Afiseaza valoarea


coeficientului kappa si rata preciziei algoritmului. %f semnifica valoarea cu 6 zecimale.

Pe ecran apare:

"Correctly classified: 0.036898, kappa -0.107230"

> plot(train$quality, main = "predictions=red, actual=black")

> points(ceiling(prediction), col = "red")

Se obtin predictile colorate cu rosu si valorile reale cu negru.

3
8
7
predictions=red, actual=black
train$quality

6
5
4
3

0 500 1000 1500

Index

Se poate alege alta forma a nucleului: liniara:

> model <- svm(quality ~ ., data = train, kernel = "linear")

> model

Call:

svm(formula = quality ~ ., data = train, kernel = "linear")

4
Parameters:

SVM-Type: eps-regression

SVM-Kernel: linear

cost: 1

gamma: 0.09090909

epsilon: 0.1

Number of Support Vectors: 1382

Algoritmul se repeta cu pasii anteriori.

Cazul in care nucleul este polinomial:

> model <- svm(quality ~ ., data = train, kernel = "polynomial")

> model

Call:

svm(formula = quality ~ ., data = train, kernel = "polynomial")

Parameters:

SVM-Type: eps-regression

SVM-Kernel: polynomial

cost: 1

degree: 3

gamma: 0.09090909

coef.0: 0

epsilon: 0.1

Number of Support Vectors: 1465

5
6

S-ar putea să vă placă și