【问题标题】:PredefinedSplit function in sklearnsklearn 中的 PredefinedSplit 函数
【发布时间】:2017-10-12 15:06:21
【问题描述】:

我正在尝试使用我提供的拆分在sklearn 中运行cross_val_scoresklearn 文档为 here 提供了以下示例:

>>> from sklearn.model_selection import PredefinedSplit
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
>>> y = np.array([0, 0, 1, 1])
>>> test_fold = [0, 1, -1, 1]
>>> ps = PredefinedSplit(test_fold)
>>> ps.get_n_splits()
2
>>> print(ps)       
PredefinedSplit(test_fold=array([ 0,  1, -1,  1]))
>>> for train_index, test_index in ps.split():
...    print("TRAIN:", train_index, "TEST:", test_index)
...    X_train, X_test = X[train_index], X[test_index]
...    y_train, y_test = y[train_index], y[test_index]
TRAIN: [1 2 3] TEST: [0]
TRAIN: [0 2] TEST: [1 3]

我无法理解这个例子。特别是,

  1. 为什么ps.get_n_splits()在这个例子中返回2;和
  2. 为什么test_fold 数组会导致代码 sn-p 底部显示的拆分?

另外,我想问一下,在这种情况下,如果我将 ps 对象传递给sklearn 中的cross_val_score 函数,它会不会对这两个拆分进行交叉验证?

【问题讨论】:

  • 你可以看看my answer here
  • 您好,非常感谢。那么我的问题是重复的。

标签: python scikit-learn


【解决方案1】:

拆分的数量是 test_folder exclude (-1) 中的唯一值。

使用这个例子使用 test_fold = [0, 1, -1, 1],

  • 零索引为0,表示Test set为0,其余1、2、3为Train set。

  --- > TRAIN: [1 2 3] TEST: [0]

-第1个和第3个索引为1,表示Test set为1、3,其余0、2为Training set


  ---> TRAIN: [0 2] TEST: [1 3]
  • 第二个索引是-1,表示没有训练/测试拆分。
  • 注意,整数值本身确实有区别,所以如果 test_folder = [5, 0, -1, 0],分割是一样的

  --- > TRAIN: [1 2 3] TEST: [0]

最后, 对于典型的 k 文件夹拆分,可以使用 test_fold = [0, 1, 2, 3]

【讨论】:

  • 您能否更好地格式化您的答案以使其更清晰?
  • 这应该添加到 Sklearn 文档中。
猜你喜欢
  • 2019-08-17
  • 2016-11-12
  • 2020-07-26
  • 2019-08-05
  • 2018-09-25
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多