2017-06-03 193 views
1

我在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类的一个非常基本的问题,但我似乎无法找到任何解决我所寻找的问题。在此先感谢您的时间!如何在sklearn中设置参数以评分函数SelectKBest()

回答

2

您可以创建调用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)) 
+0

啊,是我看到的。万分感谢! – Skip