xgboost: predict 和 predict_proba 分类器正确率计算的讨论

探讨了sklearn接口和非sklearn接口下XGBoost分类器的使用方法,指出默认阈值可能影响预测准确性,并建议通过分析不同阈值下的正确率来优化分类效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sklearn接口的xgboost 分类器:

xgboost.XGBClaaifier()

xgboost.fit(x,y)

1. xgboost.predict(test_x)  

2. xgboost.predict_proba(test_x)

3. xgboost.score(test_x,y)

讨论:

结果1“可能”不准,因为predict默认采用0.5做阈值;另外,score也是利用0.5做阈值计算的分数。

而如果根据predict_proba,我们分析不同阈值下的正确率分数,会发现在某些阈值下,正确率分数会更高。

 

 

非sklearn接口的xgboost分类器:

xgboost.train()

xgboost.predict() 只会输出概率或sigmoid转换前的贡献度model_a.predict(pred_contribs= True),需要人工指定阈值,才能做分类。

 

### 关于 `predict_proba` 方法的使用 在机器学习库 scikit-learn 中,许多分类器提供了 `predict_proba` 方法来估计测试样本属于各个类别的概率。此方法特别适用于那些基于概率决策规则的算法,比如逻辑回归 (Logistic Regression)[^1] k 近邻分类器 (KNeighbors Classifier)[^2]。 #### 逻辑回归中的 `predict_proba` 对于逻辑回归而言,在训练完成后可以通过调用 `predict_proba(X)` 来获取输入特征向量 X 对应各目标类别发生的可能性大小。这些概率反映了模型认为给定实例更可能归属于哪个类别。例如: ```python from sklearn.linear_model import LogisticRegression import numpy as np # 训练数据:x_train x_train = np.array([[1, 2, 3], [1, 3, 4], [2, 1, 2], [4, 5, 6], [3, 5, 3], [1, 7, 2]]) # 训练标签:y_train y_train = np.array([0, 0, 0, 1, 1, 1]) # 测试数据:x_test x_test = np.array([[2, 2, 2], [3, 2, 6], [1, 7, 4]]) clf = LogisticRegression() clf.fit(x_train, y_train) probabilities = clf.predict_proba(x_test) print(probabilities) ``` 上述代码会打印出一个二维数组,其中每一行对应着 x_test 的每一个样本,而每列代表该样本被分配到相应类别的概率[^3]。 #### K近邻分类器中的 `predict_proba` 当应用 k 近邻分类器时,如果指定了参数 `weights='distance'` 或者默认设置下(即权重相同),那么 `predict_proba()` 将计算每个邻居投票数占总票数的比例作为最终输出的概率值。这意味着即使某些情况下某个特定类别的概率接近于1,其他类别的概率也会非常低甚至为零,但这并不意味着这是不正常的;相反,这表明大多数最近邻都强烈支持这一分类结果[^2]。 然而需要注意的是,并不是所有的分类器都能提供有意义的概率估计。有些实现可能会返回离散化的概率分布,就像提到的情况那样,尽管理论上的确应该给出连续范围内的数值[^4]。 为了确保获得合理的概率估计,建议选择合适的评估指标以及调整超参数配置,从而优化模型性能。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值