python - 使用指定数量的训练数据进行交叉验证?
问题描述
客观的
我想执行 k 折交叉验证,但不是使用 k-1 数据集进行训练,使用 k 数据集进行测试,而是想确定训练数据的数量,就像train_test_split
's一样train_size
。然后剩下的作为测试数据。
准确地说,我有二进制分类数据集,并且在进行交叉验证时我想要每个类的 10 个实例。
预期功能
假设我想做 5-fold CV:
cross_val_score(estimator=my_model, X, y, cv=5, train_size=20)
当然,在这种情况下,我的 X, y 应该有 >= 100 个实例。
我的尝试
好吧,我只是手动构建它们。我能得到的最接近的是迭代:
for _ in range (5):
X_tr, X_te, y_tr, y_te = train_test_split(X, y, train_size=20, stratified=y)
但这会随机选择数据,并可能导致两个训练数据集相似,而且它不容纳 cv。
笔记
是的,这将导致某些数据集不用于训练集,但这正是我希望在当前工作中实现的目标。
是否有任何提供此功能的python函数?
解决方案
您仍然可以使用KFold,但需要额外的逻辑。
确定测试数据量:test_amount = total_amount * test_size
.
确定拆分的数量:n_splits = total_amount // test_amount
。
使用 Kfolds:
kf = KFold(n_splits=n_splits)
for train_index, test_index in kf.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
推荐阅读
- c++ - 我正在编写一个 cpp 程序来打印两个数字之间的所有素数。程序运行成功,但没有打印任何东西
- angular - 路由组件是否有可能具有输入?
- java - Java 流过滤器取 1 个元素
- typescript - useInfiniteSWR 与 axios 和 typescript
- python - 皮尔逊的剪影
- linux - 如何将变量别名为包含包含左括号的变量的命令
- python - 将 subprocess.run 与 check = True 一起使用,该命令应返回非零退出代码
- flask - 无法访问部署在 GCP 计算引擎中的烧瓶应用程序
- python - tkinter 窗口行为怪异并停止响应
- python - 由于 colab 无法导入 _udunits2,我正在努力在 google colab 上导入 Iris。有谁知道如何解决这个问题?