获取类型错误:单例数组 array(None, dtype=object) 不能被视为有效集合

Rao*_*ran 6 python machine-learning cross-validation k-fold

我正在使用不同的交叉验证方法。我首先在我的代码上使用 k Fold 方法,效果非常好,但是当我使用repeatedstratifiedkfold方法时,它给了我这个错误

TypeError: Singleton array array(None, dtype=object) cannot be considered a valid collection.
Run Code Online (Sandbox Code Playgroud)

任何人都可以在这方面帮助我吗?以下是产生该问题的最少代码。

import numpy as np
from sklearn.model_selection import RepeatedStratifiedKFold


ss = RepeatedStratifiedKFold(n_splits=5, n_repeats=2, random_state=0)

X = np.random.rand(100, 5)
y = np.random.rand(100, 1)

for train_index, test_index in ss.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
Run Code Online (Sandbox Code Playgroud)

这是完整的引用 -

start
Traceback (most recent call last):

  File "C:\Users\full details of final year project\AZU\test_tace_updated.py", line 81, in <module>
    main()

  File "C:\Users\AZU\test_tace_updated.py", line 54, in main
    for train, test in ss.split(X):

  File "C:\Users\anaconda3\lib\site-packages\sklearn\model_selection\_split.py", line 1201, in split
    for train_index, test_index in cv.split(X, y, groups):

  File "C:\Users\anaconda3\lib\site-packages\sklearn\model_selection\_split.py", line 731, in split
    y = check_array(y, ensure_2d=False, dtype=None)

  File "C:\Users\anaconda3\lib\site-packages\sklearn\utils\validation.py", line 63, in inner_f
    return f(*args, **kwargs)

  File "C:\Users\anaconda3\lib\site-packages\sklearn\utils\validation.py", line 667, in check_array
    n_samples = _num_samples(array)

  File "C:\Users\anaconda3\lib\site-packages\sklearn\utils\validation.py", line 202, in _num_samples
    raise TypeError("Singleton array %r cannot be considered"

TypeError: Singleton array array(None, dtype=object) cannot be considered a valid collection.
Run Code Online (Sandbox Code Playgroud)

ANA*_*N S 3

我倾向于说这是 sklean 中的一个错误(绝对不确定),但如果你也包含y在你的 split 函数中,这个问题似乎就消失了。以下代码按预期运行。

import numpy as np
from sklearn.model_selection import RepeatedStratifiedKFold

ss = RepeatedStratifiedKFold(n_splits=5, n_repeats=2, random_state=0)

X = np.random.rand(100, 5)
y = np.zeros(100)

for train_index, test_index in ss.split(X, y):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为根据文档y应该是可选的。