【发布时间】:2018-04-03 17:38:17
【问题描述】:
我使用 Scikit Learn 来实现 Support Vector Machine。由于我正在处理类不平衡(96% 到 4%),我希望 SVM 在训练期间从每个类中抽取相同数量的样本。如何使用 Scikit Learn 实现这一目标?
【问题讨论】:
标签: python machine-learning scikit-learn svm
我使用 Scikit Learn 来实现 Support Vector Machine。由于我正在处理类不平衡(96% 到 4%),我希望 SVM 在训练期间从每个类中抽取相同数量的样本。如何使用 Scikit Learn 实现这一目标?
【问题讨论】:
标签: python machine-learning scikit-learn svm
您可能对imbalanced-learn 包感兴趣,该包具有多种实现,例如过采样和欠采样来解决类不平衡问题。
【讨论】:
另一种方法是使用class_weight='balanced' 参数调整类权重;来自SVC docs(其他 SVM 模型也存在类似的论点):
class_weight : {dict, ‘balanced’}, 可选
对于 SVC,将第 i 类的参数 C 设置为 class_weight[i]*C。如果没有给出,所有的类都应该有一个权重。 “平衡” mode 使用 y 的值自动反向调整权重 与输入数据中的类频率成正比为
n_samples / (n_classes * np.bincount(y))
【讨论】: