J'utilise des modèles SVM pour faire des prévisions à court terme des polluants atmosphériques. Pour former un nouveau modèle, je dois trouver des métaparamètres appropriés pour un modèle SVM (je veux dire C, gamma, etc.).
La documentation de Libsvm (et de nombreux autres livres que j'ai lus) suggère d'utiliser la recherche de grille pour trouver ces paramètres - donc je forme essentiellement le modèle pour chaque combinaison de ces paramètres à partir d'un certain ensemble et choisis le meilleur modèle.
Y a-t-il une meilleure façon de trouver des métaparamètres optimaux (ou presque optimaux)? Pour moi, c'est principalement une question de temps de calcul - une recherche dans la grille de ce problème prend environ deux heures (après avoir fait quelques optimisations).
Avantages de la recherche sur la grille:
- Il peut être facilement parallélisé - si vous avez 20 processeurs, il fonctionnera 20 fois plus vite, la parallélisation d'autres méthodes est plus difficile
- Vous vérifiez de grandes parties de l'espace métaparamétrique, donc s'il existe une bonne solution, vous la trouverez.
Si vous faites l'hypothèse qu'il existe une fonction relativement fluide sous-jacente à la grille de paramètres, vous pouvez faire certaines choses. Par exemple, une heuristique simple consiste à commencer par une grille de paramètres très grossière, puis à utiliser une grille plus fine autour du meilleur des réglages de paramètres de la grille grossière.
Cela a tendance à bien fonctionner dans la pratique, avec des mises en garde bien sûr. Premièrement, l'espace n'est pas nécessairement lisse et il pourrait y avoir des optima locaux . La grille grossière peut complètement les manquer et vous pourriez vous retrouver avec une solution sous-optimale. Notez également que si vous avez relativement peu d'échantillons dans votre jeu d'exclusion, vous pouvez avoir beaucoup de réglages de paramètres qui donnent le même score (erreur ou métrique que vous utilisez). Cela peut être particulièrement problématique si vous effectuez un apprentissage en plusieurs classes (par exemple, en utilisant la méthode un pour tous ), et que vous n'avez que quelques exemples de chaque classe dans votre ensemble d'exposés. Cependant, sans recourir à des techniques d'optimisation non linéaire désagréables, cela sert probablement de bon point de départ.
Il y a un bel ensemble de références ici . Dans le passé, j'ai adopté l'approche selon laquelle vous pouvez raisonnablement estimer une bonne gamme d'hyperparamètres du noyau en inspectant le noyau (par exemple, dans le cas du noyau RBF, en veillant à ce que l'histogramme des valeurs du noyau donne une bonne répartition des valeurs, plutôt que d'être biaisé vers 0 ou 1 - et vous pouvez aussi le faire automatiquement sans trop de travail), ce qui signifie que vous pouvez réduire la plage avant de commencer. Vous pouvez ensuite concentrer votre recherche sur d'autres paramètres tels que le paramètre de régularisation / capacité. Cependant, bien sûr, cela ne fonctionne qu'avec des noyaux précalculés, bien que vous puissiez estimer cela sur un sous-ensemble aléatoire de points si vous ne souhaitez pas utiliser de noyaux précalculés, et je pense que cette approche conviendrait également.
la source
J'utilise le recuit simulé pour rechercher des paramètres.
Le comportement est régi par quelques paramètres:
k
est la constante de Boltzmann.T_max
est votre température de départ.T_min
est votre seuil de fin.mu_T
(μ
) représente la baisse de la température (T->T/μ
)i
est le nombre d'itérations à chaque températurez
est une taille de pas - vous déterminez ce que cela signifie exactement. Je me déplace au hasard à l'intérieurold*(1±z)
.p = e^{-(E_{i+1} - E_i)/(kT)}
.T->T/μ
toutes lesi
itérations jusqu'à ce que vous frappiezT_min
.Jouez un peu avec les paramètres et vous devriez pouvoir trouver un ensemble qui fonctionne bien et rapidement.
Et la bibliothèque scientifique GNU comprend un recuit simulé.
la source
Si quelqu'un est intéressé, voici quelques-unes de mes réflexions sur le sujet:
la source
Si le noyau est radial, vous pouvez utiliser cette heuristique pour obtenir une bonneσ - L'optimisation C est alors beaucoup plus facile.
la source