有没有办法使用XGBoostRegressor获得预测的概率?

问题描述 投票:-1回答:2

我已经构建了一个XGBoost回归模型,它使用了大约200个预测连续时间变量的分类特征。

但我希望得到实际预测和预测概率作为输出。有没有办法从XGBoostRegressor模型中获取此信息?

所以我都想要和P(Y | X)作为输出。知道怎么做吗?

python machine-learning xgboost
2个回答
1
投票

回归中没有概率,在回归中,您将获得的唯一输出是预测值,这就是为什么它被称为回归,因此对于任何回归量,预测的概率是不可能的。它只在分类中存在。


0
投票

如前所述,没有与回归相关的概率。

但是,您可以在该回归中添加confidence interval,以查看您的回归是否可以信任。

但需要注意的一点是,数据的方差可能不同。我们假设您研究基于时间的现象。具体而言,您可以在烤箱内获得(x)时间(例如秒)之后的温度(y)。在x = 0s时它处于20°C,你开始加热它,并想知道进化以便在x秒后预测温度。 20秒后和5分钟后的变化可能相同,或者完全不同。这叫做heteroscedasticity

如果您想使用置信区间,您可能希望确保处理异方差性,因此所有数据的间隔都相同。

您可以尝试获取已知输出的分布并比较该曲线上的预测,并检查pvalue。但是,这只会给你一个衡量,即在不考虑输入的情况下获得输出的真实程度。如果您知道您的输入/输出是在特定的时间间隔内,这可能会起作用。

  • 编辑我就是这样做的。显然,输出是你的实际输出。 import numpy as np import matplotlib.pyplot as plt from scipy import integrate from scipy.interpolate import interp1d N = 1000 # The number of sample mean = 0 std = 1 outputs = np.random.normal(loc=mean, scale=std, size=N) # We want to get a normed histogram (since this is PDF, if we integrate # it must be equal to 1) nbins = N / 10 n = int(N / nbins) p, x = np.histogram(outputs, bins=n, normed=True) plt.hist(outputs, bins=n, normed=True) x = x[:-1] + (x[ 1] - x[0])/2 # converting bin edges to centers # Now we want to interpolate : # f = CubicSpline(x=x, y=p, bc_type='not-a-knot') f = interp1d(x=x, y=p, kind='quadratic', fill_value='extrapolate') x = np.linspace(-2.9*std, 2.9*std, 10000) plt.plot(x, f(x)) plt.show() # To check : area = integrate.quad(f, x[0], x[-1]) print(area) # (should be close to 1)

This is what I get from the method above.

现在,插值方法对于异常值并不好。如果预测数据与您的发行版相距甚远(超过标准数的3倍),则无法正常工作。除此之外,您现在可以使用PDF获得有意义的结果。

它并不完美,但它是我在那段时间想出的最好的。我确信有更好的方法可以做到这一点。如果您的数据遵循正常的法律,那就变得微不足道了。

© www.soinside.com 2019 - 2024. All rights reserved.