【发布时间】:2016-05-10 06:01:08
【问题描述】:
我在使用 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], )})
我可以发图片,因为我是新来的,但是我们可以清楚地看到,当 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))
输出是:
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],
【问题讨论】:
-
你的两个预测变量只是 0 和 1 吗?如果是这样,您的特征只有 4 种可能的组合,因此应该只期望(最多)4 个唯一的概率预测。
-
是的。好的,只有 4 种可能的组合是有道理的,但不确定这如何回答我的问题。
-
我很困惑,你的问题是什么?我以为你不明白为什么你的概率预测几乎没有差异。
-
我的问题是:为什么预测(0.5, 0.5 - 表示 50% 的机会成为 1 类和 50% 的机会成为 0 类)是否清楚当 X1 =1 和 X2= 0,Y为0
标签: python machine-learning regression logistic-regression xgboost