SV regresia
SV regresia (Support Vector Regression – SVR) je technika založená na princípoch strojového učenia, ktorá rozširuje základný koncept Support Vector Machines (SVM) pre regresné úlohy. Na rozdiel od tradičných lineárnych regresií, SVR nepredpokladá lineárnu závislosť medzi premennými a je schopná pracovať aj s nelineárnymi vzťahmi pomocou kernelových funkcií.
SVR sa snaží nájsť funkciu, ktorá má maximálnu presnosť, pričom toleruje malú chybu ε v predikcii. Pri optimalizácii sa hľadajú len tie pozorovania, ktoré prekračujú túto tolerančnú hranicu – tzv. „support vectors“ – čo robí SVR robustnou voči šumu a odľahlým hodnotám.
Táto metóda je vhodná najmä pri komplexnejších dátach, kde tradičné metódy zlyhávajú kvôli nelinearite alebo veľkej dimenzionalite dát. V oblasti ekonomických predikcií či analýz časových radov sa SV regresia ukazuje ako silný nástroj.

SVM v R
V R je metóda Support Vector Machines implementovaná vo viacerých knižniciach ako kernlab
, klaR
, svmpath
či e1071
. Najčastejšie sa využíva knižnica e1071
, ktorá je postavená na populárnej knižnici LIBSVM.
Načítanie knižnice:
library(e1071)
Trénovanie modelu pomocou funkcie svm()
:
svm(x, y = NULL, scale = TRUE, type = NULL,
kernel = "radial", degree = 3, gamma = if (is.vector(x)) 1 else 1 / ncol(x),
coef0 = 0, cost = 1, nu = 0.5, class.weights = NULL, cachesize = 40,
tolerance = 0.001, epsilon = 0.1, shrinking = TRUE, cross = 0,
probability = FALSE, fitted = TRUE, ..., subset,
na.action = na.omit)
Najdôležitejšie parametre:
formula
– symbolický zápis modelux
– vstupné premennéy
– cieľová premenná (hodnoty)data
– dátový rámec s premennýmitype
– typ SVM metódy:eps-regression
– základná SVR regresianu-regression
– alternatívna SVR
kernel
– typ kernel funkcie:linear
,polynomial
,radial
,sigmoid
cost
– penalizačný parameter (C)epsilon
– šírka ε-pásma (tolerancia v stratovej funkcii)
Optimalizácia parametrov:
Na ladenie hyperparametrov podľa MSE slúži funkcia tune()
.
Predikcia nových hodnôt:
Po vytvorení modelu sa predikcia realizuje cez funkciu predict.svm()
.
Príklad použitia SVR v R
Pre ilustráciu predpokladajme, že hodnoty časového radu y
sú závislé na jeho predchádzajúcich dvoch hodnotách x1
a x2
. Dáta sú načítané ako data.frame
s názvom dataset
.
Tréning modelu:
model = svm(y ~ x1 + x2, data = dataset,
type = "eps-regression",
kernel = "linear",
cost = 1,
epsilon = 0.01)
Predikcia a výpočet RMSE:
predictions = predict(model, dataset)
rmse = sqrt(mean((dataset$y - predictions)^2))
Vizualizácia reálnych vs. predikovaných hodnôt:
plot(dataset$y, type = "l", main = "SVR Predikcia vs. Skutočné dáta", ylab = "y", xlab = "Index")
lines(predictions, col = "red")
Červená čiara zobrazuje predikované hodnoty z modelu, ktoré by sa mali približovať k pôvodnému priebehu časového radu.

Optimalizácia parametrov SVR modelu
Najdôležitejšími parametrami SVR modelu sú epsilon a cost, ako aj výber kernel funkcie. Tieto parametre možno optimalizovať pomocou preddefinovanej funkcie tune()
z knižnice e1071
:
tunedModel = tune(svm, y ~ x1 + x2, data = dataset,
ranges = list(epsilon = seq(0, 1, 0.1),
cost = 2^(2:9)))
print(tunedModel)
plot(tunedModel)
Výstup tunedModel
obsahuje informácie o najlepšej kombinácii parametrov na základe MSE. Často je užitočné spustiť funkciu viackrát s menším krokom v okolí najlepšej oblasti z predchádzajúceho výpočtu.
Vlastná optimalizácia parametrov
Pre väčšiu flexibilitu môžeme optimalizovať parametre ručne cez cykly, kde si volíme hodnoty cost
a gamma
pre radial
kernel:
trainset = dataset[1:100,]
testset = dataset[101:166,]
costs = 2^seq(from = -3, to = 5, by = 2)
gammas = 2^seq(from = -4, to = 4, by = 1)
rmses = matrix(nrow = length(costs), ncol = length(gammas))
for(i in 1:length(gammas)) {
for(j in 1:length(costs)) {
model = svm(y ~ x1 + x2, data = trainset,
type = "eps-regression",
kernel = "radial",
cost = costs[j],
gamma = gammas[i])
predictions = predict(model, testset)
rmses[j, i] = sqrt(mean((testset$y - predictions)^2))
}
}

Do tabuľky rmses
sa ukladajú hodnoty RMSE pre každú kombináciu cost
a gamma
. Túto tabuľku je možné ďalej vizualizovať alebo analyzovať ako náhradu za graf z funkcie tune
.
Zdroj: Kecman, V. (2001); Slavík, M. (2015); e1071 package documentation