Я пытаюсь реализовать следующий псевдокод в python с помощью sklearn DecisionTreeClassifier с глубиной = 1.
Псевдокод для AdaBoost
Однако у меня проблемы с выводом (3).
Я сохранил подогнанные классификаторы в списке вместе с соответствующей альфой. Я использую деревья решений из sklearn, и классификатор имеет следующий формат:
DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=1,
max_features=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, presort=False, random_state=None,
splitter='best')
Я получаю ошибку в python:
unsupported operand type(s) for *: 'DecisionTreeClassifier' and 'int'
Из моего кода: (Классификаторы - это список с элементами из итераций 0 ... M в формате (Gm (x), errorm, alpham)
for c in classifiers:
res += c[2]*c[0]
res = np.sign(res)
Как я могу умножить целое число на соответствующие классификаторы, а затем суммировать их, чтобы получить окончательный классификатор G (x)?
Любая помощь очень ценится.
EDIT:
с линией
new_classifier = lambda x: sum([c[2] * c[0](x) for c in classifiers])
предложенный Иваном Судосом, я получаю объект на форме:
<function adaBoost.<locals>.<lambda> at 0x1233f80d0>
Как можно вызвать функцию signum для этой объектной функции (?)?
Спасибо!