python - 类别权重使我的 keras 分类模型恶化

标签 python keras scikit-learn deep-learning

我有一个模型,用于对一些数据进行分类,它的目标输出为 21。它使用 adam 优化器和分类交叉熵损失。为了改善模型损失,我对数据集中的类别频率进行了可视化,发现前 2 个类别的频率约为 25,000 和 20,000,而最低的 2 个类别的频率约为 4、40。范围从 100 到 2000。我意识到这是值的明显差异,并尝试添加我使用 sklearn 提取的类内权重,如下所示:

我的 y 数组采用 one-hot 编码风格,类似于:

class1,   class2, class3, class4 ... class21
   0        0       1       0    ...    0 
   1        0       0       0    ...    0
   0        1       0       0    ...    0
from sklearn.utils.class_weight import compute_class_weight

y_int = np.argmax(y.to_numpy(), axis=1)
weights = compute_class_weight('balanced', classes=np.unique(y_int), y=y_int)
di = dict(enumerate(class_weights))

但是我的损失恶化了,到第 50 个 epoch 时,我的损失值开始在 30 - 50 范围内。与没有类(class)权重时我得到的大约 0.4 的事实相比,这是可怕的。

我提取类(class)权重的方式有问题吗?或者我不应该完全使用类(class)权重? 如果不是,我应该用什么来解释这种巨大的不平衡? -谢谢

最佳答案

Keras 打印训练期间的加权损失;您可以通过例如将所有类别权重加倍来确认这一点。因此,加权模型的较大损失可能只是表明较小的类别更难以分类,现在您将损失的注意力集中在那些较小的类别上,您会看到更差的分数。

关于python - 类别权重使我的 keras 分类模型恶化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62855839/

相关文章:

algorithm - 监督机器学习,产生训练有素的估计器

python - scikit 如何学习逻辑回归以进行分类或回归

python - cx-freeze 找不到所有依赖项

python - 第一次和最后一次出现的逻辑表达式匹配之间的 Numpy 子集数组

python - 绘制哪些数据来了解哪种模型最适合该问题?

keras - CNN 最后一层使用哪些设置进行回归

tensorflow - Keras 中的 MaxPool 和 MaxPooling 层有什么区别?

python - sklearn.discriminant_analysis 中的解释_方差_比率_

python - Pandas 日期功能 : Extracting Period Index information as String

python - 继续(是/否)?在 Python 中