簡體   English   中英

ValueError:通過設置 n_splits=2 或更多,k 折交叉驗證需要至少一個訓練/測試分割,得到 n_splits=1

[英]ValueError: k-fold cross-validation requires at least one train/test split by setting n_splits=2 or more, got n_splits=1

我收到錯誤

ValueError: k-fold cross-validation requires at least one train/test split by setting n_splits=2 or more, got n_splits=1

同樣的問題可用ValueError: 不能有分割數 n_splits=3 大於樣本數:1

為我

我使用 python 3.8.6 和 scikit-learn==0.23.2,一切正常,

我用 scikit-learn==0.24.2 更新到 python 3.9.5,得到這個錯誤,我在 X_test 中有 191 個樣本。 我不確定為什么庫版本會導致這個問題。

使用 cv=3 和總共 1000 條記錄數據集

完整代碼

X_train, X_test, y_train, y_test = train_test_split(features,
                                                    labels,
                                                    test_size=0.2,
                                                    random_state=200)
smote_enn = SMOTEENN(sampling_strategy='all', random_state=127)
X_train_senn, y_train_senn = smote_enn.fit_resample(X_train, y_train)
lgbmclassifier = LGBMClassifier(boosting_type='gbdt',
                                max_depth=-1,
                                device_type=deviceType,
                                verbose=0,
                                objective='binary',
                                class_weight='balanced',
                                force_row_wise=True,
                                subsample_for_bin=200000,
                                min_child_samples=20,
                                random_state=50)
lgbmgrid = CVGrid(lgbmclassifier, FE_Hyperparamerters)
lgbmgrid_result = lgbmgrid.fit(X_train,
                               y_train,
                               eval_metric='auc',
                               eval_set=[(X_test, y_test)],
                               early_stopping_rounds=ESR,
                               verbose=1)

錯誤

 File "C:\prg\utils.py", line 851, in feHPTuning
    lgbmgrid_result = lgbmgrid.fit(X_train,
  File "C:\Users\prg\Anaconda3\envs\automl_py395elk7120_2\lib\site-packages\sklearn\utils\validation.py", line 63, in inner_f
    return f(*args, **kwargs)
  File "C:\Users\prg\Anaconda3\envs\automl_py395elk7120_2\lib\site-packages\sklearn\model_selection\_search.py", line 762, in fit
    cv_orig = check_cv(self.cv, y, classifier=is_classifier(estimator))
  File "C:\Users\prg\Anaconda3\envs\automl_py395elk7120_2\lib\site-packages\sklearn\utils\validation.py", line 63, in inner_f
    return f(*args, **kwargs)
  File "C:\Users\prg\Anaconda3\envs\automl_py395elk7120_2\lib\site-packages\sklearn\model_selection\_split.py", line 2062, in check_cv
    return StratifiedKFold(cv)
  File "C:\Users\prg\Anaconda3\envs\automl_py395elk7120_2\lib\site-packages\sklearn\utils\validation.py", line 63, in inner_f
    return f(*args, **kwargs)
  File "C:\Users\prg\Anaconda3\envs\automl_py395elk7120_2\lib\site-packages\sklearn\model_selection\_split.py", line 636, in __init__
    super().__init__(n_splits=n_splits, shuffle=shuffle,
  File "C:\Users\prg\Anaconda3\envs\automl_py395elk7120_2\lib\site-packages\sklearn\utils\validation.py", line 63, in inner_f
    return f(*args, **kwargs)
  File "C:\Users\prg\Anaconda3\envs\automl_py395elk7120_2\lib\site-packages\sklearn\model_selection\_split.py", line 280, in __init__
    raise ValueError(
ValueError: k-fold cross-validation requires at least one train/test split by setting n_splits=2 or more, got n_splits=1.

擬合函數產生錯誤

這個錯誤非常簡單。 您不能僅使用 1 個拆分來執行Kfold拆分。

Kfold文檔指出n_splits是折疊數,必須至少為 2。

如果您只想執行單個拆分,則應使用sklearn.model_selection.train_test_split

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM