我的数据由 99% 的目标变量 = 1 和 1% 的目标变量 = '0' 组成。分层是否保证训练测试和测试集在目标变量方面具有相等的数据比率。就像在容器中一样,“1”和“0”的数量相等?
请参阅下面的代码以进行说明
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,stratify=y,random_state=42)
我的数据由 99% 的目标变量 = 1 和 1% 的目标变量 = '0' 组成。分层是否保证训练测试和测试集在目标变量方面具有相等的数据比率。就像在容器中一样,“1”和“0”的数量相等?
请参阅下面的代码以进行说明
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,stratify=y,random_state=42)
分层只会返回一部分数据,这些数据可能会根据您传递给它的参数而被打乱或不打乱。假设您的数据集由 100 个 1 类实例和 10 个 0 类实例组成,您决定在 70:30 进行拆分,假设您传递适当的参数以获得训练集中的实例63-class1
和实例以及实例和实例的拆分在测试集中。显然,它是不平衡的。您训练的分类器将具有高度偏差,并且与将每个输入预测为.7-class0
27-class1
3-class0
class1
更好的方法是,要么尝试收集更多的 0 类数据,要么对数据集进行过采样以人为地生成更多的 0 类实例,或者对其进行欠采样以获得更少的 1 类实例。python imblearn是 python 中的一个库,可以帮助你
第一个区别是train_test_split(X, y, test_size=0.2, stratify=y)
它只会将数据拆分一次,其中 80% 将在训练中,20% 在测试中。
而StratifiedKFold(n_splits=2)
将数据分成 50% 的训练和 50% 的测试。
其次是可以指定n_splits
大于 2 来实现交叉验证折叠效果,其中数据将拆分n_split
次数。因此,将有多个数据划分为训练和测试。
有关 K-fold 的更多信息,您可以查看以下问题:
这个想法是一样的。train_test_split
将在内部使用 StratifiedShuffleSplit