Python 梯度增强分类器scikit中训练数据的准确性
我正在训练GBC。它是具有12类输出的多类分类器。我的问题是,当我预测列车数据时,我没有获得100%的准确性。事实上,预测失误发生在主导类集合上。(我的输入是非平衡的,我创建合成数据。) 详情如下: 输入数据大小: 输入形状:(20744,13) (对输出和输入进行标签编码和最小最大缩放) 数据缩放前的分布:Python 梯度增强分类器scikit中训练数据的准确性,python,machine-learning,scikit-learn,gradient-descent,boosting,Python,Machine Learning,Scikit Learn,Gradient Descent,Boosting,我正在训练GBC。它是具有12类输出的多类分类器。我的问题是,当我预测列车数据时,我没有获得100%的准确性。事实上,预测失误发生在主导类集合上。(我的输入是非平衡的,我创建合成数据。) 详情如下: 输入数据大小: 输入形状:(20744,13) (对输出和输入进行标签编码和最小最大缩放) 数据缩放前的分布: [(0, 443), **(1, 6878),** (2, 177), (3, 1255), (4, 311), (5, 172), (6, 1029), (7, 268), (8, 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=梯度增强分类器(冗余=3,n_估计=n_est,学习率=0.001,最大深度=24,最小样本叶=3,最大特征=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.963223528942116
召回测试数据:0.963223528942116
**我看到的问题是当我预测列车数据时:我期望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
有什么问题吗?首先,您不应该在多类标签列上应用
minmax()
标准化或任何相关标准化。仅对特征矩阵应用标准化。在分类问题中,标签必须被视为离散的分类实体(即使将标签类编码为序号也是可选的,至少在sklearn
中是如此)
其次,为什么您希望训练集的分类准确率达到100%呢?您是否暗示训练集的准确度应始终为100%,或者您的模型有一些特殊之处,使您期望100%的准确度?一个很好的通用模型是训练和测试精度之间的差异非常小(如果有的话)。当然,理想情况下,列车和测试分类应接近100%,但这是非常罕见的。仅使用列车组的100%精度并不能衡量一个好的模型 首先,您不应在多类标签列上应用
minmax()
标准化或任何相关标准化。仅对特征矩阵应用标准化。在分类问题中,标签必须被视为离散的分类实体(即使将标签类编码为序号也是可选的,至少在sklearn
中是如此)
其次,为什么您希望训练集的分类准确率达到100%呢?您是否暗示训练集的准确度应始终为100%,或者您的模型有一些特殊之处,使您期望100%的准确度?一个很好的通用模型是训练和测试精度之间的差异非常小(如果有的话)。当然,理想情况下,列车和测试分类应接近100%,但这是非常罕见的。仅使用列车组的100%精度并不能衡量一个好的模型 谢谢你的回复。我仅对输入功能集应用minmaxscaler()。我只对目标列进行标签编码。我想知道这是否表明模型存在任何问题?我怎么知道它是高度偏倚的还是高度方差的模型等等。你们问题的早期版本说你们也在标签上应用了minmax()缩放。无论如何,高方差==>过拟合==>比测试精度更高的训练精度。始终计算训练精度和测试精度,如果训练精度更高,则模型中可能存在较大的方差。相反,高偏差==>适合模型。感谢您的回复。我仅对输入功能集应用minmaxscaler()。我只对目标列进行标签编码。我想知道这是否表明模型存在任何问题?我怎么知道它是高度偏倚的还是高度方差的模型等等。你们问题的早期版本说你们也在标签上应用了minmax()缩放。无论如何,高方差==>过拟合==>比测试精度更高的训练精度。始终计算训练精度和测试精度,如果训练精度更高,则模型中可能存在较大的方差。相反,高偏差==>在拟合模型下。您如何制作训练集和测试集?过采样后还是之前?之后,80-20分割。您如何制作列车和测试集?过采样后或之前?之后,80-20次分割。