Ich verwende derzeit Scikit Learn mit dem folgenden Code:
clf = svm.SVC(C=1.0, tol=1e-10, cache_size=600, kernel='rbf', gamma=0.0,
class_weight='auto')
und passen Sie dann einen Datensatz mit 7 verschiedenen Beschriftungen an und sagen Sie ihn voraus. Ich habe eine seltsame Ausgabe. Unabhängig davon, welche Kreuzvalidierungstechnik ich verwende, wird das vorhergesagte Etikett auf dem Validierungssatz immer Etikett 7 sein.
Ich probiere einige andere Parameter aus, einschließlich des vollständigen Standardparameters one ( svm.SVC()
), aber solange die Kernel-Methode, die ich verwende, rbf
anstelle von poly
oder linear
funktioniert, funktioniert sie einfach nicht, während sie für poly
und wirklich gut funktioniert linear
.
Außerdem habe ich bereits versucht, Zugdaten anstelle von Validierungsdaten vorherzusagen, und sie passen perfekt.
Hat jemand diese Art von Problem schon einmal gesehen und weiß, was hier los ist?
Ich schaue mir meine Klassenverteilung nie im Detail an, aber ich weiß, dass es ungefähr 30% von ihnen sein sollten, 7, 14% sind 4.
Ich versuche sogar eine manuelle 1-gegen-Rest-Implementierung und sie ist immer noch nicht hilfreich.
quelle
Antworten:
Eine wahrscheinliche Ursache ist die Tatsache, dass Sie Ihr Modell nicht optimieren. Sie müssen gute Werte für und . In Ihrem Fall erweisen sich die Standardeinstellungen als schlecht, was zu trivialen Modellen führt, die immer eine bestimmte Klasse ergeben. Dies ist besonders häufig, wenn eine Klasse viel mehr Instanzen als die anderen hat. Was ist Ihre Klassenverteilung?γC γ
scikit-learn verfügt nur über begrenzte Suchfunktionen für Hyperparameter. Sie können es jedoch zusammen mit einer Optimierungsbibliothek wie Optunity verwenden . Ein Beispiel zum Optimieren von Scikit-Learn-SVC mit Optunity finden Sie hier .
Haftungsausschluss: Ich bin der Hauptentwickler von Optunity.
quelle
Das Problem stellt sich als Parametertest heraus. Ich habe nicht versucht, wann
gamma
zwischen 0.0 (was 1 / n_feature ist) und 1 liegt. Auf meinen Datengamma
sollte sich etwas umdrehen1e-8
quelle