教學課程:使用 glm 分析資料
瞭解如何在 Azure Databricks 中使用一般化線性模型 (GLM) 來執行線性和羅吉斯回歸。
glm
符合一般化線性模型,類似於 R 的 glm()
。
語法:glm(formula, data, family...)
Parameters:
-
formula
:要安裝的模型符號描述,例如:ResponseVariable ~ Predictor1 + Predictor2
。 支援的運算子:~
、+
、-
、 和.
-
data
:任何SparkDataFrame -
family
:字串、"gaussian"
線性回歸或"binomial"
羅吉斯回歸 -
lambda
:數值、正規化參數 -
alpha
:Numeric、Elastic-net mixing 參數
輸出:MLlib PipelineModel
本教學課程示範如何在鑽石數據集上執行線性和羅吉斯回歸。
載入鑽石數據並分割成定型和測試集
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)
使用將線性回歸模型定型 glm()
本節說明如何使用定型數據來定型線性回歸模型,以從其特徵預測菱形的價格。
類別特徵混合(切 - 理想,進階,非常好...)和連續特徵(深度,克拉)。 SparkR 會自動編碼這些功能,因此您不需要手動編碼這些功能。
# Family = "gaussian" to train a linear regression model
lrModel <- glm(price ~ ., data = trainingData, family = "gaussian")
# Print a summary of the trained model
summary(lrModel)
在 predict()
測試數據上使用 以查看模型對新數據的運作方式。
語法:predict(model, newData)
Parameters:
-
model
:MLlib 模型 -
newData
:SparkDataFrame,通常是您的測試 set
輸出:SparkDataFrame
# Generate predictions using the trained model
predictions <- predict(lrModel, newData = testData)
# View predictions against mpg column
display(select(predictions, "price", "prediction"))
評估模型。
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")))
使用 將羅吉斯回歸模型定型 glm()
本節說明如何在相同的數據集上建立羅吉斯回歸,以根據鑽石的一些特徵來預測鑽石的切口。
MLlib 中的羅吉斯回歸支援二元分類。 若要測試此範例中的演算法,請子集使用兩個卷標的資料。
# 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"))
評估模型。
errorsLogR <- select(predictionsLogR, predictionsLogR$label, predictionsLogR$prediction, alias(abs(predictionsLogR$label - predictionsLogR$prediction), "error"))
display(errorsLogR)