machine-learning - 如何在sklearn上平衡训练集和测试集上分割数据

标签 machine-learning scikit-learn svm cross-validation

我正在使用 sklearn 进行多分类任务。我需要将所有数据分成train_set和test_set。我想从每个类(class)中随机抽取相同的样本数。 其实我很喜欢这个功能

X_train, X_test, y_train, y_test = cross_validation.train_test_split(Data, Target, test_size=0.3, random_state=0)

但它给出了不平衡的数据集!任何建议。

最佳答案

尽管 Christian 的建议是正确的,但从技术上讲,train_test_split 应该通过使用 stratify 参数为您提供分层结果。

所以你可以这样做:

X_train, X_test, y_train, y_test = cross_validation.train_test_split(Data, Target, test_size=0.3, random_state=0, stratify=Target)

这里的技巧是它从sklearn中的版本0.17开始。

来自有关参数stratify的文档:

stratify : array-like or None (default is None) If not None, data is split in a stratified fashion, using this as the labels array. New in version 0.17: stratify splitting

关于machine-learning - 如何在sklearn上平衡训练集和测试集上分割数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35472712/

相关文章:

c++ - dlib 的 dcd trainer 的 'warm start' 选项是否只用于 1 类分类?

security - 在云上部署机器学习模型是否存在任何特定的企业安全问题

python - 线性模型预测不一致

python - 通过从现有值的分布中抽样来估算缺失值

python - sklearn DecisionTreeClassifier 中 min_samples_split 和 min_samples_leaf 的区别

R:我们如何打印 SVM 的准确率百分比

c++ - OpenCV 线性 SVM 未训练

python - 上采样不平衡数据集的小类

python - Keras : My model trains without any given labels. 这怎么可能?

python - 将 get_feature_names 添加到 ColumnTransformer 管道