Machine Learning é uma tecnologia que permite que computadores aprendam a partir de dados, como imagens e números. Este relatório aborda dois algoritmos populares: a Regressão Linear e a Árvore de Decisão.
Demonstrar a construção e aplicação de modelos de regressão linear e árvore de decisão na linguagem R.
Foram utilizados dois conjuntos de dados. O primeiro, “mpg”, é parte
do pacote ggplot2 e contém informações sobre a eficiência
de combustível de vários veículos testados pela EPA. Ele inclui
atributos como fabricante, modelo, deslocamento do motor, ano de
fabricação, número de cilindros, tipo de transmissão, tipo de tração,
consumo de combustível na cidade e na estrada, e categoria do veículo. O
segundo conjunto de dados, “iris”, é um clássico da literatura de
aprendizado de máquina, contendo 150 observações de flores de íris de
três espécies (Setosa, Versicolor, Virginica). Cada observação possui
quatro características (comprimento e largura da sépala, comprimento e
largura da pétala) e a espécie correspondente, sendo amplamente
utilizado para testar algoritmos de classificação.
glimpse(mpg)
## Rows: 234
## Columns: 11
## $ manufacturer <chr> "audi", "audi", "audi", "audi", "audi", "audi", "audi", "…
## $ model <chr> "a4", "a4", "a4", "a4", "a4", "a4", "a4", "a4 quattro", "…
## $ displ <dbl> 1.8, 1.8, 2.0, 2.0, 2.8, 2.8, 3.1, 1.8, 1.8, 2.0, 2.0, 2.…
## $ year <int> 1999, 1999, 2008, 2008, 1999, 1999, 2008, 1999, 1999, 200…
## $ cyl <int> 4, 4, 4, 4, 6, 6, 6, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 8, 8, …
## $ trans <chr> "auto(l5)", "manual(m5)", "manual(m6)", "auto(av)", "auto…
## $ drv <chr> "f", "f", "f", "f", "f", "f", "f", "4", "4", "4", "4", "4…
## $ cty <int> 18, 21, 20, 21, 16, 18, 18, 18, 16, 20, 19, 15, 17, 17, 1…
## $ hwy <int> 29, 29, 31, 30, 26, 26, 27, 26, 25, 28, 27, 25, 25, 25, 2…
## $ fl <chr> "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p…
## $ class <chr> "compact", "compact", "compact", "compact", "compact", "c…
glimpse(iris)
## Rows: 150
## Columns: 5
## $ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, 4.…
## $ Sepal.Width <dbl> 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.…
## $ Petal.Length <dbl> 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.…
## $ Petal.Width <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.…
## $ Species <fct> setosa, setosa, setosa, setosa, setosa, setosa, setosa, s…
No contexto do aprendizado supervisionado, a Regressão Linear se destaca como um dos modelos mais reconhecidos para prever respostas quantitativas, devido à sua simplicidade em representar dados por meio de uma linha reta e à rapidez no treinamento.
library(plyr)
carros <- rename(mpg, c("manufacturer" = "Marca",
"displ" = "Cilindradas",
"cty" = "Consumo",
"drv" = "Tração",
"class" = "Tipo",
"model" = "Modelo",
"year" = "Ano"))
names(carros)
## [1] "Marca" "Modelo" "Cilindradas" "Ano" "cyl"
## [6] "trans" "Tração" "Consumo" "hwy" "fl"
## [11] "Tipo"
O gráfico mostra a relação entre as cilindradas (deslocamento do motor em litros) e o consumo de combustível na cidade (milhas por galão) de diferentes tipos de veículos, representados por diferentes cores, com o tamanho dos pontos indicando o tipo de tração.
ggplot(carros, aes(Cilindradas, Consumo)) +
geom_point(aes(size = Tração, color = Tipo)) +
geom_smooth(method = "lm") +
labs(
title = "Relação entre Cilindradas e Consumo de Combustível",
x = "Cilindradas (litros)",
y = "Consumo na Cidade (milhas por galão)",
size = "Tipo de Tração",
color = "Tipo de Veículo"
) +
theme_minimal()
De maneira geral, observa-se que veículos com maiores cilindradas tendem a consumir mais combustível na cidade. Em outras palavras, à medida que o deslocamento do motor aumenta, o consumo de combustível também aumenta, o que é consistente com a expectativa de que motores maiores geralmente consomem mais combustível.
set.seed(123)
filtro <- sample(1:nrow(carros), nrow(carros) * 0.7)
treino <- carros[filtro, ]
teste <- carros[-filtro, ]
modelo_reg_linear <- lm(Consumo ~ Cilindradas, data = treino)
summary(modelo_reg_linear)
##
## Call:
## lm(formula = Consumo ~ Cilindradas, data = treino)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.7197 -1.6044 -0.1616 1.0932 13.5593
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 26.7423 0.6124 43.66 <2e-16 ***
## Cilindradas -2.7903 0.1635 -17.07 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.772 on 161 degrees of freedom
## Multiple R-squared: 0.644, Adjusted R-squared: 0.6418
## F-statistic: 291.2 on 1 and 161 DF, p-value: < 2.2e-16
predicoes <- predict(modelo_reg_linear, teste)
erro <- teste$Consumo - predicoes
mse <- mean(erro^2)
mae <- mean(abs(erro))
r2 <- 1 - (sum(erro^2) / sum((teste$Consumo - mean(teste$Consumo))^2))
cat("Mean Squared Error (MSE):", mse, "\n")
## Mean Squared Error (MSE): 4.382306
cat("Mean Absolute Error (MAE):", mae, "\n")
## Mean Absolute Error (MAE): 1.592549
cat("R-squared:", r2, "\n")
## R-squared: 0.5789425
Árvore de Decisão também é um algoritmo de aprendizado de máquina supervisionado. Utilizado tanto para classificação quanto para regressão. Isso significa que ele pode ser empregado para prever categorias discretas (como sim ou não) e valores numéricos (como o valor do lucro em reais), ou seja, mais abrangente.
library(rpart)
set.seed(123)
filtro_i <- sample(1:nrow(iris), nrow(iris)*0.7)
treino_i <- iris[filtro,]
teste_i <- iris[-filtro,]
modelo_i <- rpart(Species ~ ., data = treino_i)
prp(modelo_i, extra = 1)
prev_i <- predict(modelo_i, teste_i, type = "class")
confusionMatrix(prev_i, teste_i$Species)
## Confusion Matrix and Statistics
##
## Reference
## Prediction setosa versicolor virginica
## setosa 15 0 0
## versicolor 0 10 1
## virginica 0 2 13
##
## Overall Statistics
##
## Accuracy : 0.9268
## 95% CI : (0.8008, 0.9846)
## No Information Rate : 0.3659
## P-Value [Acc > NIR] : 7.234e-14
##
## Kappa : 0.8896
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: setosa Class: versicolor Class: virginica
## Sensitivity 1.0000 0.8333 0.9286
## Specificity 1.0000 0.9655 0.9259
## Pos Pred Value 1.0000 0.9091 0.8667
## Neg Pred Value 1.0000 0.9333 0.9615
## Prevalence 0.3659 0.2927 0.3415
## Detection Rate 0.3659 0.2439 0.3171
## Detection Prevalence 0.3659 0.2683 0.3659
## Balanced Accuracy 1.0000 0.8994 0.9272
#install.packages("kableExtra")
library(kableExtra)
| Prediction | setosa | versicolor | virginica |
|---|---|---|---|
| setosa | 15 | 0 | 0 |
| versicolor | 0 | 10 | 1 |
| virginica | 0 | 2 | 13 |
O modelo de Regressão Linear ajustado para prever o consumo de combustível com base nas cilindradas dos veículos apresentou um intercepto de 26.7423 e um coeficiente para cilindradas de -2.7903, ambos com significância estatística elevada. Isso indica que, em média, o consumo de combustível diminui em 2.7903 milhas por galão para cada litro adicional de cilindrada. O Erro Quadrático Médio (MSE) foi de 4.3823, sugerindo uma boa adequação do modelo, enquanto o Erro Absoluto Médio (MAE) foi de 1.5925, oferecendo uma visão intuitiva da precisão. O R-quadrado (R²) foi de 0.5789, indicando que aproximadamente 57.89% da variabilidade no consumo de combustível é explicada pelas cilindradas, embora o modelo não capture toda a variação observada. Em resumo, o modelo confirma a relação inversa entre cilindradas e consumo de combustível, mas indica a presença de outros fatores influentes. No caso do modelo de Árvore de Decisão, que visou classificar as espécies de íris com base em características morfológicas, a matriz de confusão revelou uma acurácia de 92.68% e um índice Kappa de 88,96%, demonstrando um bom desempenho geral e alta concordância entre previsões e observações. A análise por classe mostrou alta sensibilidade e especificidade, especialmente para as espécies setosa e virginica, com menor desempenho na classificação de versicolor.
Este relatório apresentou conceitos fundamentais de Machine Learning, focando em regressão linear e árvores de decisão, e como implementá-los em R. O aprendizado de máquina permite extrair insights valiosos de dados brutos, resolvendo problemas complexos e melhorando a tomada de decisões. A regressão linear, amplamente utilizada por economistas e analistas, ajuda a prever tendências e fornecer suporte quantitativo para decisões de negócios. Por outro lado, as árvores de decisão oferecem uma maneira intuitiva de definir regras de negócio e classificar dados.