小编Ita*_*alo的帖子

xgboost二进制逻辑回归

我在使用xgboost运行逻辑回归时遇到问题,可以在下面的示例中进行总结.

让我们假设我有一个非常简单的数据框,有两个预测变量和一个目标变量:

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

我可以发布图像,因为我是新来的,但我们可以清楚地看到,当X1 = 1且X2 = 0时,Y为0,当X1 = 0且X2 = 1时,Y为1.

我的想法是构建一个输出观察属于每个类的概率的模型,所以如果我运行xgboost试图预测两个新观察(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)) 
Run Code Online (Sandbox Code Playgroud)

输出是:

array([[ 0.5,  0.5],
       [ 0.5,  0.5]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

我想,这意味着,对于第一次观察,它有50%的可能性属于每个类.

我想知道为什么算法输出一个正确的(1,0)或更接近于如果变量之间的关系是明确的.

仅供参考,我确实尝试过更多数据(为简单起见,我只使用了4行)并且行为几乎相同; 我注意到的是,不仅概率不总和为1,它们通常都非常小:(这个结果在不同的数据集上,与上面的例子无关)

array([[ 0.00356463,  0.00277259],
       [ 0.00315137,  0.00268578],
       [ 0.00453343,  0.00157113],
Run Code Online (Sandbox Code Playgroud)

python regression machine-learning logistic-regression xgboost

11
推荐指数
1
解决办法
4050
查看次数