我编写了一个使用坐标下降来执行套索回归的函数。
代码如下:
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 :(得分:0)
你是对的。你的if语句和你的隐含意思是你的递归"停止条件"。一旦if条件为false,它将退出函数并通过退出所有父调用结束递归。
您必须确保此语句至少为false一次,以避免最大深度递归异常。