コスト関数を最小化するために、scipy.optimize.fmin_bfgsでロジスティック回帰を使用します。コスト関数は特定のデータ セットに対して一定のままであり、BFGS は収束しないため、ラッソ + リッジ正則化を適用したいと考えています。
ここで、最適な組み合わせを見つけるために、正則化パラメーター lambda1/2 のさまざまな値のコストを最適化してみたいと思います。
for lambda1 in range(...):
for lambda2 in range(..):
scipy.optimize.fmin_bfgs(...) # Optimize cost with lambda1 and lambda2
問題は、BFGS が収束していないため、lambda1/2 の最初の値の呼び出しに「永遠に」とどまることです。
しばらくすると fmin_bfgs を自動的に停止する方法はありますか? 数千のサンプルと多数の機能/サンプルがあるため、 maxiterパラメーターは役に立ちません。
scipy 0.11 では、fmin_bfgs にmaxfunパラメータがあります。これを scipy 0.10 で何らかの方法でエミュレートできますか?
編集: 一般的な要求により、関連するコードの一部を次に示します。
コストを計算する関数 (通常の表記が適用されます):
def computeCost(theta, X, y):
h = sigmoid(X.dot(theta.T))
J = y.T.dot(log(h)) + (1.0 - y.T).dot(log(1.0 - h))
J_reg2 = theta[1:]**2
J_reg1 = theta[1:]
cost = (-1.0 / m) * (J.sum() + LAMBDA2 * J_reg2.sum() + LAMBDA1 * J_reg1.sum())
return cost
fmin_bfgs 関数の呼び出し:
initial_thetas = numpy.zeros((len(train_X[0]), 1))
myargs = (train_X, train_y)
theta = scipy.optimize.fmin_bfgs(computeCost, x0=initial_thetas, args=myargs)