2015-01-09 4 views
7

ho sintonizzato uno SVM con diversi valori di costo e di gamma per un datasetCome creare una trama di contorno in R

> library(e1071) 
> library(foreign) 
> dataframe <- read.arff("/diabetes.arff") 
> index <- seq_len(nrow(dataframe)) 
> trainindex <- sample(index, trunc(length(index)/2)) 
> trainset <- dataframe[trainindex, ] 
> testset <- dataframe[-trainindex, ] 
> tunedsvm <- tune.svm(class ~ ., data = trainset, gamma = 2^(seq(-15,3,by=2)), cost = 2^(seq(-5,15,by=2))) 
> tunedsvm 

Parameter tuning of ‘svm’: 

- sampling method: 10-fold cross validation 

- best parameters: 
     gamma cost 
0.0001220703 2048 

- best performance: 0.2187029 
> head(tunedsvm$performances) 
     gamma cost error dispersion 
1 3.051758e-05 0.03125 0.351546 0.06245835 
2 1.220703e-04 0.03125 0.351546 0.06245835 
3 4.882812e-04 0.03125 0.351546 0.06245835 
4 1.953125e-03 0.03125 0.351546 0.06245835 
5 7.812500e-03 0.03125 0.351546 0.06245835 
6 3.125000e-02 0.03125 0.351546 0.06245835 
> nrow(tunedsvm$performances) 
[1] 110 

Voglio creare una trama di contorno simile a quello che genera MATLAB (qui di seguito è un esempio)

enter image description here

ho provato il comando plot ma il contorno non può dedurre molto dal terreno che genera.

> plot(tunedsvm) 

enter image description here

+0

forse gli esempi nella pagina di aiuto 'plot.svm' aiuterà? – ckluss

+0

Non ti piace 'graphics :: contour'? –

+0

@CarlWitthoft Non sono a conoscenza di quel pacchetto che ho provato per il contorno (tunesvm) ma ha detto che non è stata specificata la corretta matrice 'z' – birdy

risposta

9

tune.svm restituisce un oggetto della classe "tune":

> class(tunedsvm) 
[1] "tune" 

Quindi la pagina di aiuto rilevante è ?plot.tune. Un po 'di lettura di questo rivela diversi argomenti utili per la personalizzazione:

plot(tunedsvm, 
    transform.x = log2, transform.y = log2, # log 2 scale for x and y 
    transform.z = function(x) 1 - x,  # convert error rate to accuracy rate 
    swapxy = TRUE,       # put gamma on y axis 
    color.palette = terrain.colors,   # define color palette for contours 
    xlab = expression(log[2](cost)), ylab = expression(log[2](gamma)), 
    main = "Accuracy Rate of SVM") 

Questo codice produce il seguente grafico:?

contour plot showing accuracy rate of svm over log2 gamma vs log2 cost