자습서: glm을 사용하여 데이터 분석
Azure Databricks에서 일반화된 선형 모델(GLM)을 사용하여 선형 및 로지스틱 회귀를 수행하는 방법을 알아봅니다. glm
는 R glm()
과 유사한 일반화된 선형 모델에 적합합니다.
구문: glm(formula, data, family...)
매개 변수:
formula
: 맞출 모델에 대한 기호화된 설명입니다(예:ResponseVariable ~ Predictor1 + Predictor2
). 지원되는 연산자:~
,+
,-
,.
data
: 임의 SparkDataFrame입니다.family
: 문자열,"gaussian"
(선형 회귀의 경우) 또는"binomial"
(로지스틱 회귀의 경우)입니다.lambda
: 숫자 정규화 매개 변수입니다.alpha
: 숫자 Elastic-net 혼합 매개 변수입니다.
출력: 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)
매개 변수:
model
: MLlib 모델입니다.newData
: SparkDataFrame(일반적으로 테스트 집합)입니다.
출력: 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)