如何在sklearn的SelectKBest()中设置评分函数的参数

我在sklearn中使用SelectKBest()类进行特征选择。SelectKBest()可以接受一个可调用的评分函数作为输入。在这种情况下,我希望使用mutual_info_regression作为评分函数。mutual_info_regression可以接受一些参数,我希望自己设置这些参数。例如,我想设置random_state = 0。问题是我不确定如何将参数传递给评分函数,因为评分函数本身就是SelectKBest()的一个参数。显然,像SelectKBest(score_func = mutual_info_classif(random_state=0))这样的做法是行不通的,因为mutal_info_classif函数会被直接调用。我觉得这可能是一个关于Python类的非常基础的问题,但我似乎找不到任何解决我所遇到的问题的答案。非常感谢您的时间!


回答:

您可以创建另一个函数来调用mutual_info_regression,然后传递这个函数:

def my_score(X, y):
    return mutual_info_regression(X, y, random_state=0)
SelectKBest(score_func=my_score)

Python标准库提供了一个有用的辅助工具来创建这样的函数——它叫做functools.partial。它允许创建一些参数预设的函数;你可以不手动定义my_score,而是写成

from functools import partial
my_score = partial(mutual_info_regression, random_state=0)
SelectKBest(score_func=my_score)

当然,您也可以直接传递partial,这将非常接近您的示例:

from functools import partial
SelectKBest(score_func=partial(mutual_info_classif, random_state=0))

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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