stratifiedkfold sklearn scikit learn example cross runtime-error svm scikit-learn cross-validation

runtime-error - sklearn - svm kernel scikit learn



Tengo más de 3 elementos en cada clase pero obtengo este error: la clase no puede ser menor que k=3 en scikit-learn (2)

Este es mi objetivo (y):

target = [7,1,2,2,3,5,4, 1,3,1,4,4,6,6, 7,5,7,8,8,8,5, 3,3,6,2,7,7,1, 10,3,7,10,4,10, 2,2,2,7]

No sé por qué mientras estoy ejecutando: ... # Dividir el conjunto de datos en dos partes iguales X_train, X_test, y_train, y_test = train_test_split (X, y, test_size = 0.5, random_state = 0)

# Set the parameters by cross-validation tuned_parameters = [{''kernel'': [''rbf''], ''gamma'': [1e-3, 1e-4], ''C'': [1, 10, 100, 1000]}, {''kernel'': [''linear''], ''C'': [1, 10, 100, 1000]}] scores = [''precision'', ''recall''] for score in scores: print("# Tuning hyper-parameters for %s" % score) print() clf = GridSearchCV(SVC(C=1), tuned_parameters)#scoring non esiste #I get error in the line below clf.fit(X_train, y_train, cv=5) ...

me sale este error:

Traceback (most recent call last): File "C:/Python27/SVMpredictCROSSeGRID.py", line 232, in <module> clf.fit(X_train, y_train, cv=5) #The minimum number of labels for any class cannot be less than k=3. File "C:/Python27/lib/site-packages/sklearn/grid_search.py", line 354, in fit return self._fit(X, y) File "C:/Python27/lib/site-packages/sklearn/grid_search.py", line 372, in _fit cv = check_cv(cv, X, y, classifier=is_classifier(estimator)) File "C:/Python27/lib/site-packages/sklearn/cross_validation.py", line 1148, in check_cv cv = StratifiedKFold(y, cv, indices=is_sparse) File "C:/Python27/lib/site-packages/sklearn/cross_validation.py", line 358, in __init__ " be less than k=%d." % (min_labels, k)) ValueError: The least populated class in y has only 1 members, which is too few. The minimum number of labels for any class cannot be less than k=3.


El algoritmo requiere que haya al menos 3 instancias para una etiqueta en su conjunto de entrenamiento. Aunque la matriz de target contiene al menos 3 instancias de cada etiqueta, pero cuando se dividen los datos entre la capacitación y la prueba, no todas las etiquetas de capacitación tienen 3 instancias.

O necesita fusionar algunas etiquetas de clase o aumentar sus muestras de capacitación para resolver el problema.


si no se puede dividir la prueba y el conjunto de trenes con cada clase poblada en cada pliegue, intente actualizar la biblioteca scikit.

pip install -U scikit-learn

recibirá el mismo mensaje como una advertencia para que pueda ejecutar el código.