【问题标题】:Python Stratified KFoldPython 分层 KFold
【发布时间】: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


    【解决方案1】:

    我使用了机器学习大师 Jason Brownlee 解释并展示了一个很好的简单工作示例的方法:

    from sklearn.model_selection import KFold
    import pandas as pd
    
    data = {'f1': [0,0,0,1],
            'f2': [0,1,1,1],
            'f3': [1,0,1,0],
            'f4': [1,0,1,0],
            'f5': [0,0,1,1],
            'f6': [1,0,0,0],
            'target': [0,0,1,1]}
    
    df = pd.DataFrame(data, columns=['f1','f2','f3','f4','f5','f6','target'])
    
    print(df)
    
    kfold = KFold(3, True, 1)
    
    for train, test in kfold.split(data):
        print('train: %s, test: %s' % (train, test))
    
    # scikit-learn k-fold cross-validation
    from numpy import array
    from sklearn.model_selection import KFold
    
    # data sample
    data = array([0, 0, 1, 1, 0, 1, 0])
    
    # prepare cross validation
    kfold = KFold(3, shuffle=True, random_state=1, )
    
    # enumerate splits
    for train, test in kfold.split(data):
        print('train: %s, test: %s' % (data[train], data[test]))
    

    https://machinelearningmastery.com/k-fold-cross-validation/

    这是使用 Python 3.8 在 Macbook Pro 上的 PyCharm 的输出:

    【讨论】:

      猜你喜欢
      • 2019-12-26
      • 1970-01-01
      • 2022-01-22
      • 2020-07-28
      • 2016-02-08
      • 1970-01-01
      • 2020-03-18
      • 2016-10-20
      • 2020-05-16
      相关资源
      最近更新 更多