Compartilhar via


Tutorial: como analisar dados com glm

Saiba como executar a regressão linear e logística usando um modelo linear generalizado (GLM) em Azure Databricks. glm ajusta-se a um Modelo Linear Generalizado, semelhante ao R’s glm().

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

Parâmetros:

  • formula: Descrição simbólica do modelo a ser ajustado, por exemplo: ResponseVariable ~ Predictor1 + Predictor2. Operadores com suporte: ~, +, - e .
  • data: qualquer SparkDataFrame
  • family: cadeia de caracteres, "gaussian" para regressão linear ou "binomial" para regressão logística
  • lambda: parâmetro numérico, regularização
  • alpha: parâmetro numérico, mixagem elástico-líquido

Saída: MLlib PipelineModel

Este tutorial mostra como executar a regressão linear e logística no conjunto de linhas de ouros.

Carregar dados de diamantes e dividir em conjuntos de treinamento e teste

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))
head(trainingData)

Treinar um modelo de regressão linear usando glm().

Esta seção mostra como prever o preço de um losango de seus recursos treinando um modelo de regressão linear usando os dados de treinamento.

Há uma mistura de recursos categóricos (corte - Ideal, Premium, Muito bom...) e recursos contínuos (profundidade, carat). O SparkR codifica automaticamente esses recursos para que você não precise codificar esses recursos manualmente.

# 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 quão bem o modelo funciona em novos dados.

Sintaxe:predict(model, newData)

Parâmetros:

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

Saída:SparkDataFrame

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

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

Avalie o modelo.

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")))

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

Esta seção mostra como criar uma regressão logística no mesmo conjunto de mesmos para prever um corte de losango com base em alguns de seus recursos.

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

# 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"))
# 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)
# Generate predictions using the trained model
predictionsLogR <- predict(logrModel, newData = testDataSub)

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

Avalie o modelo.

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