[英]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.