Självstudie: Analysera data med glm
Lär dig utföra linjär och logistisk regression med en generaliserad linjär modell (GLM) i Azure Databricks.
glm
passar en generaliserad linjär modell, som liknar R:s glm()
.
Syntax: glm(formula, data, family...)
Parameters:
-
formula
: Symbolisk beskrivning av modellen som ska monteras, till exempel:ResponseVariable ~ Predictor1 + Predictor2
. Operatorer som stöds:~
,+
,-
och.
-
data
: Alla SparkDataFrame -
family
: Sträng,"gaussian"
för linjär regression eller"binomial"
för logistisk regression -
lambda
: Numerisk, regulariseringsparameter -
alpha
: Numerisk blandningsparameter för elastic-net
Utdata: MLlib PipelineModel
Den här självstudien visar hur du utför linjär och logistisk regression på datauppsättningen diamanter.
Läsa in diamantdata och dela in dem i tränings- och testuppsättningar
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)
Träna en linjär regressionsmodell med hjälp av glm()
Det här avsnittet visar hur du förutsäger en diamants pris från dess funktioner genom att träna en linjär regressionsmodell med hjälp av träningsdata.
Det finns en blandning av kategoriska funktioner (klipp - Ideal, Premium, Mycket bra ...) och kontinuerliga funktioner (djup, karat). SparkR kodar automatiskt dessa funktioner så att du inte behöver koda dessa funktioner manuellt.
# Family = "gaussian" to train a linear regression model
lrModel <- glm(price ~ ., data = trainingData, family = "gaussian")
# Print a summary of the trained model
summary(lrModel)
Använd predict()
på testdata för att se hur bra modellen fungerar på nya data.
Syntax:predict(model, newData)
Parameters:
-
model
: MLlib-modell -
newData
: SparkDataFrame, vanligtvis din test set
Utdata:SparkDataFrame
# Generate predictions using the trained model
predictions <- predict(lrModel, newData = testData)
# View predictions against mpg column
display(select(predictions, "price", "prediction"))
Utvärdera modellen.
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")))
Träna en logistisk regressionsmodell med hjälp av glm()
Det här avsnittet visar hur du skapar en logistisk regression på samma datauppsättning för att förutsäga en diamants klippning baserat på några av dess funktioner.
Logistisk regression i MLlib stöder binär klassificering. Om du vill testa algoritmen i det här exemplet kan du delmängden data för att arbeta med två etiketter.
# 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"))
Utvärdera modellen.
errorsLogR <- select(predictionsLogR, predictionsLogR$label, predictionsLogR$prediction, alias(abs(predictionsLogR$label - predictionsLogR$prediction), "error"))
display(errorsLogR)