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)
我倾向于说这是 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应该是可选的。