veja figura 7.1
essa é uma rede neural de uma camada escondida (que é o caso mais comum)
é também chamada de MLP (multi layer perceptron).
o algoritmo de “back propagation” é na verdade uma decida do gradiente. So encontra um mínimo local!
redes neurais tem muitos parâmetros (que pode levar a overfitting)
soluções para overfitting
early stopping: use um pequeno conjunto de teste (chamado de validação) e pare a descida do gradiente quando o erro na validação começar a crescer.
weight decay: isso é uma regularização L2
mais modernamente, usa-se uma ativação chamada “relu” em vez da função logística g
hiperparametros: numero de neurônios na camada do meio, e o lambda da regularização L2.
variações nos algoritmos de descida do gradiente (momento, adam, RMSprop, nesterov AG, etc - veja MO431)
https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor
SVM é mais fácil de entender usando classificação - veja cap 13 do livro.
1a versão é uma regressão linear usando
uma função de loss linear com uma região \(\epsilon\) de “não faz diferença” - veja a 4a figura na fig 7.6. Desde que a sua previsão fique a menos do que \(\epsilon\) do valor correto isso não é considerado como erro.
regularização L2
o hiperparametro da regularização aparece “no lugar errado” multiplicando o erro (e não o termo de regularização) e é chamado de C
2a versão:
a 3a linha da equação 7.2 é o central. Em vez de usar os coeficientes \(\beta\) para cada dimensão/atributo a formula usa um coeficiente \(\alpha\) para cada dado do conjunto de treino!
isso é chamado da formula dual do SVM (e é muito mais clara quando falamos de classificação e não de regressão).
isso parece uma ideia super ruim pois provavelmente há muito mais dados que dimensões e portanto muito mais parametros para determinar - isso pode levar ao overfitting.
isso tambem é ruim pois temos que nos lembrar de todos os dados do treino.
mas o \(\alpha\) sera 0 para todos os pontos que não contribuem para o erro (pontos cuja previsão é menos que \(\epsilon\) do valor correto)
os pontos fora desta faixa sao os únicos onde \(\alpha>0\), são os únicos que o algoritmo precisa se lembrar. Sao chamados de support vector
finalmente a ultima linha de 7.2 pode ser escrito como
\[f(u) = \beta_0 + \sum_{x_i \in s.v} \alpha_i \langle x_i , u \rangle\]
onde \(\langle x_i , u \rangle\) é o produto interno.
esse produto interno pode ser trocado por outras funções que dado 2 vetores retornem um numero. Essas funções são chamadas de kernel
isso permite que a regressão seja nao-linear
Kernel \(K(x,u)\)
linear = produto interno \(\langle x, u \rangle = x^T u\)
RBF = \(e^{\frac{|x-u|^2}{\gamma}}\) O livro usa \(\sigma = 1/\gamma\)
polinomial
e outros
Kernel RBF é normalmente muito bom, mas ele tem um novo hiperparametos o \(\gamma\) (gamma).
Hiperparametros: C, \(\gamma\) e \(\epsilon\).
\(\epsilon\) esta em unidades do \(y\) e deve ser buscado linearmente, ou é fixo meio que arbitrariamente (talvez 0?)
C alto significa muito custo para erros e portanto maior possibilidade de overfitting. A curva vai ser seguir mais os dados. Poucos support vectors
C deve ser procurado logaritmicamente entre \(2^{-5}\) a \(2^{15}\) (para classificação)
\(\gamma\) alto indica que a função de regressão pode ser rugosa. \(\gamma\) baixo indica que ela deve ser mais suave, perto da reta. Deve ser procurado logaritmicamente entre \(2^{-9}\) e \(2^3\) (para atributos normalizados).
sklearn: https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html?highlight=svm#sklearn.svm.SVR
e https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVR.html#sklearn.svm.LinearSVR para o kernel linear
K é um hiperparametro
Escolha os K vizinhos mais próximos (no conjunto de treino) do dado novo. Retorne a média do valor desses vizinhos.
Os dados devem estar normalizados para que a distancia possa ter sentido.
K baixo implica num modelo complexo e potencial de overfitting.
K alto modelo menos complexo (tira a media de vários dados e não depende tanto do mais próximo) K=n retorna a media dos dados de treino sempre!
KNN não demora nada para treinar mas \(O(n)\) para testar cada dado! Pode-se usar estruturas de dados para achar mais rapidamente os k-vizinhos (kd-tree, ball tree)
Alternativas:
media ponderada pelo inverso da distancia em vez de média
mediana em vez de média
outras medidas de distancia
problema: curse of dimensionality ou maldição da dimensionalidade. Distancias em espaços de muitas dimensões podem não significar muito - a maioria dos pontos esta a uma mesma distancia de todos os outros!!
sklearn https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsRegressor.html#sklearn.neighbors.KNeighborsRegressor