Пропустите диктофон для оценки scikit learn

Я пытаюсь передать параметры модели как dict в оценку Scikit-learn, и мне не повезло. Кажется, что я вставляю свой dict в один из параметров. Например:

params = {
 'copy_X': True, 
 'fit_intercept': False, 
 'normalize': True
}

lr = LinearRegression(params)

Дает мне:

LinearRegression(copy_X=True,
         fit_intercept={'copy_X': True, 'fit_intercept': False,'normalize': True},
     normalize=False)

Кроме того, я создал функцию для итерации по dict и может создать строку типа:

'copy_X=True, fit_intercept=True, normalize=False'

Это было так же неудачно. У кого-нибудь есть совет? Единственное ограничение, которое у меня есть, это данные будут поступать ко мне как dict (ну, собственно, json-объект загружается с json.uploads).

Благодарю.

Ответ 1

Лучшим решением для инициализации вашего оценщика с правильными параметрами было бы распаковать ваш словарь:

lr = LinearRegression(**params)

Если по какой-то причине вам нужно будет установить некоторые параметры впоследствии, вы можете использовать:

lr.set_params(params)

Это имеет преимущество перед использованием setattr в том, что позволяет Scikit учиться выполнять некоторые проверки правильности параметров.

Ответ 2

Я понял. Используется setattr как это.

for k,v in params.items():
   setattr(lr,k,v)

Ответ 3

fit_intercept - первый аргумент объекта LinearRegression

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html

Таким образом, это объясняет, почему ваш словарь передается этому аргументу, другие аргументы (также необязательные) copy_X и normalize не получают никакого параметра, поэтому используют значения по умолчанию.

Вы также можете сделать:

params = {
 'copy_X': True, 
 'fit_intercept': False, 
 'normalize': True
}

lr = LinearRegression(copy_X = params['copy_X'], \
                      fit_intercept = params['fit_intercept'], \
                      normalize = params['normalize'])