Esercitazione: Analisi dei dati con glm
Informazioni su come eseguire la regressione lineare e logistica usando un modello lineare generalizzato (GLM) in Azure Databricks.
glm
adatta un modello lineare generalizzato, simile a quello di glm()
R.
Sintassi: glm(formula, data, family...)
Parameters:
-
formula
: Descrizione simbolica del modello da adattare, ad esempio :ResponseVariable ~ Predictor1 + Predictor2
. Operatori supportati:~
,+
-
, e.
-
data
: qualsiasi SparkDataFrame -
family
: stringa,"gaussian"
per la regressione lineare o"binomial"
per la regressione logistica -
lambda
: parametro numerico, regolarizzazione -
alpha
: parametro di combinazione numerico, Elastic-net
Output: MLlib PipelineModel
Questa esercitazione illustra come eseguire la regressione lineare e logistica nel set di dati di diamanti.
Caricare i dati di diamonds e suddividerli in set di training e di test
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)
Eseguire il training di un modello di regressione lineare usando glm()
Questa sezione illustra come stimare il prezzo di un diamante dalle relative funzionalità eseguendo il training di un modello di regressione lineare usando i dati di training.
C'è un mix di caratteristiche categoriche (taglio - Ideale, Premium, Molto Buono...) e caratteristiche continue (profondità, carato). SparkR codifica automaticamente queste funzionalità in modo che non sia necessario codificare manualmente queste funzionalità.
# Family = "gaussian" to train a linear regression model
lrModel <- glm(price ~ ., data = trainingData, family = "gaussian")
# Print a summary of the trained model
summary(lrModel)
Usare predict()
sui dati di test per verificare il funzionamento del modello sui nuovi dati.
Sintassi: predict(model, newData)
Parameters:
-
model
: modello MLlib -
newData
: SparkDataFrame, in genere il tuo test set
Output:SparkDataFrame
# Generate predictions using the trained model
predictions <- predict(lrModel, newData = testData)
# View predictions against mpg column
display(select(predictions, "price", "prediction"))
Valutare il modello.
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")))
Eseguire il training di un modello di regressione logistica usando glm()
Questa sezione illustra come creare una regressione logistica sullo stesso set di dati per stimare il taglio di un diamante in base ad alcune delle sue funzionalità.
La regressione logistica in MLlib supporta la classificazione binaria. Per testare l'algoritmo in questo esempio, subset i dati da usare con due etichette.
# 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"))
Valutare il modello.
errorsLogR <- select(predictionsLogR, predictionsLogR$label, predictionsLogR$prediction, alias(abs(predictionsLogR$label - predictionsLogR$prediction), "error"))
display(errorsLogR)