Coleção aprendizado
Linear / logística
Ajusta mínimos quadrados para resposta numérica ou regressão logística binária para resposta categórica de duas classes.
O que o bloco faz
Ajusta mínimos quadrados para resposta numérica ou regressão logística binária para resposta categórica de duas classes.
Antes de continuar
Termos que esta página usa, em poucas palavras. As definições completas estão no glossário.
- Modelo linear generalizado (GLM)
- Uma extensão do modelo linear para respostas que não são normais, como contagens (Poisson) e proporções ou sim/não (binomial). Uma função de ligação conecta a média da resposta à parte linear do modelo.
- Treino e teste
- Dividir os dados em uma parte para ajustar o modelo (treino) e outra, guardada, para medir o desempenho (teste). O teste só é honesto se o modelo nunca o viu durante o ajuste.
- Validação cruzada
- Repetir a divisão treino/teste várias vezes, cada vez deixando uma parte diferente dos dados de fora, e fazer a média do desempenho. Dá uma estimativa mais estável do erro em dados novos do que uma única divisão.
- Hiperparâmetro
- Uma configuração do método escolhida antes do ajuste, como a profundidade de uma árvore ou o número de árvores de uma floresta. Costuma ser escolhida por validação cruzada, nunca olhando o conjunto de teste.
- Matriz de confusão
- A tabela que cruza a classe verdadeira com a classe prevista. Dela saem acurácia, sensibilidade, especificidade e precisão, que podem contar histórias diferentes quando as classes têm tamanhos muito diferentes.
Quando usar
Use como referência de comparação quando uma relação linear ou uma fronteira logística for adequada.
Pressupostos
O bloco recebe só o treino: o teste foi separado antes (no
ml/split) e não entra em nenhuma escolha — nem de preditores, nem de hiperparâmetros, nem de tratamento de faltantes. A saída teste doml/splitvem marcada e é recusada aqui (tr_ml_error_test_leak); a marca sobrevive ao cache e a filtros, mas não a uma divisão feita por fora nem a juntar treino e teste — nesses casos o bloco não tem como saber o que recebeu.Se falhar: Refaça o fluxo com o
ml/splitno início; a saída teste só vai aomodels/predict. Hiperparâmetros se escolhem noml/tune, com validação cruzada dentro do treino.Nenhum preditor revela a resposta (identificador, código que a embute, medida tomada depois do desfecho).
Verificar:Resumo
Se falhar: Tire essas colunas de
preditores(ou com odata/selectantes doml/split).As linhas são independentes e vêm da mesma população em que o modelo vai ser usado: sem ordem no tempo, sem várias linhas do mesmo indivíduo, lote ou área repartidas entre treino e teste.
Se falhar: Com tempo, use
estrategia = "temporal"noml/splite noml/tune(teste sempre posterior ao treino); com indivíduos, lotes ou áreas repetidos,estrategia = "grupo"(nenhum grupo dos dois lados).Os preditores são numéricos, finitos e sem faltantes — o bloco recusa o resto. Fatores entram só depois de codificados em números.
Verificar:Resumo
Se falhar: Trate faltantes com o
data/drop_naou odata/replace_nae codifique fatores com odata/mutate. Uma imputação que usa estatísticas (média, mediana) deve sair só do treino.A relação entre os preditores e a resposta (ou o logito da classe, na logística) é linear e aditiva: sem curvatura nem interação que o modelo não tenha.
Verificar:Analisar resíduos
Se falhar: Crie termos (quadrado, produto) com o
data/mutateou compare com um modelo de árvore (ml/cart,ml/forest) no mesmo teste.Na classificação, duas classes, e a classe prevista é a segunda quando sua probabilidade é ≥
corte(padrão 0,5). Com classes desequilibradas o corte 0,5 favorece a maioritária.Verificar:Matriz de confusão
Se falhar: Leia a
balanced_accuracynomodels/evaluatee a curva nomodels/roc, que não dependem do corte. Se mudar ocorte, escolha-o com dados de treino (validação), nunca olhando o teste.
Configuração
resposta é a coluna a prever; preditores lista preditores numéricos separados por vírgula (vazio usa todos os numéricos exceto a resposta); tarefa aceita auto, regressao ou classificacao; seed fixa o ajuste.
Exemplo
d <- trama.ml::tr_ml_example("mtcars")
m <- trama.ml::tr_ml_linear(d, resposta = "mpg", preditores = "wt, hp")
trama.models::tr_models_predict(m, d[1:3, ])
Como interpretar
O modelo produz models/fit, consumido por models/predict (e pelos avaliadores da coleção de modelos). Resposta numérica em auto indica regressão; resposta categórica indica classificação binária.
Teste recusado
A saída teste do ml/split é recusada aqui (tr_ml_error_test_leak): ajustar nela treinaria no teste. Ligue a saída treino; o teste vai só ao models/predict.
Implementação
stats::lm()versão 4.6.0Regressão: mínimos quadrados sobre os preditores escolhidos, sem interações.stats::glm()versão 4.6.0Classificação binária:family = binomial(); a classe prevista é a segunda quando sua probabilidade é ≥corte.
No código O bloco chama trama.ml::tr_ml_linear(), em trama.ml/R/nodes.R:59.
A conta é feita nestas chamadas:
stats::lm(f, treino)stats::glm(f, treino, family = stats::binomial())
Outras funções de pacotes que o bloco usa (10)
stats::reformulate(d$internos, response = ".y")stats::binomial()rpart::rpart(f, treino, method = if (d$tarefa == "regressao") "anova" else "class", control = rpart::rpart.control(maxdepth = max_depth, minbucket = min_n, m...rpart::rpart.control(maxdepth = max_depth, minbucket = min_n, minsplit = minsplit, cp = cp, xval = if (poda == "nenhuma") 0L else min(10L, nrow(treino)))rpart::prune(arvore, cp = extras$poda$cp)figsr::figs(f, treino, max_splits = max_splits, min_n = min_n, mode = if (d$tarefa == "regressao") "regression" else "classification")ranger::ranger(f, treino, num.trees = trees, mtry = mm, min.node.size = min_n, max.depth = max_depth, probability = d$tarefa == "classificacao", seed = seed,...e1071::svm(x = d$x, y = d$y, type = if (d$tarefa == "regressao") "eps-regression" else "C-classification", kernel = kernel, cost = cost, gamma = gamma, proba...xgboost::xgb.train(params = params, data = xgboost::xgb.DMatrix(X, label = label), nrounds = nrounds, verbose = 0)xgboost::xgb.DMatrix(X, label = label)
Referências
Livro-texto
- James, G.; Witten, D.; Hastie, T.; Tibshirani, R. (2021). An Introduction to Statistical Learning: with Applications in R. 2. ed. New York: Springer. doi:10.1007/978-1-0716-1418-1
- Hastie, T.; Tibshirani, R.; Friedman, J. (2009). The Elements of Statistical Learning: Data Mining, Inference, and Prediction. 2. ed. New York: Springer. doi:10.1007/978-0-387-84858-7