2017-06-03 197 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