Пропустите диктофон для оценки 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'])