メインコンテンツまでスキップ

チュートリアル: glm でデータを分析する

Databricks で一般化線形モデル (GLM) を使用して線形回帰とロジスティック回帰を実行する方法について説明します。 glm は、R の glm()と同様に、一般化線形モデルに適合します。

構文 : glm(formula, data, family...)

パラメーター :

  • formula: 装着するモデルの記号の説明、例:ResponseVariable ~ Predictor1 + Predictor2 サポートされている演算子:~+-、および .
  • data: 任意の SparkDataFrame
  • family: 文字列、線形回帰の場合は"gaussian"、ロジスティック回帰の場合は"binomial"
  • lambda: Numeric, Regularization パラメーター
  • alpha: Numeric, Elastic-net mixing パラメーター

出力 : MLlib パイプラインモデル

このチュートリアルでは、diamonds データセットで線形回帰とロジスティック回帰を実行する方法を示します。

ダイヤモンド データを読み込み、トレーニング セットとテスト セットに分割します

R
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))
R
head(trainingData)

を使用して線形回帰モデルを学習する glm()

このセクションでは、トレーニング データを使用して線形回帰モデルをトレーニングすることにより、ダイヤモンドの特徴からダイヤモンドの価格を予測する方法を示します。

カテゴリーの特徴(カット - 理想、プレミアム、非常に良いなど)と連続的な特徴(深さ、カラット)が混在しています。 SparkR はこれらの機能を自動的にエンコードするため、これらの機能を手動でエンコードする必要はありません。

R
# 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

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

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

モデルを評価してください。

R
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 のロジスティック回帰では、二項分類がサポートされています。 この例のアルゴリズムをテストするには、2 つのラベルで動作するようにデータをサブセット化します。

R
# 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"))
R
# 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)
R
# Generate predictions using the trained model
predictionsLogR <- predict(logrModel, newData = testDataSub)

# View predictions against label column
display(select(predictionsLogR, "label", "prediction"))

モデルを評価してください。

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