Ich habe ein Problem bzw. eine Frage zu den Ergebnissen der vorhergesagten Wahrscheinlichkeit von Klassifikationen bei SVM, speziell dem e1071-Paket. Ich weiß, dass dies nur eine Schnittstelle zur LIBSVM ist, aber ich muss ja irgendwo anfangen.
Ich habe eine Klassifizierung mit 2 Ereignissen, teile diese in Trainings- und Testdaten, und trainiere ein SVM-Modell (in diesem Beispiel ist es ein Radial-Kernel, aber das Problem tritt auch bei anderen Kernen auf). Dann mache ich eine Vorhersage mit den Testdaten, und lasse mit die 'probabilities' ausgeben. Und jetzt ist es so, dass diese sich... ändern. (Oder auch nicht, dazu unten mehr.)
Ich habe in meinem Beispiel die Iris-Daten genutzt, die Abweichungen der 'probabilities' sind hier auch nicht sehr groß, aber ich denke ausreichend, um das Problem zu erklären. Dazu setzte ich die Iris-Daten mit 'Setosa' auf 1 und alle anderen auf 0, und dies ist meine (binäre) abhängige Variable, und alle anderen sind meine Regressoren.
Also mein Code:
Code: Alles auswählen
# Mod data
iris_mod <- iris
iris_mod$Setosa <- ifelse(iris$Species=="setosa",1,0)
iris_mod <- iris_mod[,c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Setosa" )]
# Split into Training- and Testdata
TrainingsData <- iris_mod[-c(1),]
TestData <- iris_mod[c(1),]
# Build model and make prediction
library(e1071)
# Alternierend
predict(svm(Setosa~., kernel="radial", type="C-classification", scale=TRUE, probability=TRUE, data=TrainingsData, gamma=1, cost=100), newdata=TestData, probability=TRUE)
# Konstant
set.seed(87654)
predict(svm(Setosa~., kernel="radial", type="C-classification", scale=TRUE, probability=TRUE, data=TrainingsData, gamma=1, cost=100), newdata=TestData, probability=TRUE)
# Konstant, wenn das Model nicht noch einmal geändert wird
SVMmodel <- svm(Setosa~., kernel="radial", type="C-classification", scale=TRUE, probability=TRUE, data=TrainingsData, gamma=1, cost=100)
predict(SVMmodel, newdata=TestData, probability=TRUE)
Wenn ich den seed fest setze, bleiben diese Werte Konstant - Siehe dazu die 2 Zeilen Code unter '# Konstant'.
Wenn ich das Model erst bestimme, und dann nicht mehr ändere, bleiben diese Werte ebenfalls fest - Siehe dazu die ein bzw. zwei Zeilen unter '# Konstant, wenn das Model nicht noch einmal geändert wird'
Kann das bitte mal jemand bestätigen?
Es liegt also (so vermute ich) nicht an der Funktion 'predict' - Wenn sich das Model nicht ändert, liefert diese die gleichen Ergebnisse.
Wenn ich mir allerdings die Ergebnisse der Funktion 'svm' ausgeben lasse, sehe ich allerdings ebenfalls immer wieder die gleichen Ergebnisse (auch mit 'summary'). Dies bedeutet, ich sehe die sich ändernden Werte erst, wenn ich mir mehrmals mit der svm-Funktion Modelle berechnen lasse, und mit diesen als Argument in der 'prediction'-Funktion mir 'probabilities' berechnen lasse - Allerdings nicht, wenn ich vorher den seed setze.
Aus diesem Grund tippe ich, dass in der svm-Funktion Numerik läuft, deren Startwerte vom seed abhängen, die aber instabile Ergebnisse liefert... Oder so ähnlich.
Hat da jemand ähnliche Erfahrungen gemacht? Oder gibt es vielleicht da schon Diskussionen zu?
Dank&Gruß
Schubbiaschwilli