Я пытаюсь использовать AdaBoostClassifier с пеной дерева решений в качестве базового классификатора. Я заметил, что корректировка веса, производимая AdaBoostClassifier, давала мне ошибки как для параметров SAMME.R, так и для SAMME.проблемы с весом в adiboost scikit-learn
Вот краткий обзор того, что я делаю
def train_adaboost(features, labels):
uniqLabels = np.unique(labels)
allLearners = []
for targetLab in uniqLabels:
runs=[]
for rrr in xrange(10):
feats,labs = get_binary_sets(features, labels, targetLab)
baseClf = DecisionTreeClassifier(max_depth=1, min_samples_leaf=1)
baseClf.fit(feats, labs)
ada_real = AdaBoostClassifier(base_estimator=baseClf,
learning_rate=1,
n_estimators=20,
algorithm="SAMME")
runs.append(ada_real.fit(feats, labs))
allLearners.append(runs)
return allLearners
Я смотрел на подгонке для каждого отдельного дерева решений классификатора, и они могут предсказать некоторые ярлыки. Однако, когда я смотрю на AdaBoostClassifier, используя этот базовый классификатор, я получаю ошибки в алгоритме повышения веса.
def compute_confidence(allLearners, dada, labbo):
for ii,thisLab in enumerate(allLearners):
for jj, thisLearner in enumerate(thisLab):
#accessing thisLearner's methods here
методы дают ошибки, подобные этим:
ipdb> thisLearner.predict_proba(myData)
PATHTOPACKAGE/lib/python2.7/site-packages/sklearn/ensemble/weight_boosting.py:727: RuntimeWarning: invalid value encountered in double_scalars proba /= self.estimator_weights_.sum() *** ValueError: 'axis' entry is out of bounds
ipdb> thisLearner.predict(myData)
PATHTOPACKAGE/lib/python2.7/site-packages/sklearn/ensemble/weight_boosting.py:639: RuntimeWarning: invalid value encountered in double_scalars pred /= self.estimator_weights_.sum() *** IndexError: 0-d arrays can only use a single() or a list of newaxes (and a single ...) as an index
Я попытался SAMME.R аль gorithm для AdaBoost, но я не могу поместиться даже AdaBoost в этом случае из-за этой ошибки [...]
File "PATH/sklearn/ensemble/weight_boosting.py", line 388, in fit return super(AdaBoostClassifier, self).fit(X, y, sample_weight)
File "PATH/sklearn/ensemble/weight_boosting.py", line 124, in fit X_argsorted=X_argsorted)
File "PATH/sklearn/ensemble/weight_boosting.py", line 435, in _boost X_argsorted=X_argsorted)
File "PATH/sklearn/ensemble/weight_boosting.py", line 498, in _boost_real (estimator_weight < 0)))
ValueError: non-broadcastable output operand with shape (1000) doesn't match the broadcast shape (1000,1000)
размеры данных фактически совместимы с форматом, который ожидает классификатор, как до использования adaboost, так и при попытке проверить обученные классификаторы. Что означают эти ошибки?
Не могли бы вы описать, что 'myData' в терминах типа (массив или список?), dtype, shape. – ogrisel
Конечно. В случае, когда я получал эти ошибки, типы, dtype и shape были такими же, как для myData (использовались как подвиги ниже) и лабораторий. Для умений: dtype ('float64'),, (1000, 20) Для лабораторий: dtype ('int8'), , (1000, 1). Решение было тривиально для проблемы (я написал ответ ниже), я просто не был знаком с формами массива python. –
aarslan