2016-08-21 13 views
-3

私は、座標降下を使って、ラッセル回帰を実行する関数を書いています。次のようにPythonのIf-conditionで再帰呼び出しを使用する

コードは次のとおりです。とき、私ここに

def lasso_cyclical_coordinate_descent(feature_matrix, output, weights, l1_penalty, tolerance): 
    for i in range(len(weights)): 
     old_weights_i = weights[i] 
     weights[i] = lasso_coordinate_descent_step(i, feature_matrix, output, weights, l1_penalty) 
     diff = [] 
     diff.append(abs(old_weights_i - weights[i])) 
    if max(diff) > tolerance: 
     weights = lasso_cyclical_coordinate_descent(feature_matrix, output, weights, l1_penalty, tolerance) 
    return weights    

私の思考は、If条件内部再帰呼び出しを実行すると、条件を満たさない場合にのみ返される重みをもたらすことだった、それはあります私の望む結果を得てください。それまでは、関数は再帰的に呼び出され続けます。

私の論理は正しいですか?私はこれを他の誰かと話しました。彼はそうではないと言いましたが、それ以上説明しませんでした。

+0

'return'ステートメントは、関数の一部になるように字下げする必要があります。 – Barmar

+0

オハイオ州申し訳ありませんが、コードでは、ここでインデントするのを忘れていました。 – Sabhijiit

+1

このコードについて私に尋ねる理由がわかりません。なぜそれを実行し、どのようにそれを参照してくださいなぜですか?私たちはそれをテストすることはできません。(それは[mcve]ではないので)私たちが貢献することはたくさんありません。 – Blckknght

答えて

0

あなたは正しいです。あなたのif文とimplicite elseはあなたの再帰「停止条件」です。 if条件がfalseになるとすぐに、すべての親呼び出しを終了して関数を終了し、再帰を終了します。

最大深度再帰例外を回避するには、この文を少なくとも1回はfalseにする必要があります。

+0

申し訳ありません、ありがとうございます! – Sabhijiit

関連する問題