Ich würde vermuten, dass der Grund, warum das Hinzufügen einer L1-Strafe die Dinge erheblich verlangsamt, darin besteht, dass eine L1-Strafe nicht differenzierbar ist (dh ein absoluter Wert), während die L2-Strafe dies ist. Dies bedeutet, dass die Oberfläche der Funktion nicht glatt ist und daher Standard-Quasi-Newton-Methoden große Probleme mit diesen Problemen haben. Denken Sie daran, dass eine Möglichkeit, sich eine Quasi-Newton-Methode vorzustellen, darin besteht, dass sie eine quadratische Approximation der Funktion vornimmt und dann der ursprüngliche Vorschlag das Maximum dieser Approximation ergibt. Wenn die quadratische Näherung ziemlich gut mit der Zielfunktion übereinstimmt, sollten wir erwarten, dass der Vorschlag nahe am Maximum (oder Minimum, je nachdem, wie Sie die Welt betrachten) liegt. Wenn Ihre Zielfunktion jedoch nicht differenzierbar ist, kann diese quadratische Näherung sehr schlecht sein.
Wenn Sie ein R-Paket gefunden haben, das BFGS für L1-Strafen implementiert, versuchen Sie es auf jeden Fall. BFGS ist im Allgemeinen ein sehr allgemeiner Algorithmus zur Optimierung. Wie bei jedem generischen Algorithmus wird es viele Sonderfälle geben, in denen dies nicht gut funktioniert. Algorithmen, die speziell auf Ihr Problem zugeschnitten sind, sollten eindeutig besser funktionieren (vorausgesetzt, das Paket ist so gut, wie es der Autor behauptet: Ich habe noch nichts von lbfgs gehört, aber es gibt eine Menge großartiger Dinge, von denen ich noch nichts gehört habe. Update : I. Ich habe Rs lbfgs-Paket verwendet, und die L-BFGS-Implementierung, die sie haben, ist ziemlich gut! Ich habe immer noch nicht den OWL-QN-Algorithmus verwendet, auf den sich das OP bezieht.
Wenn es für Sie nicht funktioniert, können Sie die "Nelder-Mead" -Methode mit Rs Optim ausprobieren. Es werden keine Derivate zur Optimierung verwendet. Als solches ist es normalerweise langsamer bei einer glatten Funktion, aber stabiler bei einer nicht glatten Funktion, wie Sie sie haben.