ValueError: n_splits = 10 no puede ser mayor que el número de miembros en cada clase

Estoy tratando de ejecutar el siguiente código:

from sklearn.model_selection import StratifiedKFold X = ["hey", "join now", "hello", "join today", "join us now", "not today", "join this trial", " hey hey", " no", "hola", "bye", "join today", "no","join join"] y = ["n", "r", "n", "r", "r", "n", "n", "n", "n", "r", "n", "n", "n", "r"] skf = StratifiedKFold(n_splits=10) for train, test in skf.split(X,y): print("%s %s" % (train,test)) 

Pero me sale el siguiente error:

 ValueError: n_splits=10 cannot be greater than the number of members in each class. 

He buscado aquí el error de scikit-learn: la clase menos poblada de y tiene solo 1 miembro, pero todavía no estoy realmente seguro de qué es lo que está mal con mi código.

Mis listas ambas tienen longitudes de 14 print(len(X)) print(len(y)) .

Parte de mi confusión es que no estoy seguro de qué se define a los members y qué class es en este contexto.

Preguntas: ¿Cómo soluciono el error? ¿Qué es un miembro? ¿Qué es una clase? (en este contexto)

La estratificación significa mantener la proporción de cada clase en cada pliegue. Entonces, si su conjunto de datos original tiene 3 clases en la proporción de 60%, 20% y 20%, la estratificación intentará mantener esa proporción en cada pliegue.

En tu caso,

 X = ["hey", "join now", "hello", "join today", "join us now", "not today", "join this trial", " hey hey", " no", "hola", "bye", "join today", "no","join join"] y = ["n", "r", "n", "r", "r", "n", "n", "n", "n", "y", "n", "n", "n", "y"] 

Tienes un total de 14 muestras (miembros) con la distribución:

 class number of members percentage 'n' 9 64 'r' 3 22 'y' 2 14 

Así que StratifiedKFold intentará mantener esa proporción en cada doblez. Ahora ha especificado 10 pliegues (n_splits). Así que eso significa en un solo pliegue, para que la clase ‘y’ mantenga la proporción, al menos 2/10 = 0.2 miembros. Pero no podemos dar menos de 1 miembro (muestra), por eso es que está generando un error.

Si en lugar de n_splits=10 , ha establecido n_splits=2 , entonces habría funcionado, porque el número de miembros para ‘y’ será n_splits = 10 1. Para que n_splits = 10 funcione correctamente, debe tener Al menos 10 muestras para cada una de tus clases.