機械学習Machine Learning

組織では、ユーザーに重点を置いたさまざまなデータ製品やサービスを作成するため、個人情報、推奨事項、予測分析情報の開発に使用できる、機械学習のニーズが高まっています。As organizations create more diverse and more user-focused data products and services, there is a growing need for machine learning, which can be used to develop personalizations, recommendations, and predictive insights. Apache Spark machine learning ライブラリ (MLlib) を使用すると、データ科学者は、分散データ (インフラストラクチャ、構成など) を囲む複雑さを解決するのではなく、データの問題とモデルに焦点を当てることができます。The Apache Spark machine learning library (MLlib) allows data scientists to focus on their data problems and models instead of solving the complexities surrounding distributed data (such as infrastructure, configurations, and so on).

このチュートリアルモジュールでは、次の方法を学習します。In this tutorial module, you will learn how to:

また、モジュールに含まれているすべてのコード例にアクセスして実行するためにインポートできるサンプルノートブックも用意されています。We also provide a sample notebook that you can import to access and run all of the code examples included in the module.

サンプルデータの読み込み Load sample data

Machine learning の使用を開始する最も簡単な方法は、Azure Databricks ワークスペース内でアクセスできる /databricks-datasets フォルダーで使用できるデータセット Azure Databricks 例を使用することです。The easiest way to start working with machine learning is to use an example Azure Databricks dataset available in the /databricks-datasets folder accessible within the Azure Databricks workspace. たとえば、都市人口と自宅の売上価格の中央値を比較するファイルにアクセスするには、/databricks-datasets/samples/population-vs-price/data_geo.csv ファイルにアクセスします。For example, to access the file that compares city population to median sale prices of homes, you can access the file /databricks-datasets/samples/population-vs-price/data_geo.csv.

# Use the Spark CSV datasource with options specifying:
# - First line of file is a header
# - Automatically infer the schema of the data
data = spark.read.csv("/databricks-datasets/samples/population-vs-price/data_geo.csv", header="true", inferSchema="true")
data.cache() # Cache data for faster reuse

このデータを表形式で表示するには、このデータをサードパーティのツールにエクスポートするのではなく、Databricks notebook で [display()] コマンドを使用します。To view this data in a tabular format, instead of exporting this data to a third-party tool, you can use the display() command in your Databricks notebook.

display(data)

no-代替テキスト no-alternative-text

ML アルゴリズム用のデータの準備と視覚化 Prepare and visualize data for ML algorithms

"監視学習" (回帰アルゴリズムなど) では、通常、ラベルと一連の機能を定義します。In supervised learning—-such as a regression algorithm—-you typically define a label and a set of features. この線形回帰の例では、ラベルは2015の中央売上高で、特徴は2014母集団見積もりです。In this linear regression example, the label is the 2015 median sales price and the feature is the 2014 population estimate. つまり、特徴 (母集団) を使用してラベル (販売価格) を予測します。That is, you use the feature (population) to predict the label (sales price).

欠損値を含む行を削除し、特徴列とラベル列の名前を変更して、スペースを _ に置き換えます。Drop rows with missing values and rename the feature and label columns, replacing spaces with _.

from pyspark.sql.functions import col

data = data.dropna() # drop rows with missing values
exprs = [col(column).alias(column.replace(' ', '_')) for column in data.columns]

[母集団] 機能列を選択してベクター化します。Select and vectorize the population feature column:

from pyspark.ml import Pipeline
from pyspark.ml.feature import VectorAssembler

vdata = data.select(*exprs).selectExpr("2014_Population_estimate as population", "2015_median_sales_price as label")

stages = []
assembler = VectorAssembler(inputCols=["population"], outputCol="features")
stages += [assembler]
pipeline = Pipeline(stages=stages)
pipelineModel = pipeline.fit(vdata)
dataset = pipelineModel.transform(vdata)
# Keep relevant columns
selectedcols = ["features", "label"]

選択した列を表示します。Display the selected columns:

display(dataset.select(selectedcols))

no-代替テキスト no-alternative-text

線形回帰モデルを実行する Run the linear regression model

このセクションでは、異なる正則化パラメーターを使用して2つの異なる線形回帰モデルを実行し、これら2つのモデルのどちらが母集団 (機能) に基づいて販売価格 (ラベル) を予測するかを判断します。This section runs two different linear regression models using different regularization parameters to determine how well either of these two models predict the sales price (label) based on the population (feature).

モデルを構築するBuild the model

# Import LinearRegression class
from pyspark.ml.regression import LinearRegression

# Define LinearRegression algorithm
lr = LinearRegression()

# Fit 2 models, using different regularization parameters
modelA = lr.fit(dataset, {lr.regParam:0.0})
modelB = lr.fit(dataset, {lr.regParam:100.0})

モデルを使用すると、transform() 関数を使用して予測を作成することもできます。これにより、予測の新しい列が追加されます。Using the model, you can also make predictions by using the transform() function, which adds a new column of predictions. たとえば、次のコードは最初のモデル (modelA) を取得し、特徴 (母集団) に基づいてラベル (元の販売価格) と予測 (予測された販売価格) の両方を表示します。For example, the code below takes the first model (modelA) and shows you both the label (original sales price) and prediction (predicted sales price) based on the features (population).

# Make predictions
predictionsA = modelA.transform(dataset)
display(predictionsA)

no-代替テキスト no-alternative-text

モデルを評価する Evaluate the model

回帰分析を評価するには、RegressionEvaluator を使用して平方根平均二乗誤差を計算します。To evaluate the regression analysis, calculate the root mean square error using the RegressionEvaluator. 2つのモデルとその出力を評価するための Python コードを次に示します。Here is the Python code for evaluating the two models and their output.

from pyspark.ml.evaluation import RegressionEvaluator
evaluator = RegressionEvaluator(metricName="rmse")
RMSE = evaluator.evaluate(predictionsA)
print("ModelA: Root Mean Squared Error = " + str(RMSE))
# ModelA: Root Mean Squared Error = 128.602026843

predictionsB = modelB.transform(dataset)
RMSE = evaluator.evaluate(predictionsB)
print("ModelB: Root Mean Squared Error = " + str(RMSE))
# ModelB: Root Mean Squared Error = 129.496300193

モデルを視覚 化する Visualize the model

多くの機械学習アルゴリズムでよく見られるように、散布図を視覚化する必要があります。As is typical for many machine learning algorithms, you want to visualize the scatterplot. Azure Databricks はパンダggplotをサポートしているため、次のコードでは、パンダデータフレーム (pydf) と ggplot を使用して線形回帰プロットを作成し、散布図と2つの回帰モデルを表示しています。Since Azure Databricks supports pandas and ggplot, the code below creates a linear regression plot using pandas DataFrame (pydf) and ggplot to display the scatterplot and the two regression models.

# Import numpy, pandas, and ggplot
import numpy as np
from pandas import *
from ggplot import *

# Create Python DataFrame
pop = dataset.rdd.map(lambda p: (p.features[0])).collect()
price = dataset.rdd.map(lambda p: (p.label)).collect()
predA = predictionsA.select("prediction").rdd.map(lambda r: r[0]).collect()
predB = predictionsB.select("prediction").rdd.map(lambda r: r[0]).collect()

# Create a pandas DataFrame
pydf = DataFrame({'pop':pop,'price':price,'predA':predA, 'predB':predB})
# Visualizing the Model
# Create scatter plot and two regression models (scaling exponential) using ggplot
p = ggplot(pydf, aes('pop','price')) + \
  geom_point(color='blue') + \
  geom_line(pydf, aes('pop','predA'), color='red') + \
  geom_line(pydf, aes('pop','predB'), color='green') + \
  scale_x_log10() + scale_y_log10()
display(p)

no-代替テキスト no-alternative-text

Notebook Notebook

これらのコード例のすべてにアクセスするには、人口と中央値の両方の価格 notebook をインポートします。To access all of these code examples, import the Population vs. Median Home Prices notebook. 機械学習の例については、「 Machine Learning」を参照してください。For more machine learning examples, see Machine Learning.

Machine learning notebook の Apache SparkApache Spark machine learning notebook

ノートブックを取得するGet notebook