具有极端不平衡类的自定义交叉验证和验证



我有一个数据高度不平衡的多类问题。

他们是一个有几千名成员的多数阶级,有些阶级有100-1000名成员,10-30个阶级只有一名成员。

采样是不可能的,因为它可能导致类的权重错误。

为了评估我的模型,我想使用交叉验证。我尝试了cross_val_predict(x,y, cv=10),导致错误代码:

警告:y中填充最少的类只有1个成员,这太少了。任何类中的最小成员数都不能小于n_splits=10。

我尝试构建自己的交叉验证,这是非常直接的。

我通过StratifiedKFold分割数据,然后进行以下操作:

clf = DecisionTreeClassifier()
for ta, te in splits
xTrain, xTest = x.iloc[ta], x.iloc[te]
yTrain, yTest = y.iloc[ta], y.iloc[te]
clf.fit(xTrain, yTrain)
prediction = clf.predict(xTest)
cnf_matrix[ta] = confusion_matrix(yTest, prediction)
classRepo[ta] = classification_report(y, prediction) 

因为我在jupyter笔记本上工作,所以我必须手工打印cnf_matrixclassRepo的每个位置,并亲自查看。

有没有一个更优雅的解决方案,比如手工融合classRepocnf_matrix,这样我就可以得到与cross_val_predict(x,y, cv=x)相同的结果?

有没有更好的指标来解决我的问题?

"采样是不可能的,因为它可能导致类的权重错误。">

这是一个强有力的断言,因为你假设你的训练数据是所有剩余数据的完美表示,是未来可观察的数据。如果我是你们团队的一员,我会挑战你们用实验数据来支持这一假设。

事实上,有许多方法是专门为解决少数群体阶级失衡而制定的。例如SMOTE和ADASYN。我将向您介绍一个python包的不平衡学习,该包在sklearn框架内实现了这些和其他技术。

相关内容

  • 没有找到相关文章

最新更新