【问题标题】:Accuracy on training data in Gradient boosting classifier- scikitGradient Boosting 分类器 - scikit 中训练数据的准确性
【发布时间】:2018-11-23 16:59:15
【问题描述】:

我正在训练 GBC。它是具有 12 类输出的多类分类器。我的问题是当我对火车数据进行预测时,我没有得到 100% 的准确率。事实上,错误预测发生在占主导地位的类集上。 (我的输入是不平衡的,我会创建合成数据。)

以下是详细信息: 输入数据大小: 输入形状:(20744, 13) (对输出和输入进行标签编码和最小最大缩放)

数据缩放前的分布:

[(0, 443), **(1, 6878),** (2, 177), (3, 1255), (4, 311), (5, 172), (6, 1029), (7, 268), (8, 131), (9, 54), (10, 1159), (11, 340), (12, 1370),
**(13, 7157)**]

使用随机过采样器进行过采样

[(0, 7157), (1, 7157), (2, 7157), (3, 7157), (4, 7157), (5, 7157), (6, 7157), (7, 7157), (8, 7157), (9, 7157), (10, 7157), (11, 7157), (12, 7157), (13, 7157)]

预处理后的最终形状: 输入形状 X:(100198, 12)
目标形状 Y:(100198, 1)

型号: est = GradientBoostingClassifier(verbose=3, n_estimators=n_est, learning_rate=0.001, max_depth =24, min_samples_leaf=3, max_features=3)

输出:

ACC: 0.9632                                                     
Feature importance:                                             
[0.09169515 0.01167983 0.         0.         0.11126567 0.14089752
 0.12381927 0.10735138 0.1344401  0.13874134 0.08111774 0.058992  ]
Accuracy score on Test data:  19303                                
[[1406    0    0    0    0    0    0    0    0    0    0    0    0    0]
 [  19 1024    4   32    4    5   24    5    0    0   24    8   48  211]
 [   0    0 1434    0    0    0    0    0    0    0    0    0    0    0]
 [   1    8    0 1423    0    0    0    0    0    0    0    0    0    0]
 [   0    0    0    0 1441    0    0    0    0    0    0    0    0    0]
 [   0    0    0    0    0 1430    0    0    0    0    0    0    0    0]
 [   0    0    0    0    0    0 1439    0    0    0    3    0    0    1]
 [   0    0    0    0    0    0    0 1453    0    0    0    0    0    0]
 [   0    0    0    0    0    0    0    0 1432    0    0    0    0    0]
 [   0    0    0    0    0    0    0    0    0 1445    0    0    0    0]
 [   0    2    0    0    0    0    0    0    0    0 1398    0    0    1]
 [   0    0    0    0    0    0    0    0    0    0    0 1411    0    0]
 [   0    5    0    1    0    0    0    0    0    0    0    0 1413    6]
 [   1  154    9   22   12    6   22    6    3    8   17   20   45 1154]]

测试数据的精度:0.9632235528942116

召回测试数据:0.9632235528942116

**我看到的问题是当我对火车数据进行预测时:我期望 100% 的预测。但不知何故,我的主导类并不是 100% 预测的。有什么原因吗?

ACC: 0.9982**
Accuracy score on Train data:  80016
[[5751    0    0    0    0    0    0    0    0    0    0    0    0    0]
 [   **0 5699    2    2    1    0    1    3    3    2    0    2    2   32**]
 [   0    0 5723    0    0    0    0    0    0    0    0    0    0    0]
 [   0    0    0 5725    0    0    0    0    0    0    0    0    0    0]
 [   0    0    0    0 5716    0    0    0    0    0    0    0    0    0]
 [   0    0    0    0    0 5727    0    0    0    0    0    0    0    0]
 [   0    0    0    0    0    0 5714    0    0    0    0    0    0    0]
 [   0    0    0    0    0    0    0 5704    0    0    0    0    0    0]
 [   0    0    0    0    0    0    0    0 5725    0    0    0    0    0]
 [   0    0    0    0    0    0    0    0    0 5712    0    0    0    0]
 [   0    0    0    0    0    0    0    0    0    0 5756    0    0    0]
 [   0    0    0    0    0    0    0    0    0    0    0 5746    0    0]
 [   0    0    0    0    0    0    0    0    0    0    0    1 5731    0]
 [   **0    4    5    5    5    2    9    8    2   16    6   19   10 5587**]]

训练数据的精度:0.9982284987150378 召回火车数据:0.9982284987150378

知道出了什么问题吗?

【问题讨论】:

  • 你是如何制作训练集和测试集的?过采样之后还是之前?
  • 之后,80-20 拆分。

标签: python machine-learning scikit-learn gradient-descent boosting


【解决方案1】:

首先,您不应在多类 label 列上应用 minmax() 标准化或任何与此相关的标准化。仅对特征矩阵应用标准化。在分类问题中,标签必须被视为离散的分类实体(即使将标签类编码为序数也是可选的,至少在sklearn 中是这样)。

其次,为什么您期望训练集的分类准确率为 100%?您是在暗示训练集的准确度应该始终为 100%,还是您的模型有什么特别之处让您期望 100% 准确度?一个泛化良好的模型是训练和测试准确率之间的差异非常小(如果有的话)。当然,理想情况下,训练和测试分类都应该接近 100%,但这种情况极为罕见。 only 训练集的 100% 准确率并不是衡量模型好坏的标准。

【讨论】:

  • 感谢您的回复。我只在输入特征集上应用 minmaxscaler()。我只在目标列上进行标签编码。我想知道这是否表明模型有任何问题?我怎么知道它是高度偏差模型还是高度方差模型等。
  • 您的问题的早期版本说您也在标签上应用了 minmax() 缩放。无论如何,高方差 ==> 过拟合 ==> 训练准确度高于测试准确度。始终计算训练准确度和测试准确度,如果训练准确度更高,则模型中的方差很大。相反,高偏差 ==> 欠拟合模型。
猜你喜欢
  • 2023-04-09
  • 2021-04-19
  • 1970-01-01
  • 2022-01-05
  • 2018-05-13
  • 2016-07-03
  • 2017-06-02
  • 2013-07-04
  • 2017-11-16
相关资源
最近更新 更多