1
resposta

Não consegui utilizar a função parse_args()

Executei os mesmos processos conforme a aula utilizando a função parse_args():

def parse_args():
    parser = argparse.ArgumentParser(description='House Prices ML')
    parser.add_argument(
        '--learning-rate',
        type=float,
        default=0.3,
        help="taxa de aprendizado para atualizar o tamanho de cada passo do boosting"

    )
    parser.add_argument(
        '--max-depth',
        type=int,
        default=6,
        help='profundidade maxima das arvores'
    )
    return parser.parse_args()

Porém me retorna um erro onde não consegui identificar o problema...

usage: ipykernel_launcher.py [-h] [--learning-rate LEARNING_RATE]
                                                            [--max-depth MAX_DEPTH]
ipykernel_launcher.py: error: unrecognized arguments: -f /home/analytics/.local/share/jupyter/runtime/kernel

An exception has occurredm, use %tb to see the full traceback.

SystemExit: 2
1 resposta

Oii Tiago, como você está?

Sinto muito pela demora em obter um retorno.

O módulo argparse tem como objetivo ser utilizado em linha de comando como mostrado pelo instrutor no vídeo, onde foi utilizado um arquivo python e executado no terminal.

Em casos de utilizá-lo em células de notebooks (como utilizado por você), seja do Jupyter Notebook, quanto do Google Colab, é necessário passar uma string vazia para a função parse_args() como mostro abaixo:

return parser.parse_args("")

Após isso tente executar novamente.

Observação: para modificar os valores dos parâmetros, terá de alterar dentro da própria função parse_args.

No entanto, uma solução mais elegante para o caso de utilizarmos em células de notebooks é definir uma função que terá valores padrões, onde se não passarmos o argumento o valor padrão será utilizado, como mostro abaixo:

def argumentos_house_princes(learning_rate = 0.3, max_depth=6):
    '''
    Função que mapeia os valores de learning_rate e max_depth.

            Parâmetros:
                    learning_rate (float): Taxa de aprendizado para atualizar o tamanho de cada passo do boosting
                    max_depth (int): Profundidade maxima das arvores

            Retorna:
                    dicionário com os valores de learning_rate(default=0.3) e max_depth(default=6) 
    '''

    return {
        'learning_rate': learning_rate,
        'max_depth': max_depth,
    }
args = argumentos_house_princes(0.9, 5)
xgb_params = {
    'learning_rate': args['learning_rate'],
    'max_depth': args['max_depth'],
    'seed': 42
}
xgb_params

# Resultado: {'learning_rate': 0.9, 'max_depth': 5, 'seed': 42}

Dessa forma, elimina a passagem de argumentos por linha de comando e funciona bem em cenários de células do Jupyter Notebook ou Google Colab.

Qualquer dúvida fico à disposição.

Grande abraço e bons estudos!