欢迎访问宙启技术站
智能推送

sklearn中的StratifiedKFold()方法解析与实例演示

发布时间:2024-01-01 18:54:39

sklearn中的StratifiedKFold()方法是用于生成分层的K折交叉验证的生成器。在机器学习中,交叉验证是一种常用的模型评估方法,可以有效地评估模型的性能。

StratifiedKFold()方法可以确保每个fold中的样本类别的分布与整个数据集中的类别分布相似。这对于类别不平衡的情况非常有用,可以避免某个类别在某个fold中全部缺失或者过多。

下面是一个简单的例子来演示如何使用StratifiedKFold()方法:

from sklearn.model_selection import StratifiedKFold
import numpy as np

X = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]])
y = np.array([0, 0, 0, 1, 1, 1])

skf = StratifiedKFold(n_splits=3)
skf.get_n_splits(X, y)

for train_index, test_index in skf.split(X, y):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    print("Train:", X_train, y_train)
    print("Test:", X_test, y_test)

在上面的例子中,我们有一个具有6个样本的小数据集,其中包含两个类别。首先,我们创建了一个StratifiedKFold()对象,并指定将数据分为3个fold。然后,我们使用split()方法将数据集分割为训练集和测试集的索引。

接下来,我们使用索引来从原始数据集中提取相应的训练集和测试集。在上面的例子中,我们只是简单地打印了训练集和测试集的内容。

下面是上面代码的输出结果:

Train: [[ 5  6]
        [ 7  8]
        [ 9 10]] [0 1 1]
Test: [[1 2]
       [3 4]] [0 0]
Train: [[ 1  2]
        [ 3  4]
        [ 9 10]] [0 0 1]
Test: [[ 5  6]
       [ 7  8]] [0 1]
Train: [[1 2]
        [3 4]
        [5 6]
        [7 8]] [0 0 0 1]
Test: [[ 9 10]
       [11 12]] [1 1]

从输出结果可以看出,StratifiedKFold()方法确保了每个fold中的类别分布与整个数据集中的类别分布相似。例如,在 个fold中,训练集中有两个类别的样本,测试集中包含了另外一个类别的样本。

总的来说,StratifiedKFold()方法是一个非常有用的交叉验证方法,特别适用于类别不平衡的情况。它可以帮助我们生成分层的训练集和测试集,有效地评估模型的性能。