Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

R2 está diminuindo quando aumento o C

Se o parâmetro C lida menos com o ruído, a minha curva terá menos ruído conforme eu aumento o C. Assim, ela ficaria mais próxima da curva "real", sendo refletido no R2, que estaria mais próximo de 1. A primeira vez, com C=1 ficou parecido com o da aula, uma curva bem estranha. E assim como foi feito na aula, fui aumentando o valor do meu C. Só que enquanto eu fazia isso minha curva foi ficando mais estranha (ao invés de ficar mais parecida) e valor do R2 só diminuiu. Porque isso está acontecendo? O meu código é o mesmo que o instrutor passou, conferi várias vezes.

Meu caderno no Colab: https://colab.research.google.com/drive/1HI24Pw-65CIiufECg3wbm3bn4a_HqTHB?usp=sharing (comentários permitidos)

Print dos vários resultados com diferentes valores de C: https://imgur.com/a/mytl7TZ

2 respostas
solução!

Oi Rafael,

Bem legal que você compartilhou as figuras. Eu vou tentar responder os seus dois posts aqui. Temos duas questões diferentes.

  1. Sim existe um fator aleatoriedade e a sua resposta vai ser diferente da minha. Eu não quis inserir o tópico do random state neste ponto do curso porque a explicação do SVR é um pouco densa. Achei que ficava mais intuitivo na parte de classificação. Com exceção das regressões lineares os algoritmos costumam ser iterativos. Eles dependem de uma estimativa inicial que é refinada através de um certo número de iterações. Por isso, você pode assumir que esses algoritmos dependem de um random_state quando não fornece uma estimativa inicial.

  2. O valor do R2 começou a diminuir depois que o C passa de um determinado valor nas suas figuras. O que eu disse sobre o C diminuir o quanto lida com ruído continua válido. Num algoritmo iterativo é comum que erros sejam propagados no decorrer das iterações. Por isso um C que lida menos com ruído pode ser um problema.

Então como escolher o C (parâmetro de regularização)? Fazendo justamente o que você fez. Testar diferentes valores de C e verificar o resultado de alguma métrica. Na prática não fazemos isso na mão. Fazemos uma busca em um malha de valores. Exemplo:

# Fit regression model
train_size = 100
svr = GridSearchCV(SVR(kernel='rbf', gamma=0.1),
                   param_grid={"C": [1e0, 1e1, 1e2, 1e3],
                               "gamma": np.logspace(-2, 2, 5)})

Aqui está testando diferentes valores de C e do parâmetro gamma.

Peguei este exemplo deste link do site do sklearn: https://scikit-learn.org/stable/auto_examples/miscellaneous/plot_kernel_ridge_regression.html

Muito obrigado Allan! Eu consegui compreender muito bem agora com sua resposta! Os dois tópicos foram respondidos e minhas dúvidas foram tiradas.

Obrigado!