1
resposta

ValueError no KFold do Scikit-learn: o meu dataset tem duas classes! O que está acontecendo?

Tentei fazer uma validação cruzada com uma regressão logística usando o Scikit-learn . Segue o código:

kf = KFold(n_splits=5, random_state=None, shuffle=False)
    kf.get_n_splits(previsores)
    for train_index, test_index in kf.split(previsores):

        X_train, X_test = previsores[train_index], previsores[test_index]
        y_train, y_test = classe[train_index], classe[test_index]

        logmodel.fit(X_train, y_train)
        print (confusion_matrix(y_test, logmodel.predict(X_test)))


        lista_matrizes.append(confusion_matrix(y_test, logmodel.predict(X_test)))
    #print(f" Matriz de Confusão Média \n{np.mean(lista_matrizes, axis=0)}")
    print("Matriz de Confusão Média")
    print(np.mean(lista_matrizes, axis=0))

Estou recebendo o seguinte erro:

ValueError: This solver needs samples of at least 2 classes in the data, but the data contains only one class: 1

O meu dataset tem duas classes (0 e 1) mas recebo o erro acima. O que fazer?

1 resposta

Oi Edson, parece que é um bug do scikit-learn. Você pode ler mais a respeito aqui: https://github.com/lensacom/sparkit-learn/issues/49

O que é sugerido é que você embaralhe seus dados com a função shuffle(), assim:

from sklearn.utils import shuffle

X_train, Y_test = shuffle(previsores[train_index]), shuffle(previsores[test_index])

Teste assim e veja se dá algum resultado. Ou tente mudar o valor do argumento do atributo shuffle de KFold para True.

Aguardo seu feedback.