0

基本分類子として決定木の切り株で AdaBoostClassifier を使用しようとしています。AdaBoostClassifier による重み調整により、SAMME.R オプションと SAMME オプションの両方でエラーが発生していることに気付きました。

ここで私がやっていることの簡単な概要です

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

adaboost の SAMME.R アルゴリズムを試しましたが、このエラーのため、その場合は 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)

アダブーストを使用する前と、トレーニングされた分類器をテストしようとするときの両方で、データの次元は分類器が期待する形式と実際に互換性があります。これらのエラーは何を示していますか?

4

1 に答える 1