如何解决这个问题? ValueError:分割数 n_splits=5 不能大于样本数:n_samples=1

问题描述 投票:0回答:1

我试图了解问题并找到解决方案,但我还没有任何东西。

代码片段:

import sklearn
import pickle
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import classification_report, confusion_matrix 
Y = dataset_df['class']
X = dataset_df.drop(['class'], axis=1)

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2)

# defining parameter range 
param_grid = {'C': [0.1, 1, 10, 100, 1000], 
            'gamma': [1, 0.1, 0.01, 0.001, 0.0001], 
            'kernel': ['rbf']} 

grid = GridSearchCV(SVC(), param_grid, refit = True, verbose = 3) 

grid.fit(X_train, y_train) 

完整错误:

ValueError (Traceback (最近一次调用) ~\AppData\Local\Temp\ipykernel_728 92563397.py 中 ----> 1 grid.fit(X_train, y_train) c:\users\gurjo ppdata\local\programs\python\python37\lib\site-> packages\sklearn\utils alidation.py in inner_f(*args, **kwargs) 70 未来警告) 71 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)}) ---> 72 返回 f(**kwargs) 73返回inner_f 74 c:\users\gurjo ppdata\local\programs\python\python37\lib\site-> packages\sklearn\model_selection_search.py in fit(self, X, y, 组,**fit_params) 734 返回结果 735 --> 736 self.run_search(evaluate_candidates) 737 738 # 对于多指标评估,存储best_index、best_params_和

c:\users\gurjo ppdata\local\programs\python\python37\lib\site-packages\sklearn\model_selection_search.py 在 _run_search(self, evaluate_candidates) 1186 def _run_search(self, evaluate_candidates): 1187 """搜索param_grid中的所有候选人""" -> 1188 evaluate_candidates(ParameterGrid(self.param_grid)) 1189 1190

c:\users\gurjo ppdata\local\programs\python\python37\lib\site-packages\sklearn\model_selection_search.py 在 evaluate_candidates(candidate_params) 713 用于参数,(训练、测试) 产品中的 714(candidate_params, --> 715 cv.split(X, y, 组))) 716 717 如果 len(out) < 1:

c:\users\gurjo ppdata\local\programs\python\python37\lib\site-packages\sklearn\model_selection_split.py 在拆分(自我,X,Y,组) 332(“不能有拆分数 n_splits={0} 更大” 333 "比样本数:n_samples={1}.") --> 334.format(self.n_splits, n_samples)) 335 336 用于训练,在 super().split(X, y, groups) 中测试:

ValueError:分割数 n_splits=5 不能大于 样本数:n_samples=1.

python jupyter-notebook svm
1个回答
0
投票

看起来你在

dataset_df
中只有一个记录。默认情况下,函数 train_test_split 会尝试为您提供 5 组训练和测试数据集,供您训练模型。因此,该功能需要至少 >5 条记录才能正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.