У меня есть функция, которая создаст несколько моделей машинного обучения, сравнит их и вернет ансамбль из n лучших результатов моделей. Я хочу, чтобы у пользователя была возможность передавать параметры для каждой модели индивидуально, но в противном случае вводить параметры по умолчанию. Я хочу сделать так, чтобы ввод параметров был интуитивно понятен и прост.
Вот как выглядит мой код:
Код: Выделить всё
def buildModel(X, y, n, rfParams, knnParams, SVCParams, lrParams, lgbParams, xgbParams):
mod1 = rf(**rfParams)
mod2 = Pipeline([('scaler', StandardScaler()), ('clf', knn(**knnParams))])
mod3 = Pipeline([('scaler', StandardScaler()), ('clf', SVC(**SVCParams))])
mod4 = Pipeline([('scaler', StandardScaler()), ('clf', lr(**lrParams))])
mod5 = lgb.LGBMClassifier(**lgbParams)
mod6 = xgb.XGBClassifier(**xgbParams)
mods = [mod1, mod2, mod3, mod4, mod5, mod6]
mod = ensemble(mods, n)
return mod
Я хочу, чтобы любой параметр, кроме X, y и n, был необязательным входным значением (т. е. пользователь мог вызвать buildModel(X, y, n)). Я также хочу, чтобы функция определяла, для какой модели предназначен параметр, без явного/жесткого кодирования. Я понимаю, что вы можете использовать *args или **kwargs, но я немного незнаком и хочу избежать массивного оператора if elif, поэтому я не решаюсь использовать словари и хочу сделать это надежным.
Достижимо ли это и какое решение является лучшим?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... parameters