【问题标题】:StratifiedKFold split train and validation set sizeStratifiedKFold 拆分训练和验证集大小
【发布时间】:2020-02-10 06:52:34
【问题描述】:

我正在使用StratifiedKFold,但我不确定kfold.split 在下面的代码中返回的训练和测试大小是多少。假设 Print(array.shape) 返回 (12904, 47),即行数为 12904,列数为 47,那么训练和测试的大小是多少?

kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=8)

for train, validation in kfold.split(X, Y):
            # Fit the model
            model.fit(X[train], Y[train])
            # predict probabilities for training set
            predicted = model.predict(X[train])

            predicted_report = classification_report(Y[train], predicted)
            print(predicted_report)
            # accuracy: (tp + tn) / (p + n)
            accuracy = accuracy_score(Y[train], predicted)#accuracy_score(Y[train], yhat_classes)

【问题讨论】:

  • 12904 的 4/5 和 1/5?因为n_splits=5

标签: python scikit-learn cross-validation k-fold


【解决方案1】:

正如 cmets 中已经暗示的那样,您的训练集大小将是 (n_splits-1)/n_splits,而您的验证集大小将是初始数据大小的 1/n_splits,即此处分别为 4/5 和 1/5。

这是一个使用 iris 数据和n_splits=5 的简单可重复演示,就像您的情况一样:

import numpy as np
from sklearn.model_selection import StratifiedKFold
from sklearn.datasets import load_iris

iris = load_iris()
X = iris.data
y = iris.target
print(X.shape) # initial dataset size
# (150, 4)

kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=8)

for train, validation in kfold.split(X, y):
            print(X[train].shape, X[validation].shape)

其中的结果是:

(120, 4) (30, 4)
(120, 4) (30, 4)
(120, 4) (30, 4)
(120, 4) (30, 4)
(120, 4) (30, 4)

因此,要检查自己的数据,只需在 for 循环中添加上述 print 语句即可。

【讨论】:

    猜你喜欢
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2019-05-01
    • 2019-04-22
    • 2020-10-01
    相关资源
    最近更新 更多