私は正しい直感であるべきだと思うものを示すために短いスクリプトを用意しました。
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
2つのクラスが分離できない左端の例では、モデルのパラメーターをデータに適合させるように設定すると(たとえば、深いツリー、多数のツリーと機能、比較的高い学習率)、極端な結果を予測するモデルですね。言い換えれば、予測の分布は、モデルがデータにどれほど厳密にフィットしたかを示していますか?
非常に深いツリー決定木があると仮定しましょう。このシナリオでは、予測値の分布が0と1でピークになるのがわかります。また、トレーニングエラーも低くなっています。トレーニングエラーを任意に小さくすることができます。ツリーの各リーフがトレインセット内の1つのデータポイントに対応し、トレインセット内の各データポイントがツリー内のリーフに対応するポイントまで、深いツリーオーバーフィットを実現できます。トレーニングセットで非常に正確なモデルのテストセットでのパフォーマンスの低下は、過剰適合の明確な兆候です。私のチャートではテストセットの予測を示していますが、それらははるかに有益です。
もう1つ注意点:左端の例を見てみましょう。円の上半分にあるすべてのクラスAデータポイントと円の下半分にあるすべてのクラスBデータポイントでモデルをトレーニングしましょう。モデルは非常に正確で、予測値の分布は0と1にピークがあります。テストセットの予測(すべてのクラスAポイントは下半分の円にあり、クラスBポイントは上半分の円にあります)も同様です。 0と1でピーク-しかし、それらは完全に不正確になります。これは厄介な「敵対的な」トレーニング戦略です。それにもかかわらず、要約すると、ディストリビューションは分離可能性の程度を好みますが、それは本当に重要なことではありません。