如何解释使用定义为函数的’lambda’键对元组列表进行迭代?

我对犯罪数据集使用了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在循环中稍后被用于某种类型的分析(?)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注