我使用Scikit Learn来实现Support Vector Machine。由于我正在处理类不平衡(96%到4%),我希望SVM在训练期间从每个班级中抽取相同数量的样本。如何通过Scikit Learn实现这一目标?
答案 0 :(得分:4)
您可能对imbalanced-learn包感兴趣,该包具有许多实现,例如过采样和欠采样,以解决类不平衡问题。
答案 1 :(得分:3)
另一种方法是使用class_weight='balanced'
参数调整类权重;来自SVC docs(其他SVM模型也存在相似的参数):
class_weight :{dict,'balanced'},可选
将类i的参数C设置为SVC的class_weight [i] * C.如果没有给出,所有课程都应该有一个重量。 “平衡” mode使用y的值来反向自动调整权重 与输入数据中的类频率成比例
n_samples / (n_classes * np.bincount(y))