我正在训练 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_深度=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
知道出了什么问题吗?
最佳答案
首先,您不应在多类 label 列上应用 minmax()
标准化或任何与此相关的标准化。仅对特征矩阵应用标准化。在分类问题中,标签必须被视为离散的分类实体(甚至将标签类别编码为序数也是可选的,至少在 sklearn 中是这样)。
其次,为什么你期望训练集有 100% 的分类准确率?您是否暗示训练集的准确性应始终为 100%,或者您的模型有什么特别之处,使您期望 100% 的准确性?一个良好概括的良好模型是训练和测试准确性之间的差异非常小的(如果有的话)。当然,理想,训练和测试分类都应该接近 100%,但这种情况极为罕见。 仅训练集的 100% 准确率并不能衡量模型是否良好。
关于python - 梯度增强分类器中训练数据的准确性 - scikit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50848617/