チュートリアル: Azure Machine Learning の自動機械学習で分類モデルをトレーニングするTutorial: Train a classification model with automated machine learning in Azure Machine Learning

このチュートリアルでは、自動機械学習 (自動 ML) を使用して機械学習モデルを生成する方法を学習します。In this tutorial, you'll learn how to generate a machine learning model using automated machine learning (automated ML). Azure Machine Learning では、データの事前処理、アルゴリズムの選択、ハイパーパラメーターの選択をユーザーに代わって自動的に実行できます。Azure Machine Learning can perform data preprocessing, algorithm selection and hyperparameter selection in an automated way for you. その後、「Deploy a model」 (モデルをデプロイする) のチュートリアルのワークフローに従って最終的なモデルをデプロイできます。The final model can then be deployed following the workflow in the Deploy a model tutorial.

フロー図 flow diagram

モデルのトレーニングに関するチュートリアルと同様に、このチュートリアルでは MNIST データセットから、手書きの数字 (0 - 9) 画像を分類します。Similar to the train models tutorial, this tutorial classifies handwritten images of digits (0-9) from the MNIST dataset. ただし、今回はアルゴリズムを指定したり、ハイパーパラメーターを調整しません。But this time you don't to specify an algorithm or tune hyperparameters. 自動 ML テクニックでは、アルゴリズムとハイパーパラメーターの多数の組み合わせをイテレーションして、条件上最適なモデルを探します。The automated ML technique iterates over many combinations of algorithms and hyperparameters until it finds the best model based on your criterion.

学習内容は次のとおりです。You'll learn how to:

  • 開発環境を設定するSet up your development environment
  • データにアクセスして検査するAccess and examine the data
  • ローカル コンピューター上の自動分類子を使用してトレーニングするTrain using an automated classifier on your local computer
  • 結果を検索するExplore the results
  • トレーニング結果を確認するReview training results
  • 最高のモデルを登録するRegister the best model

Azure サブスクリプションがない場合は、開始する前に無料アカウントを作成してください。If you don’t have an Azure subscription, create a free account before you begin.

ノートブックを入手するGet the notebook

便利なように、このチュートリアルは Jupyter Notebook として提供されています。For your convenience, this tutorial is available as a Jupyter notebook. tutorials/03.auto-train-models.ipynb ノートブックを実行するには、以下のいずれかの方式を使用します。Use either of these methods to run the tutorials/03.auto-train-models.ipynb notebook:

Azure Notebooks - Azure クラウドでの無料の Jupyter ベースのノートブックAzure Notebooks - Free Jupyter based notebooks in the Azure cloud

Azure Notebooks には SDK が既にインストールされて構成されています。The SDK is already installed and configured for you on Azure Notebooks.

  1. ワークスペースを作成して Azure Notebooks を開始するには、使用開始クイック スタートを行ってください。Complete the getting started quickstart to create a workspace and launch Azure Notebooks.
  2. Azure Notebooks に移動するGo to Azure Notebooks
  3. クイック スタートで作成した Getting Started ライブラリで、tutorials フォルダーに移動しますIn the Getting Started Library you created during the quickstart, go to the tutorials folder
  4. ノートブックを開きます。Open the notebook.

自分の Jupyter Notebook サーバーYour own Jupyter notebook server

  1. SDK をインストールしてワークスペースを作成するには、Python SDK での作業開始クイック スタートを行います。Complete the getting started with Python SDK quickstart to install the SDK and create a workspace.
  2. GitHub リポジトリを複製します。Clone the GitHub repository.
  3. クイック スタートの間に作成した aml_config ディレクトリを、複製したディレクトリにコピーします。Copy the aml_config directory you created during the quickstart into your cloned directory.
  4. 複製したディレクトリから、Notebook サーバーを起動します。Start the notebook server from your cloned directory.
  5. tutorials フォルダーに移動します。Go to the tutorials folder.
  6. ノートブックを開きます。Open the notebook.

開発環境を設定するSet up your development environment

Python Notebook では、開発作業のすべての設定を行うことができます。All the setup for your development work can be accomplished in the Python notebook. 設定には次のものが含まれます。Setup includes:

  • Python パッケージをインポートするImport Python packages
  • ワークスペースを構成して、ローカル コンピューターとリモート リソースの間で通信できるようにするConfigure a workspace to enable communication between your local computer and remote resources
  • トレーニング スクリプトを格納するディレクトリを作成するCreate a directory to store training scripts

パッケージのインポートImport packages

このチュートリアルで必要な Python パッケージをインポートします。Import Python packages you need in this tutorial.

import azureml.core
import pandas as pd
from azureml.core.workspace import Workspace
from azureml.train.automl.run import AutoMLRun
import time
import logging
from sklearn import datasets
from matplotlib import pyplot as plt
from matplotlib.pyplot import imshow
import random
import numpy as np

ワークスペースの構成Configure workspace

既存のワークスペースからワークスペース オブジェクトを作成します。Create a workspace object from the existing workspace. Workspace.from_config() は、aml_config/config.json ファイルを読み取り、詳細情報を ws という名前のオブジェクトに読み込みます。Workspace.from_config() reads the file aml_config/config.json and loads the details into an object named ws. ws は、このチュートリアルの残りのコード全体で使用されています。ws is used throughout the rest of the code in this tutorial.

ワークスペース オブジェクトを作成したら、実験用に名前を指定し、ワークスペースを使用してローカル ディレクトリを作成および登録します。Once you have a workspace object, specify a name for the experiment and create and register a local directory with the workspace. すべての実行履歴は、指定した実験の下に記録されます。The history of all runs is recorded under the specified experiment.

ws = Workspace.from_config()
# project folder to save your local files
project_folder = './sample_projects/automl-local-classification'
# choose a name for the run history container in the workspace
experiment_name = 'automl-classifier'

import os

output = {}
output['SDK version'] = azureml.core.VERSION
output['Subscription ID'] = ws.subscription_id
output['Workspace'] = ws.name
output['Resource Group'] = ws.resource_group
output['Location'] = ws.location
output['Project Directory'] = project_folder
pd.set_option('display.max_colwidth', -1)
pd.DataFrame(data=output, index=['']).T

データを調査するExplore data

最初のトレーニング チュートリアルでは、MNIST データセット (28 x 28 ピクセル) の高解像度バージョンを使用していました。The initial training tutorial used a high-resolution version of the MNIST dataset (28x28 pixels). 自動 ML トレーニングでは、何度もイテレーションを実行する必要があるので、このチュートリアルでは、各イテレーションの時間も短縮する、より小さい解像度の画像のバージョン (8 x 8 ピクセル) を使用しています。Since automated ML training requires many iterations, this tutorial uses a smaller resolution version of the images (8x8 pixels) to demonstrate the concepts while speeding up the time needed for each iteration.

from sklearn import datasets

digits = datasets.load_digits()

# only take the first 100 rows if you want the training steps to run faster
X_digits = digits.data[:100,:]
y_digits = digits.target[:100]

# use full dataset
#X_digits = digits.data
#y_digits = digits.target

複数のサンプル イメージの表示Display some sample images

データを numpy 配列に読み込みます。Load the data into numpy arrays. それから matplotlib を使用して、ラベルがあるデータセットから 30 個のランダムなイメージをプロットします。Then use matplotlib to plot 30 random images from the dataset with their labels above them.

count = 0
sample_size = 30
plt.figure(figsize = (16, 6))
for i in np.random.permutation(X_digits.shape[0])[:sample_size]:
    count = count + 1
    plt.subplot(1, sample_size, count)
    plt.axhline('')
    plt.axvline('')
    plt.text(x = 2, y = -2, s = y_digits[i], fontsize = 18)
    plt.imshow(X_digits[i].reshape(8, 8), cmap = plt.cm.Greys)
plt.show()

ランダムなイメージのサンプルは、以下のように表示されます。A random sample of images displays:

数値

これでご自分のモデルを自動的にトレーニングするのに必要なパッケージとデータが揃いました。You now have the necessary packages and data ready for auto training for your model.

モデルをトレーニングするTrain a model

モデルを自動的にトレーニングするには、実験用の構成設定をまず定義し、実験を実行します。To automatically train a model, first define configuration settings for the experiment and then run the experiment.

設定を定義するDefine settings

実験の設定とモデルの設定を定義します。Define the experiment settings and model settings.

プロパティProperty このチュートリアルの値Value in this tutorial 説明Description
primary_metricprimary_metric AUC WeightedAUC Weighted 最適化したいメトリック。Metric that you want to optimize.
max_time_secmax_time_sec 12,00012,000 各イテレーションの秒単位での時間制限Time limit in seconds for each iteration
iterationsiterations 2020 イテレーションの回数。Number of iterations. 各イテレーションでは、特定のパイプラインを使用してモデルがデータをトレーニングします。In each iteration, the model trains with the data with a specific pipeline
n_cross_validationsn_cross_validations 33 クロス検証の分割の回数。Number of cross validation splits
preprocesspreprocess FalseFalse True または False 実験が入力に対して前処理を実行できるようにします。True/False Enables experiment to perform preprocessing on the input. 前処理では不足しているデータを処理し、いくつかの一般的な機能抽出を行います。Preprocessing handles missing data, and performs some common feature extraction
exit_scoreexit_score 0.9950.995 primary_metric のターゲットを示す double 値。double value indicating the target for primary_metric. ターゲットを超過すると、実行は終了します。Once the target is surpassed the run terminates
blacklist_algosblacklist_algos ['kNN','LinearSVM']['kNN','LinearSVM'] 無視するアルゴリズムを示す、文字列配列Array of strings indicating algorithms to ignore.
from azureml.train.automl import AutoMLConfig

##Local compute 
Automl_config = AutoMLConfig(task = 'classification',
                             primary_metric = 'AUC_weighted',
                             max_time_sec = 12000,
                             iterations = 20,
                             n_cross_validations = 3,
                             preprocess = False,
                             exit_score = 0.995,
                             blacklist_algos = ['kNN','LinearSVM'],
                             X = X_digits,
                             y = y_digits,
                             path=project_folder)

実験を実行するRun the experiment

ローカルで実験の実行を開始します。Start the experiment to run locally. コンピューティングのターゲットをローカルとして定義し、実験の進捗を確認するために、出力を true に設定します。Define the compute target as local and set the output to true to view progress on the experiment.

from azureml.core.experiment import Experiment
experiment=Experiment(ws, experiment_name)
local_run = experiment.submit(Automl_config, show_output=True)

各イテレーションの進行のたびに、次のような出力が一度に 1 行ずつ表示されます。Output such as the following appears one line at a time as each iteration progresses. 新しい行は 10 - 15 秒ごとに表示されます。You will see a new line every 10-15 seconds.

Running locally
Parent Run ID: AutoML_ca0c807b-b7bf-4809-a963-61c6feb73ea1
***********************************************************************************************
ITERATION: The iteration being evaluated.
PIPELINE:  A summary description of the pipeline being evaluated.
DURATION: Time taken for the current iteration.
METRIC: The result of computing score on the fitted pipeline.
BEST: The best observed score thus far.
***********************************************************************************************

 ITERATION     PIPELINE                               DURATION                METRIC      BEST
         0      Normalizer extra trees                0:00:15.955367           0.988     0.988
         1      Normalizer extra trees                0:00:14.203088           0.952     0.988
         2      Normalizer lgbm_classifier            0:00:15.089057           0.994     0.994
         3      Normalizer SGD classifier             0:00:14.866700           0.500     0.994
         4      Normalizer SGD classifier             0:00:13.740577           0.983     0.994
         5      Normalizer DT                         0:00:13.879204           0.937     0.994
         6      Normalizer SGD classifier             0:00:13.379975           0.980     0.994
         7      Normalizer lgbm_classifier            0:00:15.953293           0.997     0.997
Stopping criteria reached. Ending experiment.

結果を検索するExplore the results

Jupyter ウィジェットを使用するか、実験の履歴を検証して、実験の結果を検索します。Explore the results of experiment with a Jupyter widget or by examining the experiment history.

Jupyter ウィジェットJupyter widget

Jupyter Notebook ウィジェットを使用し、すべての結果のグラフおよびテーブルを参照します。Use the Jupyter notebook widget to see a graph and a table of all results.

from azureml.train.widgets import RunDetails
RunDetails(local_run).show()

ウィジェットの静的画像を次に示します。Here is a static image of the widget. このノートブックでは、グラフの上のドロップダウンを使用して、各イテレーションで使用できる各メトリックのグラフを表示することもできます。In the notebook, you can use the dropdown above the graph to view a graph of each available metric for each iteration.

ウィジェットの表 ウィジェットのプロットwidget table widget plot

すべてのイテレーションを取得するRetrieve all iterations

実験履歴を参照し、実行された各イテレーションの個々のメトリックを確認します。View the experiment history and see individual metrics for each iteration run.

children = list(local_run.get_children())
metricslist = {}
for run in children:
    properties = run.get_properties()
    metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}
    metricslist[int(properties['iteration'])] = metrics

import pandas as pd
rundata = pd.DataFrame(metricslist).sort_index(1)
rundata

結果は次の表のとおりです。This table shows the results:

00 11 22 33 44 55 66 77
AUC_macroAUC_macro 0.9880940.988094 0.9519810.951981 0.9936060.993606 0.50.5 0.9827240.982724 0.9369980.936998 0.9799780.979978 0.9966390.996639
AUC_microAUC_micro 0.9881040.988104 0.9484020.948402 0.994130.99413 0.4630350.463035 0.9760780.976078 0.9451690.945169 0.9689130.968913 0.9970270.997027
AUC_weightedAUC_weighted 0.9879430.987943 0.9522550.952255 0.9935130.993513 0.50.5 0.9828010.982801 0.9372920.937292 0.9799730.979973 0.996560.99656
AUC_weighted_maxAUC_weighted_max 0.9879430.987943 0.9879430.987943 0.9935130.993513 0.9935130.993513 0.9935130.993513 0.9935130.993513 0.9935130.993513 0.996560.99656
accuracyaccuracy 0.8520930.852093 0.6664640.666464 0.8980570.898057 0.07012840.0701284 0.8326620.832662 0.7018270.701827 0.833250.83325 0.9257520.925752
average_precision_score_macroaverage_precision_score_macro 0.9291670.929167 0.7862580.786258 0.9614970.961497 0.10.1 0.9174860.917486 0.6855470.685547 0.9066110.906611 0.9777750.977775
average_precision_score_microaverage_precision_score_micro 0.9325960.932596 0.7283310.728331 0.9641380.964138 0.09090310.0909031 0.8801360.880136 0.7575380.757538 0.8598130.859813 0.9804080.980408
average_precision_score_weightedaverage_precision_score_weighted 0.9306810.930681 0.7889640.788964 0.9620070.962007 0.1021230.102123 0.9187850.918785 0.6920410.692041 0.9082930.908293 0.9776990.977699
balanced_accuracybalanced_accuracy 0.9179020.917902 0.8145090.814509 0.944910.94491 0.50.5 0.9092480.909248 0.8334280.833428 0.9074120.907412 0.9593510.959351
f1_score_macrof1_score_macro 0.8505110.850511 0.6431160.643116 0.8992620.899262 0.0130920.013092 0.8250540.825054 0.6917120.691712 0.8196270.819627 0.9260810.926081
f1_score_microf1_score_micro 0.8520930.852093 0.6664640.666464 0.8980570.898057 0.07012840.0701284 0.8326620.832662 0.7018270.701827 0.833250.83325 0.9257520.925752
f1_score_weightedf1_score_weighted 0.8521340.852134 0.6460490.646049 0.8987050.898705 0.009336910.00933691 0.8307310.830731 0.6965380.696538 0.8245470.824547 0.9257780.925778
log_losslog_loss 0.5543640.554364 1.157281.15728 0.517410.51741 2.303972.30397 1.940091.94009 1.576631.57663 2.18482.1848 0.2507250.250725
norm_macro_recallnorm_macro_recall 0.8358150.835815 0.6290030.629003 0.8901670.890167 00 0.8187550.818755 0.6666290.666629 0.8147390.814739 0.9188510.918851
precision_score_macroprecision_score_macro 0.8558920.855892 0.7077150.707715 0.901950.90195 0.007012840.00701284 0.848820.84882 0.7296110.729611 0.8553840.855384 0.9278810.927881
precision_score_microprecision_score_micro 0.8520930.852093 0.6664640.666464 0.8980570.898057 0.07012840.0701284 0.8326620.832662 0.7018270.701827 0.833250.83325 0.9257520.925752
precision_score_weightedprecision_score_weighted 0.8592040.859204 0.7119180.711918 0.9035230.903523 0.005006760.00500676 0.8612090.861209 0.7375860.737586 0.8635240.863524 0.9284030.928403
recall_score_macrorecall_score_macro 0.8522340.852234 0.6661020.666102 0.9011510.901151 0.10.1 0.836880.83688 0.6999660.699966 0.8332650.833265 0.9269660.926966
recall_score_microrecall_score_micro 0.8520930.852093 0.6664640.666464 0.8980570.898057 0.07012840.0701284 0.8326620.832662 0.7018270.701827 0.833250.83325 0.9257520.925752
recall_score_weightedrecall_score_weighted 0.8520930.852093 0.6664640.666464 0.8980570.898057 0.07012840.0701284 0.8326620.832662 0.7018270.701827 0.833250.83325 0.9257520.925752
weighted_accuracyweighted_accuracy 0.8510540.851054 0.666390.66639 0.8954280.895428 0.0491210.049121 0.8292470.829247 0.7027540.702754 0.8334640.833464 0.9247230.924723

最高のモデルを登録するRegister the best model

local_run オブジェクトを使用すると、最高のモデルを取得し、それをワークスペースに登録することができます。Use the local_run object to get the best model and register it into the workspace.

# find the run with the highest accuracy value.
best_run, fitted_model = local_run.get_output()

# register model in workspace
description = 'Automated Machine Learning Model'
tags = None
local_run.register_model(description=description, tags=tags)
local_run.model_id # Use this id to deploy the model as a web service in Azure

最高のモデルをテストするTest the best model

モデルを使用して、いくつかのランダムな数値を予測できます。Use the model to predict a few random digits. 予測される値とイメージを表示します。Display the predicted value and the image. 赤い文字と白抜きの画像 (黒地に白) は、不適切な分類のサンプルの強調表示に使用されています。Red font and inverse image (white on black) is used to highlight the misclassified samples.

モデルの精度は高いので、必要に応じて、不適切な分類のサンプルが表示されるまで次のコードを何度か実行します。Since the model accuracy is high, you might have to run the following code a few times before you can see a misclassified sample.

# find 30 random samples from test set
n = 30
sample_indices = np.random.permutation(X_digits.shape[0])[0:n]
test_samples = X_digits[sample_indices]


# predict using the  model
result = fitted_model.predict(test_samples)

# compare actual value vs. the predicted values:
i = 0
plt.figure(figsize = (20, 1))

for s in sample_indices:
    plt.subplot(1, n, i + 1)
    plt.axhline('')
    plt.axvline('')

    # use different color for misclassified sample
    font_color = 'red' if y_digits[s] != result[i] else 'black'
    clr_map = plt.cm.gray if y_digits[s] != result[i] else plt.cm.Greys

    plt.text(x = 2, y = -2, s = result[i], fontsize = 18, color = font_color)
    plt.imshow(X_digits[s].reshape(8, 8), cmap = clr_map)

    i = i + 1
plt.show()

results

リソースのクリーンアップClean up resources

重要

作成したリソースは、Azure Machine Learning サービスに関連したその他のチュートリアルおよびハウツー記事の前提条件として使用できます。The resources you created can be used as prerequisites to other Azure Machine Learning service tutorials and how-to articles.

このクイック スタートで作成したリソースを今後使う予定がない場合は、課金が発生しないよう削除してください。If you're not going to use what you've created here, delete the resources you just created with this quickstart so you don't incur any charges.

  1. Azure Portal で、左端にある [リソース グループ] を選択します。In the Azure portal, select Resource groups on the far left.

    Azure Portal での削除

  2. 作成したリソース グループを一覧から選択します。From the list, select the resource group you created.

  3. [リソース グループの削除] を選択します。Select Delete resource group.

  4. リソース グループの名前を入力し、[削除] を選択します。Type the resource group name and then select Delete.

    "入れ子になっているリソースを削除する前にリソースを削除することはできません" というエラーが発生した場合は、入れ子になったリソースを先に削除しておいてください。If you get the error "Can not delete resource before nested resources are deleted", you must delete any nested resources first. 詳細については、こちらのトラブルシューティング セクションを参照してください。Refer to this troubleshooting section for details.

次の手順Next steps

この Azure Machine Learning のチュートリアルでは、Python を使用して次の作業を行いました。In this Azure Machine Learning tutorial, you used Python to:

  • 開発環境を設定するSet up your development environment
  • データにアクセスして検査するAccess and examine the data
  • カスタム パラメーターを使用してローカルで自動化された分類子を使用してトレーニングするTrain using an automated classifier locally with custom parameters
  • 結果を検索するExplore the results
  • トレーニング結果を確認するReview training results
  • 最高のモデルを登録するRegister the best model

自動トレーニング用の設定を構成する方法またはリモートのリソースで自動トレーニングを使用する方法に関する記事を参照してください。Learn more about how to configure settings for automatic training or how to use automatic training on a remote resource.