【发布时间】:2020-10-06 11:45:33
【问题描述】:
我有一个数据框df,看起来像这样。我正在尝试使用逻辑回归对这些数据进行建模,其中特征 (f1-f6) 是二进制的,目标也是二进制的。
f1 f2 f3 f4 f5 f6 target
0 0 1 1 0 1 0
0 1 0 0 0 0 0
0 1 1 1 1 0 1
1 1 0 0 1 0 1
根据我的理解,分层的 K 折叠确保训练集和测试集中的标签分布均匀。 但我想确保每个特征的分布也是均匀的。
例如,我可以有一个特定功能的交叉表,如下所示:
target 0 1
f1
0 240 125
1 11 18
如您所见,f1 为 1 出现的次数很少,我想确保它在测试和训练集中都合理地显示。我想确保所有功能都做到这一点。
我做了类似下面的事情 (https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html)。但我认为这只能确保标签甚至不考虑特征不平衡。如何对数据进行交叉验证,以便在所有特征/标签上实现相当均匀的分布?
import numpy as np
from sklearn.model_selection import StratifiedKFold
X = df[['f1','f2','f3','f4','f5','f6']]
y = df['target']
skf = StratifiedKFold(n_splits=2)
skf.get_n_splits(X, y)
StratifiedKFold(n_splits=5)
for train_index, test_index in skf.split(X, y):
X_train, X_test = X.iloc[train_index], X.iloc[test_index]
y_train, y_test = y.iloc[train_index], y.iloc[test_index]
]
【问题讨论】:
标签: python machine-learning cross-validation