2017-01-25 3 views
0

Я пытаюсь написать функцию, которая проходит через различные итерации алгоритма классификации (k-Средство).Передача аргументов функции Python как переменных

В sklearn.neighbors.KNeighborsClassifier есть несколько параметров для настройки: n_neighbors и leaf_size. Я хотел бы знать, есть ли способ указать, какой параметр нужно настроить в ходе конкретной итерации.

from sklearn.neighbors import KNeighborsClassifier 
def useNeighbors(iterations, *args): 
    print(iterations) #normal argument 
    for arg in args: 
     KNeighborsClassifier(arg=20) 

useNeighbors(2, "n_neighbors", "leaf_size") 

Я хочу, чтобы это по существу экземпляр экземпляр KNeighborsClassifer twice- в первый раз с # соседей на 20, а затем второй раз с размером листа на 20 (значения по умолчанию для числа соседей 5, и размер листа по умолчанию - 30).

Это, однако, дает удивительно

2 
TypeError: _init_params() got an unexpected keyword argument 'arg' 

Он печатает аргумент итераций, как и ожидалось, но KNeighborsClassifer не признает аргумент строка «N_NEIGHBORS» как мои попытки указать, какой параметр для настройки.

Как переключить параметр/аргумент, который я хочу настроить для разных итераций?

Кроме того, очевидно, что это игрушечный корпус - я спрашиваю, потому что я надеюсь интегрировать различные алгоритмы классификации ML в пакет ансамбля с гиперпараметрами, настроенными по методу марковской цепи Монте-Карло. Но для этого мне нужно указать, какие параметры в каждом алгоритме будут выполнять «шаги», найденные в цепочке Маркова, через каждую итерацию.

ответ

1

Вам просто нужно использовать spread:

from sklearn.neighbors import KNeighborsClassifier 
def useNeighbors(iterations, *args): 
    print(iterations) #normal argument 
    for arg in args: 
     my_dict = {} 
     my_dict[arg] = 20 
     KNeighborsClassifier(**my_dict) 

useNeighbors(2, "n_neighbors", "leaf_size") 
1

Если я понимаю, что вы хотите, вы можете использовать для этого partials. Пример

from functools import partial 
from sklearn.neighbors import KNeighborsClassifier 

    classifiers = [partial(KNeighborsClassifier, n_neighbors=20), 
        partial(KNeighborsClassifier, leaf_size=20)] 
    for classifier in classifiers: 
     classifier() 

Here «ы хорошее объяснение использования партиалы.

Смежные вопросы