我爲一個項目實現了Adaboost,但我不確定是否正確理解了adaboost。以下是我所實施的內容,請讓我知道它是否是正確的解釋。Adaboost與神經網絡
- 我的弱分類器是8個不同的神經網絡。這些預測中的每一個在完全訓練後都具有約70%的準確度。
- 我將所有這些網絡完全訓練,並收集他們對訓練集的預測;所以我在訓練集上有8個預測向量。
現在我使用adaboost。我對adaboost的解釋是,它會找到一個最終的分類器作爲我上面訓練的分類器的加權平均值,其作用是找到這些權重。所以,對於每個訓練示例我都有8個預測,並且我正在使用adaboost權重將它們組合起來。請注意,通過這種解釋,弱分類器在adaboost迭代過程中不會被重新訓練,只會更新權重。但更新後的權重實際上會在每次迭代中創建新的分類器。
這裏是僞代碼:
all_alphas = []
all_classifier_indices = []
initialize all training example weights to 1/(num of examples)
compute error for all 8 networks on the training set
for i in 1 to T:
find the classifier with lowest weighted error.
compute the weights (alpha) according to the Adaboost confidence formula
Update the weight distribution, according to the weight update formula in Adaboost.
all_alphas.append(alpha)
all_classifier_indices.append(selected_classifier)
T
後反覆,有T
阿爾法和T
分類指數;這些分類器索引將指向8個神經網絡預測向量中的一個。
然後在測試集上,對於每個示例,我通過總和alpha*classifier
進行預測。
我想與神經網絡使用的adaboost,但我想我已經曲解了AdaBoost算法錯誤..
那麼..究竟發生了什麼? – javadba
@javadba精確度或多或少保持不變。我之前沒有使用boost,並且我讀過它總是將準確度提高1到2%。 –
另一個問題,在adaboost過程中,基本/元分類器必須支持sample_weight屬性。但是Nerual網絡的重量是通過SGD或其他優化器更新的。如何將樣本權重添加到Nerual網絡 – machen