web-dev-qa-db-ja.com

sklearnのなげなわは収束しません

私が何かを実行すると

import numpy
from sklearn import linear_model
A= #something
b= #something
clf=linear_model.Lasso(alpha=0.015, fit_intercept=False, tol=0.00000000000001,
          max_iter=10000000000000, positive=True)
clf.fit(A,b)

エラーが発生します:

usr/local/lib/python2.7/dist-packages/scikit_learn-0.14.1-py2.7-linux-x86_64.Egg/
sklearn/linear_model/coordinate_descent.py:418: UserWarning: Objective did not
converge. You might want to increase the number of iterations
' to increase the number of iterations')

興味深いのは、Aがランク効率が悪いことは決してないということです。 (おもう)

11
gota

トールを増やしてみてください。

ドキュメント から:

tol:フロート、オプション

最適化の許容範囲:更新がtolより小さい場合、最適化コードはデュアルギャップの最適性をチェックし、tolより小さくなるまで続行します。

私のバージョンのscikit-learnでは、tolのデフォルトは0.0001です。許容範囲が非常に小さいため、最適化が低い値に達することはないと思います。

17
kazemakase

SOMETIMESが警告を取り除くのに役立った唯一のことは、反復回数を大幅に増やすことでした(トレーニング時間の大幅な増加を伴います)。

許容値を大きくすると、常に同じ警告が発生しますが、値が大きくなり、警告が削除されません。理由はわかりません。

重要な分析の補足として、次に何が起こるかに関係なく、ラッソ回帰を悪い兆候として使用すると、最初にこの警告が表示されると解釈します。
私にとっては、モデルが過剰適合している状況でほぼ常に発生しました。つまり、完全なトレーニングセット自体では良好に機能しましたが、相互検証とテストでは不十分でした。
警告を抑制したか(方法はあります)、繰り返し回数を増やして「自然に」警告を取り除いたかに関係なく、ほとんどの場合、戻ってLassoの機能セットを簡素化する必要がありました。効果的である(そして場合によっては、別のモデルを支持してラッソを完全に放棄する)。

0
Gene M