勾配ブースティング-極端な予測と0.5に近い予測


7

2つの異なるデータセットで2つの異なるGradient Boosting Classifierモデルをトレーニングするとします。あなたは、one-one-out交差検証を使用し、2つのモデルが出力する予測のヒストグラムをプロットします。ヒストグラムは次のようになります。 ここに画像の説明を入力してください

この:

ここに画像の説明を入力してください

したがって、1つのケースでは、予測(サンプル外/検証セット)はほとんどが極端(0と1に近い)であり、他のケースでは、予測は0.5に近いです。

それぞれのグラフから何が推測できますか?どのように違いを説明できますか?データセット/機能/モデルについて何か言えることはありますか?

私の直感は、最初のケースでは、機能はデータをよりよく説明するので、モデルはデータによりよく適合します(そして、おそらくデータに適合しますが、必ずしもそうではありませんが、検証/テストセットのパフォーマンスは、機能は実際にデータをよく説明しています)。2番目のケースでは、機能がデータを適切に説明しないため、モデルがデータに近すぎません。ただし、2つのモデルのパフォーマンスは、精度と再現率の点で同じである可能性があります。それは正しいでしょうか?

回答:


9

私は正しい直感であるべきだと思うものを示すために短いスクリプトを用意しました。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import ensemble
from sklearn.model_selection import train_test_split


def create_dataset(location, scale, N):
    class_zero = pd.DataFrame({
        'x': np.random.normal(location, scale, size=N),
        'y': np.random.normal(location, scale, size=N),
        'C': [0.0] * N
    })

    class_one = pd.DataFrame({
        'x': np.random.normal(-location, scale, size=N),
        'y': np.random.normal(-location, scale, size=N),
        'C': [1.0] * N
    })
    return class_one.append(class_zero, ignore_index=True)

def preditions(values):
    X_train, X_test, tgt_train, tgt_test = train_test_split(values[["x", "y"]], values["C"], test_size=0.5, random_state=9)
    clf = ensemble.GradientBoostingRegressor()
    clf.fit(X_train, tgt_train)
    y_hat = clf.predict(X_test)
    return y_hat

N = 10000
scale = 1.0
locations = [0.0, 1.0, 1.5, 2.0]

f, axarr = plt.subplots(2, len(locations))
for i in range(0, len(locations)):
    print(i)
    values = create_dataset(locations[i], scale, N)

    axarr[0, i].set_title("location: " + str(locations[i]))

    d = values[values.C==0]
    axarr[0, i].scatter(d.x, d.y, c="#0000FF", alpha=0.7, edgecolor="none")
    d = values[values.C==1]
    axarr[0, i].scatter(d.x, d.y, c="#00FF00", alpha=0.7, edgecolor="none")

    y_hats = preditions(values)
    axarr[1, i].hist(y_hats, bins=50)
    axarr[1, i].set_xlim((0, 1))

スクリプトの機能:

  • 2つのクラスが次第に分離可能になるさまざまなシナリオが作成されます-ここでこれのより正式な定義を提供できますが、直感を理解する必要があると思います
  • GBMリグレッサをテストデータに適合させ、テストX値をトレーニング済みモデルに供給する予測値を出力します

作成されたグラフは、各シナリオで生成されたデータがどのように見えるかを示し、予測値の分布を示します。解釈:分離可能性の欠如は、予測されたが0.5前後にあることを意味します。y

これはすべて直観を示しています。私はロジスティック回帰から始めますが、これにより数学が明らかに簡単になるとはいえ、より正式な方法でこれを証明することは難しくないと思います。

図1


編集1

2つのクラスが分離できない左端の例では、モデルのパラメーターをデータに適合させるように設定すると(たとえば、深いツリー、多数のツリーと機能、比較的高い学習率)、極端な結果を予測するモデルですね。言い換えれば、予測の分布は、モデルがデータにどれほど厳密にフィットしたかを示していますか?

非常に深いツリー決定木があると仮定しましょう。このシナリオでは、予測値の分布が0と1でピークになるのがわかります。また、トレーニングエラーも低くなっています。トレーニングエラーを任意に小さくすることができます。ツリーの各リーフがトレインセット内の1つのデータポイントに対応し、トレインセット内の各データポイントがツリー内のリーフに対応するポイントまで、深いツリーオーバーフィットを実現できます。トレーニングセットで非常に正確なモデルのテストセットでのパフォーマンスの低下は、過剰適合の明確な兆候です。私のチャートではテストセットの予測を示していますが、それらははるかに有益です。

もう1つ注意点:左端の例を見てみましょう。円の上半分にあるすべてのクラスAデータポイントと円の下半分にあるすべてのクラスBデータポイントでモデルをトレーニングしましょう。モデルは非常に正確で、予測値の分布は0と1にピークがあります。テストセットの予測(すべてのクラスAポイントは下半分の円にあり、クラスBポイントは上半分の円にあります)も同様です。 0と1でピーク-しかし、それらは完全に不正確になります。これは厄介な「敵対的な」トレーニング戦略です。それにもかかわらず、要約すると、ディストリビューションは分離可能性の程度を好みますが、それは本当に重要なことではありません。


2つのクラスが分離できない左端の例で推測していますが、モデルのパラメーターをデータに適合させるように設定すると(たとえば、深いツリー、多数のツリーと機能、比較的高い学習率)、極端な結果を予測するモデルですね。言い換えると、予測の分布は、モデルがデータにどれほど厳密にフィットしたかを示していますか?
rinspy

1

最初に、出力確率予測を調査するために、2つではなく1つのデータセットを使用することをお勧めします。理由は簡単です。データを変更した場合、誰が何が起こるかわからないからです。@IcannotFixThisの回答でデモされているように、データが重複から分離可能に変化すると、まったく同じモデルが異なる確率出力を持ちます。


限られた情報から、2つの異なるデータセットについて話し合うと主張する場合、「極端な予測」はモデルが過剰適合していること、データがモデルに対して「単純すぎる」ことを意味する可能性があると言えます


1

通常、予測はモデルによって異なります。決定木は一般に、確率としてほぼ解釈できるかなり「較正された」出力を生成します。たとえばSVMのようなものはそうではありません。しかし、これは過剰適合/過適合に大きく依存します。または機能の数について(いいえ、必ずしも「より良い」必要はありません)。実際、これが1つのクラスである場合、最初のクラスはおそらく過剰適合です。

しかし、まず最初に、他のクラスはどこにありますか?予測を行うときは、常に両方のクラスを(異なる色で)プロットする必要があります。あるクラスの予測からは、あまり言うことはできません。

パフォーマンスを測定し、機能からどの程度のことを学んだかを判断する場合は、ROC AUCのようなスコアを使用します。ここでは、分布ではなく、イベント順序が重要です。分布を操作する場合は、確率のキャリブレーション方法を確認することができます(とにかく、どの分類子が適切なキャリブレーションを生成するかを確認してください)。それらは完全ではありませんが、予測を確率に変換することを目的としています(したがって、出力に意味を与えます)。


0

最初のシナリオは、トレーニングデータの過剰適合が原因の可能性があります。サンプル内およびサンプル外のパフォーマンスは、使用している評価指標(または問題に適用可能)にも依存します。メトリックを比較する以外に、混同行列をチェックして、誤分類をチェックしてみてください。

ログロスのようなメトリックを使用し、正則化パラメーターを導入することは、別のオプションかもしれません(XGBoostをチェックしてください-アルファ、ベータ正則化パラメーターを追加できます)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.