[英]Dictionary Iteration Lambda Function
我一直在遍历 arrays 字典,并对字典中的每个数组元素应用线性回归。
from sklearn.linear_model import LinearRegression
model = LinearRegression()
for i in my_dict.keys():
test = model.fit(x_val.reshape(-1,1), my_dict[i].reshape(-1,1))
coeff = float(test.coef_)
intercept = float(test.intercept_)
my_dict[i] = lambda x: coeff * x + intercept
在每次迭代中,我非常有信心将适当的系数和截距分配给 lambda function。 但是,似乎字典中每个存储的 lambda function 都使用系数并截取字典中的“最后一个”键。 我似乎无法弄清楚为什么会这样。 谢谢!
Edit: I'm aware I can just assign the linear regressor object to each key instead of using a lambda function (I just preferred lambda functions). 然而,这并没有解决这个问题。
这是 Python 中的一个怪癖——闭包中的变量查找基于包含 scope 和变量名称的组合。 由于您的 lambdas 是在模块 scope 中定义的(请注意, for
循环不会创建新范围),并且由于名称coeff
和intercept
没有更改,因此每次查找将始终是循环最后一次迭代的值。
要解决此问题,您可以执行以下操作之一:
my_dict[i] = lambda x: coeff * x + intercept
在本地 functioncoeff
并intercept
到 lambda 的定义中: my_dict[i] = lambda x, coeff=coeff, intercept=intercept: coeff * x + intercept
my_dict
(或其他容器)中的单个coeff
和intercept
值,然后在需要时将它们拉出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.