【发布时间】:2019-08-20 14:53:49
【问题描述】:
我想查看每个拟合模型的个人分数以可视化交叉验证的强度(我这样做是为了向我的同事展示为什么交叉验证很重要)。
我有一个 .csv 文件,其中包含 500 行、200 个自变量和 1 个二进制目标。我定义skf 使用StratifiedKFold 将数据折叠5 次。
我的代码如下所示:
X = data.iloc[0:500, 2:202]
y = data["target"]
skf = StratifiedKFold(n_splits = 5, random_state = 0)
clf = svm.SVC(kernel = "linear")
Scores = [0] * 5
for i, j in skf.split(X, y):
X_train, y_train = X.iloc[i], y.iloc[i]
X_test, y_test = X.iloc[j], y.iloc[j]
clf.fit(X_train, y_train)
clf.score(X_test, y_test)
如您所见,我为Scores 分配了一个包含 5 个零的列表。我想将 5 个预测中的每一个的 clf.score(X_test, y_test) 分配给列表。但是,索引 i 和 j 不是 {1, 2, 3, 4, 5}。相反,它们是用于折叠 X 和 y 数据帧的行号。
如何在此循环中将每个k 拟合模型的测试分数分配给Scores?我需要一个单独的索引吗?
我知道使用cross_val_score 确实可以做到所有这些,并为您提供k 分数的几何平均值。但是,我想向我的同事展示 sklearn 库中的交叉验证函数背后发生了什么。
提前致谢!
【问题讨论】:
标签: python pandas for-loop cross-validation