다음을 통해 공유


자습서: 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)