1

コスト関数を最小化するために、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)
4

1 に答える 1

1

問題は反復回数ではありません。ラムダ数が変化しない理由は、最適化が機能していないためです。Scipyは、forループを介してそれらを提供するのではなく、それらの数値を計算する必要があります。

たぶん、もっと多くのコードを含めることができれば、それを修正する方法を理解するのが簡単になるでしょう。

于 2012-04-25T09:56:05.103 に答える