How to force fitcsvm() to train a one-class svm?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Francesco Formaggio
el 3 de Oct. de 2018
Comentada: Don Mathis
el 10 de Oct. de 2018
With fitcsvm you can train also a one-class svm, but how can I be sure that the trained svm is one-class and not two-class? I tried with
SVMModel = fitcsvm(valuesTraining,targetsTraining,'Standardize',true,... 'KernelFunction','gaussian','OptimizeHyperparameters','auto');
where targetsTraining is a vector of all 1s (since I have only samples coming from one class) amd valuesTraining is the matrix containing the 5-dimensional-features training points. Then I test the model with different data but whith instances of both classes. Performance are bad and I have the feeling that the training has been conducted with two-class svm, and not one-class.
0 comentarios
Respuesta aceptada
Don Mathis
el 5 de Oct. de 2018
Editada: Don Mathis
el 5 de Oct. de 2018
Look at your model at the MATLAB command line. If 'ClassNames' has only one entry, then it was 1-class training. For example:
SVMModel =
ClassificationSVM
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: 1
ScoreTransform: 'none'
NumObservations: 150
Alpha: [77×1 double]
Bias: -15.977601047115476
KernelParameters: [1×1 struct]
Mu: [5.843333333333319 3.057333333333326]
Sigma: [0.828066127977862 0.435866284936697]
BoxConstraints: [150×1 double]
ConvergenceInfo: [1×1 struct]
IsSupportVector: [150×1 logical]
Solver: 'SMO'
2 comentarios
Don Mathis
el 10 de Oct. de 2018
If your Response variable has only 1 class, then 1-class training is used. If there are 2 classes, 2-class is used. If you have outliers that are already labelled -1, then you can use 2-class learning to find outliers.
Más respuestas (0)
Ver también
Categorías
Más información sobre Classification Trees en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!