我正在研究一个多类分类模型,其中与其他类相比,很少有类具有较少的数据。我使用随机抽样技术从总体中创建一个样本,保持每个类别的比例等于总体的比例。例如,A 类在总体中有 400 条记录,B 类在总体中有 100 条记录,然后在进行随机抽样时,我正在创建一个样本,其中 A 类和 B 类的记录比例为 4:1。我观察到的趋势是通过改变一个类的样本量(保持类间比例不变)导致模型性能(准确度、精度、召回率)发生变化。
无论样本大小如何,我需要应用什么技术来使我的模型稳定?
我正在研究一个多类分类模型,其中与其他类相比,很少有类具有较少的数据。我使用随机抽样技术从总体中创建一个样本,保持每个类别的比例等于总体的比例。例如,A 类在总体中有 400 条记录,B 类在总体中有 100 条记录,然后在进行随机抽样时,我正在创建一个样本,其中 A 类和 B 类的记录比例为 4:1。我观察到的趋势是通过改变一个类的样本量(保持类间比例不变)导致模型性能(准确度、精度、召回率)发生变化。
无论样本大小如何,我需要应用什么技术来使我的模型稳定?
保持样本大小彼此接近总是更好。您面临的问题是不平衡分类。您可以应用很多方法,例如上采样/下采样、合成数据生成(检查SMOTE)。
模型:
我首先将模型转换为二进制分类,这样:
注意:三个类的另一个选项三个 x 或非 x 分类器)
然后我会将这些采样技术(见上文)应用于模型。如果您有大量观察结果,请尝试使用下采样将类权重设为 50:50,如果您不能这样做,请尝试 SMOTE 从少数类生成数据。
指标:
请注意,如果您没有平衡的数据集,请尽量不要将准确性用作性能指标。根据您的情况考虑 ROC、F1 和精度/召回下的区域。
希望能帮助到你!
在模式下使用精度、召回率和 f1 weighted。有用于重采样的专用库。你说的是分层。您不必手动编码。有一种方法可以在sklearn中获得分层拆分。