Pular para o conteúdo principal

tutorial: Analisar dados com glm

Saiba como realizar a regressão linear e logística usando um modelo linear generalizado (GLM) no Databricks. glm se encaixa em um modelo linear generalizado, semelhante ao glm() do R.

Sintaxe : glm(formula, data, family...)

Parâmetros :

  • formula: Descrição simbólica do modelo a ser ajustado, por exemplo: ResponseVariable ~ Predictor1 + Predictor2. Operadores compatíveis: ~, +, - e .
  • data: Qualquer SparkDataFrame
  • family: strings, "gaussian" para regressão linear ou "binomial" para regressão logística
  • lambda: Numérico, parâmetro de regularização
  • alpha: Parâmetro de mistura numérico de rede elástica

Saída : MLlib PipelineModel

Este site tutorial mostra como realizar a regressão linear e logística nos diamantes dataset.

Carregar os dados dos diamantes e dividi-los em conjuntos de treinamento e teste

R
require(SparkR)

# Read diamonds.csv dataset as SparkDataFrame
diamonds <- read.df("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv",
source = "com.databricks.spark.csv", header="true", inferSchema = "true")
diamonds <- withColumnRenamed(diamonds, "", "rowID")

# Split data into Training set and Test set
trainingData <- sample(diamonds, FALSE, 0.7)
testData <- except(diamonds, trainingData)

# Exclude rowIDs
trainingData <- trainingData[, -1]
testData <- testData[, -1]

print(count(diamonds))
print(count(trainingData))
print(count(testData))
R
head(trainingData)

Treine um modelo de regressão linear usando glm()

Esta seção mostra como prever o preço de um diamante a partir de seu recurso de treinamento por meio de um modelo de regressão linear usando os dados de treinamento.

Há uma mistura de recurso categórico (corte - Ideal, Premium, Very Good...) e recurso contínuo (profundidade, quilate). SparkR codifica automaticamente esses recursos para que o senhor não tenha que codificá-los manualmente.

R
# Family = "gaussian" to train a linear regression model
lrModel <- glm(price ~ ., data = trainingData, family = "gaussian")

# Print a summary of the trained model
summary(lrModel)

Use predict() nos dados de teste para ver se o modelo funciona bem em novos dados.

Sintaxe: predict(model, newData)

Parâmetros:

  • model: Modelo MLlib
  • newData: SparkDataFrame, normalmente seu conjunto de teste

Saída: SparkDataFrame

R
# Generate predictions using the trained model
predictions <- predict(lrModel, newData = testData)

# View predictions against mpg column
display(select(predictions, "price", "prediction"))

Avalie o modelo.

R
errors <- select(predictions, predictions$price, predictions$prediction, alias(predictions$price - predictions$prediction, "error"))
display(errors)

# Calculate RMSE
head(select(errors, alias(sqrt(sum(errors$error^2 , na.rm = TRUE) / nrow(errors)), "RMSE")))

Treine um modelo de regressão logística usando glm()

Esta seção mostra como criar uma regressão logística no mesmo site dataset para prever a lapidação de um diamante com base em alguns de seus recursos.

A regressão logística no MLlib oferece suporte à classificação binária. Para testar o algoritmo neste exemplo, subconjunto os dados para trabalhar com dois rótulos.

R
# Subset data to include rows where diamond cut = "Premium" or diamond cut = "Very Good"
trainingDataSub <- subset(trainingData, trainingData$cut %in% c("Premium", "Very Good"))
testDataSub <- subset(testData, testData$cut %in% c("Premium", "Very Good"))
R
# Family = "binomial" to train a logistic regression model
logrModel <- glm(cut ~ price + color + clarity + depth, data = trainingDataSub, family = "binomial")

# Print summary of the trained model
summary(logrModel)
R
# Generate predictions using the trained model
predictionsLogR <- predict(logrModel, newData = testDataSub)

# View predictions against label column
display(select(predictionsLogR, "label", "prediction"))

Avalie o modelo.

R
errorsLogR <- select(predictionsLogR, predictionsLogR$label, predictionsLogR$prediction, alias(abs(predictionsLogR$label - predictionsLogR$prediction), "error"))
display(errorsLogR)