1
resposta

Problema ao executar Função Treino Teste - ValueError: empty range for randrange()

Estou aplicando o passo a passo sobre Regressão Logística em uma base com 2037041 rows × 28 columns. Estou com problema ao separar a base Treino e Teste, seguindo a função, conforme o Notebook Ao colocar os critérios para executar função, é apresentado erro ValueError: empty range for randrange()

Podem me ajudar?

def divisao_treinamento_teste(X, y, porcentagem_teste, random_seed = 42):
    random.seed(random_seed)

    X_test, y_test = [], []

    X_train = list(X)
    y_train = list(y)

    tam_y = porcentagem_teste * len(y)

    while len(y_test) < tam_y:
        index = random.randrange(len(X_train))
        X_test.append(X_train.pop(index))
        y_test.append(y_train.pop(index))

    return np.array(X_train), np.array(X_test), np.array(y_train), np.array(y_test)

X_train, X_test, y_train, y_test = divisao_treinamento_teste(X_, y, 0.3)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-69-7433a058c699> in <module>
----> 1 X_train, X_test, y_train, y_test = divisao_treinamento_teste(X_, y, 0.3)

<ipython-input-68-1fbbe213ec6d> in divisao_treinamento_teste(X, y, porcentagem_teste, random_seed)
     10 
     11     while len(y_test) < tam:
---> 12         index = random.randrange(len(X_train))
     13         X_test.append(X_train.pop(index))
     14         y_test.append(y_train.pop(index))

C:\ProgramData\Anaconda3\lib\random.py in randrange(self, start, stop, step, _int)
    214             if istart > 0:
    215                 return self._randbelow(istart)
--> 216             raise ValueError("empty range for randrange()")
    217 
    218         # stop argument supplied.

ValueError: empty range for randrange()
1 resposta

Oi Felipe, como você está?

Peço desculpas pela demora em obter um retorno.

De acordo com o log de erro, aparentemente o tamanho da sua variável X_train está sendo retornado como zero, por isso não é possível retornar um número aleatório dentro de um intervalo, uma vez que o intervalo está zerado, como mostro abaixo:

import random
random.randrange(0)

Resultado: ValueError: empty range for randrange()

Acrescento também, que ao executar o seu código na base de dados do curso (5000x5), tudo ocorreu como esperado. Porém, como desconheço sua base de treinamento, fica incerto de dizer como corrigir, mas indico que verifique sobre o valor que está sendo retornado no tamanho da amostra de treinamento (len(X_train)).

O passo a passo para construir as variáveis X_ e X_train pode ser encontrado no notebook do projeto final do curso, que você pode baixar através deste link.

Caso não obtenha êxito, para que eu possa te ajudar de forma direcionada, peço que compartilhe seu projeto conosco. Basta compartilhar o link do drive ou github com todos os arquivos do projeto na resposta.

Qualquer dúvida fico à disposição.

Abraços e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software