2017-07-03 3 views
1

Par défaut, l'apprentissage de la régression logistique initialise les coefficients à zéro. Cependant, je voudrais initialiser les coefficients moi-même. Cela serait utile, par exemple, si un entraînement précédent s'est écrasé après plusieurs itérations - je pourrais simplement recommencer l'entraînement avec le dernier ensemble de coefficients connu. Est-ce possible avec l'une des API basées sur un ensemble de données/base de données, de préférence avec Scala?Initialisation des coefficients de régression logistique lors de l'utilisation des API ML basées sur un jeu de données Spark?

regardant le code source d'allumage, il semble qu'il y est un procédé setInitialModel pour initialiser le modèle et ses coefficients, but it's unfortunately marked as private. L'API basée sur RDD semble permettre l'initialisation des coefficients: l'une des surcharges LogisticRegressionWithSGD.run(...) accepte un vecteur initialWeights. Cependant, je voudrais utiliser l'API basée sur le jeu de données au lieu de l'API basée sur RDD car (1) la première supporte la régularisation élastique nette (je ne pouvais pas comprendre comment faire net élastique avec la régression logistique basée sur RDD) (2) parce que the RDD-based API is in maintenance mode.

Je pourrais toujours essayer d'utiliser la réflexion pour appeler cette méthode setInitialModel privée, mais je voudrais éviter cela si possible (et peut-être qui fonctionnerait même pas ... Je ne peux pas dire si setInitialModel est marqué privé une bonne raison).

Répondre

0

N'hésitez pas à remplacer la méthode. Oui, vous devrez copier cette classe dans votre propre espace de travail. C'est bien: ne craignez pas.

Lorsque vous construisez votre projet via maven ou -soit sbt - votre copie locale de la classe sera « gagnant » et ombre celui MLlib. Heureusement, les autres classes de ce même paquet seront et non.

J'ai utilisé cette approche plusieurs fois avec des classes Spark écrasantes: en fait vos temps de construction devraient aussi être petits.