Python 有没有一种方法可以使用XGBoostTregressor获得预测的概率?

Python 有没有一种方法可以使用XGBoostTregressor获得预测的概率?,python,machine-learning,xgboost,Python,Machine Learning,Xgboost,我已经建立了一个XGBoostTregressor模型,使用大约200个分类特征预测一个连续时间变量 但是我想得到实际的预测和预测的概率作为输出。有没有办法从XGBoostTregressor模型中得到这一点 所以我想要和p(Y | X)作为输出。知道怎么做吗?在回归中没有概率,在回归中,你只会得到一个预测值,这就是为什么它被称为回归,所以对于任何回归者,预测的概率都是不可能的。它只是分类而已 如前所述,没有与回归相关的概率 但是,您可能可以在该回归中添加一个参数,以查看您的回归是否可信 但是需

我已经建立了一个XGBoostTregressor模型,使用大约200个分类特征预测一个连续时间变量

但是我想得到实际的预测和预测的概率作为输出。有没有办法从XGBoostTregressor模型中得到这一点


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

在回归中没有概率,在回归中,你只会得到一个预测值,这就是为什么它被称为回归,所以对于任何回归者,预测的概率都是不可能的。它只是分类而已

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

但是,您可能可以在该回归中添加一个参数,以查看您的回归是否可信

但是需要注意的一点是,沿数据的方差可能不同。 假设你研究的是一种基于时间的现象。具体地说,在烘箱中,温度(y)在(x)时间之后(例如,以秒为单位)。当x=0s时,温度为20°C,你开始加热它,想知道它的变化,以便预测x秒后的温度。20秒后和5分钟后的差异可能相同,也可能完全不同。这就是所谓的

如果要使用置信区间,可能需要确保考虑了异方差,因此所有数据的置信区间都是相同的

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

  • 编辑 我会这样做的。显然,输出是你真正的输出。
    
    将numpy作为np导入
    将matplotlib.pyplot作为plt导入
    从scipy导入集成
    从scipy.interpolate导入interp1d
    N=1000#样本数量
    平均值=0
    标准=1
    输出=np.随机.正常(loc=平均值,标度=标准值,尺寸=N)
    #我们想要得到一个规范化的直方图(因为这是PDF,如果我们集成的话)
    #它必须等于1)
    nbins=N/10
    n=int(n/n英寸)
    p、 x=np.直方图(输出,箱=n,赋范=True)
    plt.hist(输出,箱=n,规范=真)
    x=x[:-1]+(x[1]-x[0])/2#将存储单元边转换为中心
    #现在我们要插入:
    #f=立方线(x=x,y=p,bc_type='not-a-knot')
    f=interp1d(x=x,y=p,种类='二次型',填充值='外推')
    x=np.linspace(-2.9*std,2.9*std,10000)
    平面图(x,f(x))
    plt.show()
    #检查:
    面积=integrate.quad(f,x[0],x[-1])
    打印(面积)#(应接近1)
    

现在,插值方法对于异常值不是很好。如果预测数据与您的分布极为遥远(超过std的3倍),那么它将不起作用。除此之外,您现在可以使用PDF获得有意义的结果


它并不完美,但它是我当时想到的最好的。我相信有更好的方法。若你们的数据遵循正常规律,它就变得微不足道了。

你们可以看看参数
…output\u margin=True
,在回归的情况下这会给你们带来什么?我不知道,但想知道它会给出什么!我对xgboost并不太熟悉,因为xgboost一定做过类似于CDF的事情,对吧?可能类似于预测时间为100分钟+/-5分钟的概率是多少。我想了很多,但“预测时间为100分钟+/-5分钟的概率是多少。”这是不可能的,但如果你的预测时间为100分钟,你会发现基于CDF的概率值。或者你可以根据平均值和标准差找到预测的置信区间。谢谢你的输入,我只有分类输入变量。是否仍有可能做到这一点?您能否提供您正在使用的数据样本?我想看看能做些什么。我真的不能给出一个样本数据,我不允许分享它。但这是关于不同产品的数据。“产品名称”、“产品类别”、“设计国家”等。目标变量是发布产品所需的时间。我明白了,那么置信区间可能不是很好。但是,您仍然可以从输出(发布时间)创建概率密度函数(PDF),并将预期值与此PDF进行比较。如果你的数据是现实的代表,那么你可以知道它有多现实。请注意,PDF需要与实际数据的绘图进行比较,以检查它的性能。这听起来很有趣。关于如何从我的xgb模型的输出中构造这样一个PDF,您有什么建议吗?是否有可能构造一个依赖于我所有输入变量的PDF?这样我就可以从不同的分布中提取不同输入的估计值。