Megosztás a következőn keresztül:


Oktatóanyag: Adatok elemzése a glm használatával

Megtudhatja, hogyan hajthat végre lineáris és logisztikai regressziót általánosított lineáris modell (GLM) használatával az Azure Databricksben. glm az R-hez hasonló általánosított lineáris modellhez illeszkedik glm().

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

Paraméterek:

  • formula: Szimbolikus leírás a modell kell illeszteni, például: ResponseVariable ~ Predictor1 + Predictor2. Támogatott operátorok: ~, +, -és .
  • data: Bármely SparkDataFrame
  • family: Sztring, "gaussian" lineáris regresszióhoz vagy "binomial" logisztikai regresszióhoz
  • lambda: Numerikus, Regularization paraméter
  • alpha: Numerikus, elastic-net keverőparaméter

Kimenet: MLlib PipelineModel

Ez az oktatóanyag bemutatja, hogyan hajthat végre lineáris és logisztikai regressziót a gyémánt adatkészleten.

Gyémántadatok betöltése és felosztása betanítási és tesztelési adatkészletekre

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)

Lineáris regressziós modell betanítása glm()

Ez a szakasz bemutatja, hogyan jelezhető előre egy gyémánt ára a jellemzőiből egy lineáris regressziós modell betanításával a betanítási adatok használatával.

A kategorikus jellemzők (cut - Ideal, Premium, Very Good...) és a folyamatos funkciók (mélység, karát) keveréke van. A SparkR automatikusan kódolja ezeket a funkciókat, így nem kell manuálisan kódolnia ezeket a funkciókat.

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

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

A predict() tesztadatok alapján megtudhatja, hogy a modell milyen jól működik az új adatokon.

Szintaxis: predict(model, newData)

Paraméterek:

  • model: MLlib-modell
  • newData: SparkDataFrame, általában a tesztkészlet

Hozam: SparkDataFrame

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

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

Értékelje ki a modellt.

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

Logisztikai regressziós modell betanítása glm()

Ez a szakasz bemutatja, hogyan hozhat létre logisztikai regressziót ugyanazon az adatkészleten a gyémánt vágásának előrejelzéséhez néhány funkció alapján.

Az MLlib logisztikai regressziója támogatja a bináris besorolást. Az algoritmus ebben a példában való teszteléséhez az adatokat két címkével kell ellátni.

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

Értékelje ki a modellt.

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