Question:
Comment choisir les noyaux SVM à utiliser?
404Dreamer_ML
2011-05-09 18:01:52 UTC
view on stackexchange narkive permalink

J'ai du mal à déterminer quel noyau je dois utiliser dans un SVM non linéaire sans tester à l'avance. Je veux savoir s'il existe d'autres moyens de déterminer le meilleur noyau sans tests? Quel est le rapport avec les données?

Un répondre:
#1
+16
Zach
2011-05-09 19:21:33 UTC
view on stackexchange narkive permalink

Faites votre analyse avec plusieurs noyaux différents. Assurez-vous de contre-valider. Choisissez le noyau qui fonctionne le mieux lors de la validation croisée et adaptez-le à l'ensemble de votre jeu de données.

/ edit: Voici un exemple de code en R, pour une classification SVM:

  #Utilisez une machine vectorielle de support pour prédire la bibliothèque d'espèces d'iris (caret) (caTools) #Choose x and yx <- iris [, c ("Sepal.Length", "Sepal.Width", "Petal.Length", " Petal.Width ")] y <- iris $ Species # Pré-calculer les plis CV afin que nous puissions utiliser les mêmes pour tous les modèlesCV_Folds <- createMultiFolds (y, k = 10, times = 5) #Fit a Linear SVML_model <- train (x, y, method = "svmLinear", tuneLength = 5, trControl = trainControl (method = 'repeatCV', index = CV_Folds)) # Fit a Poly SVMP_model <- train (x, y, method = "svmPoly", tuneLength = 5, trControl = trainControl (method = 'repeatCV', index = CV_Folds)) # Fit a Radial SVMR_model <- train (x, y, method = "svmRadial", tuneLength = 5, trControl = trainControl (method = 'repeatCV' ') , index = CV_Folds)) # Comparer 3 modèles: réampère <- resamples (list (Linear = L_model, Poly = P_model, Radial = R_model)) summary (resamps) bwplot (resamps, metric = "Accuracy") densitéplot (resamps, metric = "Accuracy") # Tester la précision prédictive d'un modèle à l'aide de la zone sous la courbe ROC #Idéalement, cela devrait être fait avec un set de test SEPERATEpSpecies <- predire (L_model, x, type = 'prob') colAUC (pSpecies, y, plot = TRUE)  
La validation croisée me donne-t-elle la meilleure frontière pour mon ensemble de données? Je veux dire qu'il n'y a pas de paramètres différents pour décider des meilleurs noyaux?
Chacun aura également besoin de quelques réglages pour sélectionner les meilleurs paramètres pour ce noyau. Ce réglage doit également être effectué via une validation croisée, DANS LE CADRE de la validation croisée globale. Les SVM sont délicats.
Thx :) Très utile
@404Dreamer_ML J'ai ajouté un exemple de code. Il existe d'autres moyens de le faire (c'est-à-dire utiliser un ensemble de tests séparé pour comparer vos modèles après les avoir ajustés, ou mieux encore une validation croisée), mais ce code vous donnera au moins un cadre de travail.
Pour votre modèle SVM linéaire, le paramètre tuneLength est redondant, la valeur par défaut pour caret est toujours d'utiliser un paramètre de coût de 1, quelle que soit la longueur de tune.L_model <- train (x, y, method = "svmLinear", tuneLength = 5, trControl = trainControl (méthode = 'repeatCV', index = CV_Folds)) Pour faire varier le paramètre C, vous devez définir un tuneGrid.Voir: https://github.com/topepo/caret/issues/636


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...