sklearnadaboostソースコード分析

CSDN

sklearn.ensemble._weight_boosting.BaseWeightBoosting.fit

for iboost in range(self.n_estimators):
    # Boosting step
    sample_weight, estimator_weight, estimator_error = self._boost(
        iboost,
        X, y,
        sample_weight,
        random_state)

    sample_weight_sum = np.sum(sample_weight)

    if iboost < self.n_estimators - 1:
        # Normalize
        sample_weight /= sample_weight_sum

sklearn.ensemble._weight_boosting.AdaBoostClassifier._boost_discrete

estimator.fit(X, y, sample_weight=sample_weight)

sample_weightあるWMI W_ {MI}wm i、サンプル重量に応じたフィッティング

# Instances incorrectly classified
incorrect = y_predict != y

# Error fraction
estimator_error = np.mean(
    np.average(incorrect, weights=sample_weight, axis=0))

誤分類率は、誤分類されたサンプルの重みの合計です。em= ∑ i = 1 N wmi I(G m(xi)≠yi)e_m = \ sum_ {i = 1} ^ {N} w_ {mi} I (G_m(x_i)\ neq y_i)eメートル=i = 1Nwm iGメートルx)。=Y)。

ここに画像の説明を挿入

弱い学習者の効果がランダムでさえない場合は、早めに止めてください。

ここに画像の説明を挿入

G mG_mを計算しますGメートルαm= 1 2 log 1 − emem \ alpha_m = \ frac {1} {2} log \ frac {1-e_m} {e_m}の係数aメートル=21l o geメートル1 eメートル

SAMMEアルゴリズムは複数の分類を考慮し、それをlearning_rateの減衰で乗算して、正則化を実現します。

ここに画像の説明を挿入

wmi = exp(−yiαm− 1 G m − 1(xi))w_ {mi} = exp(-y_i \ alpha_ {m-1} G_ {m-1}(x_i)) wm i=E X P - YaM - 1GM - 1x

试想、y×y ^ y \回\帽子{y}Y××Y^、2番目の分類では、2つが異なる場合にのみ、1になります。

実際、この記事では、複数のカテゴリの状況も考慮に入れています。マルチカテゴリの場合、変更する必要があるのはαm\ alpha_mだけです。aメートルこれがコードでestimator_weightの計算です

おすすめ

転載: blog.csdn.net/TQCAI666/article/details/113248906