我对犯罪数据集使用了Lasso回归算法。在模型训练和测试后,为了显示非零系数,使用了以下代码:
for e in sorted (list(zip(list(X_crime), linlasso.coef_)), key = lambda e: -abs(e[1])): if e[1] != 0: print('\t{}, {:.3f}'.format(e[0], e[1]))
我对这段代码的运作方式不太清楚!我知道这是个迭代,’e‘是元组的键,也是运行循环的索引。这个迭代是在元组列表上进行的,我想了解更多关于代码中键声明的信息,尤其是这一行。
key = lambda e: -abs(e[1]))
如何解释这个?这是范围声明吗?我在哪里可以找到实现这种迭代的Python示例代码?它的意义是什么?
回答:
我知道 …
e
是 … 也是运行循环的索引
e
不是索引,它是正在迭代的序列中的当前项目。
key = lambda e: -abs(e[1]))
lambda函数从e
中提取第二个项目,将其传递给abs
,乘以负一并返回结果。
由于不知道abs
是什么或者你的数据值是什么,我为说明目的编造了它们。
>>> X_crime = [3,1,2]>>> linlasso_coef_ = [9,10,11]>>> def abs(n):... return n*n
分解循环和lambda函数:
你正在迭代一个排序的元组列表。
>>> list(zip(list(X_crime), linlasso_coef_))[(3, 9), (1, 10), (2, 11)]>>> sorted(list(zip(list(X_crime), linlasso_coef_)))[(1, 10), (2, 11), (3, 9)]
在第一次迭代中,e
是 (1,10)
。
>>> >>> e = (1,10)>>> e[1]10>>> abs(e[1])100>>> -abs(e[1])-100
lambda
创建一个一次性函数。
>>> lambda e: -abs(e[1])<function <lambda> at 0x00000213E08538B0>
该函数被赋值给名称key
>>> key = lambda e: -abs(e[1])>>> key<function <lambda> at 0x00000213E0853F70>
以便稍后使用(?)
>>> key(e)-100>>>
它的意义是什么?
没有足够的信息让任何人充分评论,但推测key
在循环中稍后被用于某种类型的分析(?)。