A map reduce approach to SVM classification. http://r-es.org/Concursos+V+Jornadas
Brief description of Training50K.csv (sep=\t)
- 8 continuous vars (x1..x8),
- 7 categorics vars (xc1..xc7)
- 3 predicted var yes/no (y1..y3) (sorted by complexity, y1 > y2, ...)
Model for y1 var
Training SVM for y1 label (gamma=0.001, C=50.)
K-Fold validation:
X train: (30000, 16)
y train: (30000,)
X test: (20000, 16)
y test: (20000,)
Supported vectors length: (124, 16)
Dual coef. length: (1, 124)
Score k-fold validation: 1.000000
Vector 1 Labeled: 1.0 Model prediction: [ 1.]
Decision function: [[ 1.23194725]]
[1]
Model for y2 var
Training SVM for y2 label (gamma=0.01, C=30.)
K-Fold validation:
X train: (30000, 16)
y train: (30000,)
X test: (20000, 16)
y test: (20000,)
Supported vectors length: (5819, 16)
Dual coef. length: (1, 5819)
Score k-fold validation: 0.913350
Vector 1 Labeled: 0.0 Model prediction: [ 0.]
Decision function: [[-3.46318592]]
[0]
Model for y3 var
Training SVM for y3 label (gamma=0.001, C=50.)
K-Fold validation:
X train: (30000, 16)
y train: (30000,)
X test: (20000, 16)
y test: (20000,)
Supported vectors length: (3638, 16)
Dual coef. length: (1, 3638)
Score k-fold validation: 0.949350
Vector 1 Labeled: 0.0 Model prediction: [ 0.]
Decision function: [[-2.67298744]]
[0]
Decision function from the scikit-learn package.
# Get value from decision function (from support vector and dual coef)
value <- 0
for (i in 2:dim(support_vectors_)[1]) {
value <- value + dual_coef_[i] * norm(as.matrix(vector - support_vectors_[i,])))
}
Using the above decision function, we apply calculate the distance of each vector to each support vector applying the dual coef. In the reduce step, we summarize the previous part from each vector.