Machine Learning · Insper
Seleção de Modelos
Abordagem avançada
Escolher entre muitos modelos sem se enganar com a sorte
O caminho desta parte
- Uma escala comumo número efetivo de parâmetros
- Regressão à médiapor que o escore do vencedor cai ao medir de novo
- Comparar famíliasuma busca sobre todas as famílias, não existe almoço grátis, a navalha de Occam
- O fluxo completocinco passos, uma porta de mão única antes do teste, depois o lab
Cada etapa responde a uma pergunta: como comparar a complexidade de famílias diferentes? → por que o vencedor piora na medida seguinte? → qual família vence e como desempatar? → onde entra o conjunto de teste?
Etapa 1 · Como comparar a complexidade de famílias diferentes?
Uma escala comum: parâmetros efetivos
Para modelos cuja previsão é uma soma ponderada dos rótulos de treino: some o peso que cada ponto dá ao próprio rótulo.
\(n\): pontos de treino · \(p\): colunas · \(k\): vizinhos no k-vizinhos mais próximos (k-NN, do inglês k-Nearest Neighbors) · \(\alpha\): a penalidade do Ridge.
| modelo | parâmetros efetivos | com \(n = 30\) |
| mínimos quadrados, \(p\) colunas | \(p\) | |
| k-NN | \(n / k\) | \(k = 30\): 1 · \(k = 3\): 10 · \(k = 1\): 30 |
| Ridge | cai de \(p\) em direção a 1 (o intercepto, sem penalidade) à medida que \(\alpha\) cresce | contínuo |
Uma penalidade transforma a escada dos graus numa rampa: é por isso que ela é um botão tão conveniente. \(k = 1\) gasta um parâmetro por ponto: memorização.
Etapa 2 · Por que o vencedor piora na medida seguinte?
Regressão à média
Nota = habilidade (desvio-padrão, dp, 8) + sorte do dia (o dp dela na primeira coluna). Confiabilidade: \(r = \frac{\sigma^2_\text{habilidade}}{\sigma^2_\text{habilidade} + \sigma^2_\text{sorte}} = \frac{8^2}{8^2 + \text{sorte}^2}\).
Preveja. Os 10% de cima na prova 1 mantêm a nota na prova 2? E quando a sorte cresce?
| dp da sorte | \(r\) | prova 1 | prova 2 |
| 2 | 0,94 | 84,4 | 83,5 |
| 6 | 0,64 | 87,6 | 80,9 |
| 16 | 0,20 | 101,4 | 76,1 |
Esperado na prova 2: média + \(r \times\) vantagem. Sorte de dp 6: vantagem \(= 87{,}6 - 70 = 17{,}6\) e \(r = 64/100 = 0{,}64\), então \(70 + 0{,}64 \times 17{,}6 \approx 81{,}3\) (simulado: 80,9). Só a parte da vantagem que é habilidade se repete.
Na seleção de modelos
- Uma configuração é um estudante; seu desempenho futuro, a habilidade; sua nota de validação cruzada (CV, do inglês cross-validation), uma prova com sorte (os folds, a amostra).
- Perto do topo de uma grade, as configurações quase não diferem (pouca habilidade) e o ruído da CV continua o mesmo: confiabilidade baixa.
- Mais candidatos → vencedor mais extremo → mais sortudo. Em puro ruído, o melhor de 100 caiu de 61,2% para 50,9%.
Nunca reporte a nota que escolheu o vencedor. Meça de novo em dados que não participaram da escolha: o teste trancado ou a CV aninhada. Folds novos sobre as mesmas linhas só mostram quanto do ranking é sorte dos folds.
Etapa 3 · Qual família vence e como desempatar?
A família como hiperparâmetro
pipe = Pipeline([('scale', StandardScaler()), ('model', LogisticRegression())])
param_grid = [ # uma lista de grades: uma por família
{'model': [LogisticRegression(max_iter=5000)], 'model__C': np.logspace(-3, 3, 7)},
{'model': [KNeighborsClassifier()], 'model__n_neighbors': [1, 3, 5, 9, 15, 25, 51]},
{'model': [SVC()], 'model__C': [0.1, 1, 10, 100], 'model__gamma': ['scale', 0.01, 0.1]},
{'model': [DecisionTreeClassifier(random_state=0)], 'scale': ['passthrough'],
'model__max_depth': [1, 2, 3, 4, 6, 8, 12, None]},
]
Retornos de radar: 34 configurações, 4 famílias, uma busca. Máquina de vetores de suporte (SVM, do inglês support vector machine) 0,946 · árvore 0,897 · logística 0,883 · k-NN 0,866.
A vaga model recebe estimadores diferentes; 'passthrough' desliga uma etapa. Mesmo cv para todas: dá para comparar fold a fold.
Não existe almoço grátis
| conjunto | logística | k-NN | SVM | árvore |
| ionosphere (real) | 0,883 | 0,866 | 0,946 | 0,897 |
| breast cancer (real) | 0,979 | 0,965 | 0,979 | 0,930 |
| credit-g (real) | 0,761 | 0,735 | 0,760 | 0,719 |
| linear, 40-d | 0,820 | 0,710 | 0,805 | 0,725 |
| duas luas | 0,853 | 0,900 | 0,895 | 0,887 |
| regra alinhada aos eixos | 0,640 | 0,636 | 0,686 | 0,938 |
Toda família chega ao topo (sozinha ou empatada) em algum lugar e perde feio em algum lugar (Wolpert, 1996). Cada uma aposta numa estrutura — o seu viés indutivo.
As apostas de cada família
Regressão logística
a fronteira é um hiperplano
k-NN
pontos próximos compartilham rótulos
SVM com kernel de função de base radial (RBF, do inglês radial basis function)
a fronteira é suave
Árvore
poucos limiares em poucos atributos
Uma família vence quando sua aposta combina com o problema. Não dá para saber de antemão: por isso a seleção compara famílias, nos mesmos folds.
A navalha de Occam, operacionalizada
- Breast cancer: logística e SVM, ambas 0,979. Credit-g: 0,761 contra 0,760.
- Num empate dentro do ruído, fique com o mais simples: 31 números e um produto escalar, contra vetores de suporte e um kernel.
- Por quê? Um modelo mais flexível tem notas de CV mais ruidosas, então sua vitória apertada tem mais chance de ser sorte da seleção; o mais simples também depende menos da amostra, se sustenta melhor quando os dados mudam e é mais barato de rodar e explicar.
"Mais simples" não é "menos linhas de código": é menos parâmetros efetivos, regularização mais forte, menos atributos.
Etapa 4 · Onde entra o conjunto de teste?
O fluxo completo
Tudo à esquerda da porta usa só as linhas de treino. Testar, olhar o número e voltar para "melhorar" transforma o teste em validação.
Lab avançado · cerca de 30 min, em duplas
Selecionar e testar, passos 7 a 9
- Mesmo notebook, mesma sessão: os passos usam
pre, cv, rmse e candidates dos passos 1 a 6.
- Uma busca com Ridge, k-NN e árvore; reembaralhar os folds para ver quanto do ranking é sorte; abrir o teste uma vez.
- Notebook no Colab, a partir do passo 7.
- Simulações: o empate, fold a fold (passo 7) e quão precisa é a nota de teste? (passo 9).
Ritmo: passo 7 e a primeira simulação em 12 min; passo 8 em 8 min; passo 9 e a segunda simulação em 10 min.