J'utilise actuellement Scikit learn avec le code suivant:
clf = svm.SVC(C=1.0, tol=1e-10, cache_size=600, kernel='rbf', gamma=0.0,
class_weight='auto')
puis ajuster et prévoir pour un ensemble de données avec 7 étiquettes différentes. J'ai une sortie bizarre. Quelle que soit la technique de validation croisée que j'utilise, l'étiquette prédite sur l'ensemble de validation sera toujours l'étiquette 7.
J'essaie d'autres paramètres, y compris celui par défaut complet ( svm.SVC()
) mais tant que la méthode du noyau que j'utilise est à la rbf
place de poly
ou linear
cela ne fonctionnerait tout simplement pas, alors que cela fonctionne très bien pour poly
et linear
.
D'ailleurs, j'ai déjà essayé la prédiction sur les données des trains au lieu des données de validation et cela correspond parfaitement.
Est-ce que quelqu'un voit ce genre de problème avant et sait ce qui se passe ici?
Je ne regarde jamais ma distribution de classe en détail mais je sais qu'elle devrait être d'environ 30% d'entre eux sont 7, 14% sont 4.
J'essaie même une implémentation manuelle 1-vs-rest et ce n'est toujours pas utile.
la source
Réponses:
Une cause probable est le fait que vous n'accordez pas votre modèle. Vous devez trouver de bonnes valeurs pour et . Dans votre cas, les valeurs par défaut s'avèrent mauvaises, ce qui conduit à des modèles triviaux qui donnent toujours une certaine classe. Ceci est particulièrement courant si une classe a beaucoup plus d'instances que les autres. Quelle est votre distribution de classe?C γ
scikit-learn dispose de fonctionnalités de recherche hyperparamétriques limitées, mais vous pouvez l'utiliser avec une bibliothèque de réglages comme Optunity . Un exemple sur le réglage de SVC Scikit-Learn avec Optunity est disponible ici .
Avertissement: je suis le développeur principal d'Optunity.
la source
Le problème se révèle être un test de paramètres. Je n'ai pas essayé quand
gamma
est entre 0.0 (qui est 1 / n_feature) et 1. Sur mes donnéesgamma
devraient être tournées vers quelque chose autour1e-8
la source