12

次の例に要約できる xgboost でロジスティック回帰を実行する際に問題があります。

2 つの予測子と 1 つのターゲット変数を持つ非常に単純なデータフレームがあるとします。

df= pd.DataFrame({'X1' : pd.Series([1,0,0,1]), 'X2' : pd.Series([0,1,1,0]), 'Y' : pd.Series([0,1,1,0], )})

ここに新しいので画像を投稿できますが、X1 = 1およびX2 = 0の場合、Yは0であり、X1 = 0およびX2 = 1の場合、Yは1であることがはっきりとわかります.

私の考えは、観測が各クラスに属する確率を出力するモデルを構築することです。そのため、xgboost を実行して 2 つの新しい観測 (1,0) と (0,1) を予測しようとすると、次のようになります。

X = df[['X1','X2']].values            
y = df['Y'].values

params  = {'objective': 'binary:logistic',
          'num_class': 2
          } 

clf1 = xgb.train(params=params, dtrain=xgb.DMatrix(X, y), num_boost_round=100)                    
clf1.predict(xgb.DMatrix(test.values)) 

出力は次のとおりです。

array([[ 0.5,  0.5],
       [ 0.5,  0.5]], dtype=float32)

これは、最初の観測では、それが各クラスに属する可能性が 50% あることを意味すると思います。

変数間の関係が明確な場合、アルゴリズムが適切な (1,0) またはそれに近いものを出力しない理由を知りたいです。

参考までに、より多くのデータを試してみましたが (簡単にするために 4 行のみを使用しています)、動作はほぼ同じです。私が気付いたのは、確率の合計が 1 にならないだけでなく、多くの場合、そのように非常に小さいことです: (この結果は別のデータセットでのものであり、上記の例とは関係ありません)

array([[ 0.00356463,  0.00277259],
       [ 0.00315137,  0.00268578],
       [ 0.00453343,  0.00157113],
4

1 に答える 1