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