Ошибка TypeError при вызове метода set_params() объекта CatBoost из Си
Имитирую на си код python
model = cb.CatBoostClassifier()
model.set_params(
class_names=('<=50K', '>50K'),
loss_function='Logloss',
eval_metric='AUC',
custom_metric=['AUC'],
iterations=100,
random_seed=20181224,
learning_rate=0.4234185321620083,
depth=5,
l2_leaf_reg=9.464266235679002)
model.fit(indata, Y, cat_features = cat_new)
аналогичный на Си: Полный код тут
PyObject *dict = Py_BuildValue("{s:i,s:s,s:i,s:f,s:i,s:f,s:s}", "iterations", 100, "loss_function", "Logloss", "random_seed",43 ,
"learning_rate", 0.4234185321620083, "depth", 5, "l2_leaf_reg", 9.464266235679002 , "eval_metric","AUC");
PyObject *name = Py_BuildValue("s","set_params");
pVal = PyObject_CallMethodObjArgs(pInstance, name, dict);
if (pVal == NULL){
printf("pval is NULL\n");
PyErr_Print();
} else {
Py_DECREF(pVal);
}
Получаю ошибку:
TypeError: CatBoost.set_params() takes 1 positional argument but 9 were given
Ответы (1 шт):
Автор решения: user1514692
→ Ссылка
Тут не подходит вызов PyObject_CallMethodObjArgs(...) надо искать другой метод вызова.
Вызов:
pVal = PyObject_CallMethodObjArgs(pInstance, name, dict);
# должен быть таким, тогда ошибки не будет, но это не правильно
# это эквивалентно вызову model.set_params( dict ),
# а все-таки хотелось добиться вызова model.set_params( parm1, parm2, ..., parnN ),
pVal = PyObject_CallMethodObjArgs(pInstance, name, dict, NULL);