对于不平衡的数据集,选择 L1 还是 L2 正则化更好?
是否有更适合不平衡数据集的成本函数来提高模型分数(log_loss
特别是)?
对于不平衡的数据集,选择 L1 还是 L2 正则化更好?
是否有更适合不平衡数据集的成本函数来提高模型分数(log_loss
特别是)?
如果您有一个不平衡的数据集,您通常希望一开始就使其平衡,因为这会人为地影响您的分数。
现在,您想要测量精度和召回率,因为它们可以更好地捕捉不平衡的数据集偏差。
L1 或 L2 在平衡或不平衡的数据集中表现不会特别好,您要做的是调用弹性网络(这是两者的组合)并对每个正则化器的系数进行交叉验证。
此外,进行网格搜索非常奇怪,您最好只使用交叉验证并查看哪些参数效果更好。
他们甚至有ElasticNetCV,它为你做这部分
所以你问在不同损失下类别不平衡如何影响分类器性能? 你可以做一个数值实验。
我通过逻辑回归进行二元分类。然而,直觉扩展到更广泛的模型类别,特别是神经网络。我通过交叉验证的 ROC AUC 来衡量性能,因为它对类不平衡不敏感。我使用交叉验证的内部循环来找到每个数据集上 L1 和 L2 正则化的最佳惩罚。
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression, LogisticRegressionCV
import matplotlib.pyplot as plt
cvs_no_reg = []
cvs_lasso = []
cvs_ridge = []
imb = [0.5, 0.4, 0.3, 0.2, 0.1, 0.05, 0.02, 0.01, 0.005, 0.002, 0.001]
Cs = [1e-5, 3e-5, 1e-4, 3e-4, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1]
for w in imb:
X, y = make_classification(random_state=1, weights=[w, 1-w], n_samples=10000)
cvs_no_reg.append(cross_val_score(LogisticRegression(C=1e10), X, y, scoring='roc_auc').mean())
cvs_ridge.append(cross_val_score(LogisticRegressionCV(Cs=Cs, penalty='l2'), X, y, scoring='roc_auc').mean())
cvs_lasso.append(cross_val_score(LogisticRegressionCV(Cs=Cs, solver='liblinear', penalty='l1'), X, y, scoring='roc_auc').mean())
plt.plot(imb, cvs_no_reg)
plt.plot(imb, cvs_ridge)
plt.plot(imb, cvs_lasso)
plt.xscale('log')
plt.xlabel('fraction of the rare class')
plt.ylabel('cross-validated ROC AUC')
plt.legend(['no penalty', 'ridge', 'lasso'])
plt.title('Sensitivity to imbalance under different penalties')
plt.show()
您可以看到,在高度不平衡的情况下(图片左侧),L1 正则化比 L2 表现更好,并且都比没有正则化好。
但如果不平衡不那么严重(最小的类份额为 0.03 或更高),所有 3 个模型的表现都一样好。
至于第二个问题,什么是不平衡数据集的好的损失函数,我会回答log loss 已经足够好了。它的有用特性是它不会使您的模型将稀有类的概率变为零,即使它非常非常罕见。
如果您有不平衡的数据,首先我建议您尝试拥有真实数据。我的意思是,如果您没有平衡数据,请不要手动复制您的数据。您永远不应该更改数据的分布。尽管您似乎减少了 Bayse 错误,但您的分类器在您指定的应用程序中表现不佳。对于不平衡的数据,我有两个建议:
F1
分数来评估你的分类器对于一组不平衡的数据,最好选择 L1 或 L2 正则化
这些用于处理过度拟合问题。首先你必须学习训练数据来解决高偏差问题。后者在日常任务中更为常见。它们适用于不平衡的数据集,但考虑到首先您必须处理高偏差问题,学习数据,然后处理高方差问题,避免过度拟合。