Руководство по Создание регрессионной модели с помощью автоматического машинного обученияTutorial: Use automated machine learning to build your regression model

Это руководство представляет собой вторую часть серии, состоящей из двух частей.This tutorial is part two of a two-part tutorial series. Из предыдущего руководства вы узнали, как подготовить данные о такси в Нью-Йорке для моделирования с применением регрессии.In the previous tutorial, you prepared the NYC taxi data for regression modeling.

Теперь все готово для создания модели с помощью службы "Машинное обучение Azure".Now you're ready to start building your model with Azure Machine Learning service. В этой части руководства вы примените подготовленные данные и автоматически создадите модель регрессии для прогнозирования тарифов на такси.In this part of the tutorial, you use the prepared data and automatically generate a regression model to predict taxi fare prices. С помощью автоматического машинного обучения, которое поддерживается службой, вы можете определить цели и ограничения машинного обучения.By using the automated machine learning capabilities of the service, you define your machine learning goals and constraints. Вы просто запускаете процесс автоматического машинного обучения.You launch the automated machine learning process. Затем дождитесь, пока для вас будет выбран алгоритм и настроены гиперпараметры.Then allow the algorithm selection and hyperparameter tuning to happen for you. Метод автоматического машинного обучения позволяет выполнить итерацию множества сочетаний алгоритмов и гиперпараметров, пока не будет найдена лучшая модель на основе выбранных критериев.The automated machine learning technique iterates over many combinations of algorithms and hyperparameters until it finds the best model based on your criterion.

Схема процесса

В этом руководстве вы выполнили следующие задачи.In this tutorial, you learn the following tasks:

  • Настройка среды Python и импорт пакетов SDK.Set up a Python environment and import the SDK packages.
  • Настройка рабочей области Службы машинного обучения Azure.Configure an Azure Machine Learning service workspace.
  • Автоматическое обучение модели регрессии.Autotrain a regression model.
  • Локальный запуск модели с пользовательскими параметрами.Run the model locally with custom parameters.
  • Изучение результатов.Explore the results.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.If you don’t have an Azure subscription, create a free account before you begin. Опробуйте бесплатную или платную версию Службы машинного обучения Azure.Try the free or paid version of Azure Machine Learning service today.

Примечание

Код в этой статье протестирован с помощью пакета SDK для Машинного обучения Azure версии 1.0.39.Code in this article was tested with Azure Machine Learning SDK version 1.0.39.

Предварительные требованияPrerequisites

Перейдите к разделу Настройка среды разработки, чтобы ознакомиться с шагами записной книжки, или используйте приведенные ниже инструкции, чтобы получить записную книжку и запустить ее в службе "Записные книжки Azure" или на собственном сервере записных книжек.Skip to Set up your development environment to read through the notebook steps, or use the instructions below to get the notebook and run it on Azure Notebooks or your own notebook server. Чтобы запустить записную книжку, вам потребуется:To run the notebook you will need:

  • Выполнение руководства по подготовке данных.Run the data preparation tutorial.
  • Сервер записных книжек Python 3.6, на котором установлены следующие компоненты:A Python 3.6 notebook server with the following installed:
    • пакет SDK для Машинного обучения Azure для Python с automl и notebooks;The Azure Machine Learning SDK for Python with automl and notebooks extras
    • matplotlib
  • Пример записной книжки.The tutorial notebook
  • Рабочая область машинного обучения.A machine learning workspace
  • Файл конфигурации для рабочей области в том же каталоге, что и записная книжка.The configuration file for the workspace in the same directory as the notebook

Получите все необходимые компоненты, перейдя к нужному из разделов, щелкнув соответствующую ссылку ниже.Get all these prerequisites from either of the sections below.

Использование облачного сервера записных книжек в рабочей областиUse a cloud notebook server in your workspace

С помощью облачного сервера записной книжки можно легко начать работу.It's easy to get started with your own cloud-based notebook server. Пакет SDK Машинного обучения Azure для Python будет установлен и настроен, как только вы создадите этот облачный ресурс.The Azure Machine Learning SDK for Python is already installed and configured for you once you create this cloud resource.

  • После запуска веб-страницы записной книжки запустите записную книжку tutorials/regression-part2-automated-ml.ipynb.After you launch the notebook webpage, run the tutorials/regression-part2-automated-ml.ipynb notebook.

Использование собственного сервера записных книжек JupyterUse your own Jupyter notebook server

Чтобы создать локальный сервер Jupyter Notebook на компьютере, выполните следующие действия.Use these steps to create a local Jupyter Notebook server on your computer. Убедитесь, что в вашей среде устанавливается matplotlib и дополнения automl и notebooks.Make sure that you install matplotlib and the automl and notebooks extras in your environment.

  1. Следуйте инструкциям по созданию рабочей области Службы машинного обучения Azure, чтобы выполнить следующее:Use the instructions at Create an Azure Machine Learning service workspace to do the following:

    • создать среду Miniconda;Create a Miniconda environment
    • установить пакет SDK для Машинного обучения Azure для Python.Install the Azure Machine Learning SDK for Python
    • Создание рабочей областиCreate a workspace
    • Запишите файл конфигурации рабочей области (aml_config/config.json).Write a workspace configuration file (aml_config/config.json).
  2. Клонируйте репозиторий GitHub.Clone the GitHub repository.

    git clone https://github.com/Azure/MachineLearningNotebooks.git
    
  3. Запустите сервер записной книжки из клонированного каталога.Start the notebook server from your cloned directory.

    jupyter notebook
    

Выполнив указанные действия, запустите записную книжку tutorials/regression-part2-automated-ml.ipynb.After you complete the steps, run the tutorials/regression-part2-automated-ml.ipynb notebook.

Настройка среды разработкиSet up your development environment

Все настройки для работы по разработке можно сделать в записной книжке Python.All the setup for your development work can be accomplished in a Python notebook. Настройка включает следующие действия:Setup includes the following actions:

  • Установка пакета SDKInstall the SDK
  • Импорт пакетов Python.Import Python packages
  • Настройка рабочей области.Configure your workspace

Установка и импорт пакетовInstall and import packages

Если вы работаете с руководством в собственной среде Python, используйте следующую команду для установки необходимых пакетов.If you are following the tutorial in your own Python environment, use the following to install necessary packages.

pip install azureml-sdk[automl,notebooks] matplotlib

Импортируйте пакеты Python, которые необходимы в этом руководстве.Import the Python packages you need in this tutorial:

import azureml.core
import pandas as pd
from azureml.core.workspace import Workspace
import logging
import os

Настройка рабочей областиConfigure workspace

В существующей рабочей области создайте объект.Create a workspace object from the existing workspace. Класс Workspace принимает сведения о подписке и ресурсах Azure.A Workspace is a class that accepts your Azure subscription and resource information. Он также создает облачный ресурс для мониторинга и отслеживания работы модели.It also creates a cloud resource to monitor and track your model runs.

Workspace.from_config() считывает файл config.json и загружает данные в объект с именем ws.Workspace.from_config() reads the file config.json and loads the details into an object named ws. ws используется в остальном коде в этом руководстве.ws is used throughout the rest of the code in this tutorial.

Получив объект рабочей области, укажите имя для эксперимента.After you have a workspace object, specify a name for the experiment. Создайте и зарегистрируйте локальный каталог в рабочей области.Create and register a local directory with the workspace. Все выполнения указанного эксперимента записываются в журнал под его именем и на портале Azure.The history of all runs is recorded under the specified experiment and in the Azure portal.

ws = Workspace.from_config()
# choose a name for the run history container in the workspace
experiment_name = 'automated-ml-regression'
# project folder
project_folder = './automated-ml-regression'

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

Используйте объект потока данных, созданный в рамках работы с предыдущим руководством.Use the data flow object created in the previous tutorial. Таким образом, в первой части этого руководства были очищены данные о такси Нью-Йорка, поэтому их можно использовать в модели машинного обучения.To summarize, part 1 of this tutorial cleaned the NYC Taxi data so it could be used in a machine learning model. Теперь вы используете различные функции из набора данных и позволяете автоматизированной модели создавать связи между функциями и стоимостью поездки на такси.Now, you use various features from the data set and allow an automated model to build relationships between the features and the price of a taxi trip. Откройте и выполните поток данных, а затем проверьте результаты.Open and run the data flow and review the results:

import azureml.dataprep as dprep

file_path = os.path.join(os.getcwd(), "dflows.dprep")

dflow_prepared = dprep.Dataflow.open(file_path)
dflow_prepared.get_profile()
typeType MinMin MaxMax CountCount Отсутствующее количествоMissing count Присутствующее количествоNot missing count Процент отсутствующихPercent missing Количество ошибокError count Количество пустыхEmpty count Квантиль уровня 0,1 %0.1% quantile Квантиль уровня 1 %1% quantile Квантиль уровня 5 %5% quantile Квантиль уровня 25 %25% quantile Квантиль уровня 50 %50% quantile Квантиль уровня 75 %75% quantile Квантиль уровня 95 %95% quantile Квантиль уровня 99 %99% quantile Квантиль уровня 99,9 %99.9% quantile Среднее значениеMean Стандартное отклонениеStandard deviation VarianceVariance АсимметрияSkewness ЭксцессKurtosis
vendorvendor FieldType.STRINGFieldType.STRING 11 VTSVTS 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0
pickup_weekdaypickup_weekday FieldType.STRINGFieldType.STRING ПятницаFriday СредаWednesday 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0
pickup_hourpickup_hour FieldType.DECIMALFieldType.DECIMAL 00 2323 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 00 2,900472.90047 2,693552.69355 9,728899.72889 1616 19,371319.3713 22,697422.6974 2323 2323 14,273114.2731 6,592426.59242 43,4643.46 –0,693723-0.693723 –0,570403-0.570403
pickup_minutepickup_minute FieldType.DECIMALFieldType.DECIMAL 00 5959 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 00 4,997014.99701 4,958334.95833 14,152814.1528 29,383229.3832 44,682544.6825 56,444456.4444 58,990958.9909 5959 29,42729.427 17,433317.4333 303,921303.921 0,01209990.0120999 –1,20981-1.20981
pickup_secondpickup_second FieldType.DECIMALFieldType.DECIMAL 00 5959 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 00 5,281315.28131 55 14,783214.7832 29,929329.9293 44,72544.725 56,757356.7573 5959 5959 29,744329.7443 17,359517.3595 301,351301.351 –0,0252399-0.0252399 –1,19616-1.19616
dropoff_weekdaydropoff_weekday FieldType.STRINGFieldType.STRING ПятницаFriday СредаWednesday 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0
dropoff_hourdropoff_hour FieldType.DECIMALFieldType.DECIMAL 00 2323 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 00 2,571532.57153 22 9,587959.58795 15,999415.9994 19,618419.6184 22,831722.8317 2323 2323 14,210514.2105 6,710936.71093 45,036545.0365 –0,687292-0.687292 –0,61951-0.61951
dropoff_minutedropoff_minute FieldType.DECIMALFieldType.DECIMAL 00 5959 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 00 5,443835.44383 4,846944.84694 14,103614.1036 28,836528.8365 44,310244.3102 56,689256.6892 5959 5959 29,290729.2907 17,410817.4108 303,136303.136 0,02225140.0222514 –1,2181-1.2181
dropoff_seconddropoff_second FieldType.DECIMALFieldType.DECIMAL 00 5959 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 00 5,078015.07801 55 14,575114.5751 29,597229.5972 45,464945.4649 56,272956.2729 5959 5959 29,77229.772 17,533717.5337 307,429307.429 –0,0212575-0.0212575 –1,226-1.226
store_forwardstore_forward FieldType.STRINGFieldType.STRING НетN ДаY 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0
pickup_longitudepickup_longitude FieldType.DECIMALFieldType.DECIMAL –74,0781-74.0781 –73,7459-73.7459 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 –74,0578-74.0578 –73,9639-73.9639 –73,9656-73.9656 –73,9508-73.9508 –73,9255-73.9255 –73,8529-73.8529 –73,8302-73.8302 –73,8238-73.8238 –73,7697-73.7697 –73,9123-73.9123 0,05037570.0503757 0,002537710.00253771 0,3521720.352172 –0,923743-0.923743
pickup_latitudepickup_latitude FieldType.DECIMALFieldType.DECIMAL 40,575540.5755 40,879940.8799 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 40,63240.632 40,711740.7117 40,711540.7115 40,721340.7213 40,756540.7565 40,805840.8058 40,847840.8478 40,867640.8676 40,877840.8778 40,764940.7649 0,04946740.0494674 0,002447020.00244702 0,2059720.205972 –0,777945-0.777945
dropoff_longitudedropoff_longitude FieldType.DECIMALFieldType.DECIMAL -74,0857-74.0857 -73,7209-73.7209 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 –74,0775-74.0775 –73,9875-73.9875 –73,9882-73.9882 –73,9638-73.9638 –73,935-73.935 –73,8755-73.8755 –73,8125-73.8125 –73,7759-73.7759 –73,7327-73.7327 –73,9202-73.9202 0,05846270.0584627 0,003417890.00341789 0,6236220.623622 –0,262603-0.262603
dropoff_latitudedropoff_latitude FieldType.DECIMALFieldType.DECIMAL 40,583540.5835 40,879740.8797 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 40,597340.5973 40,692840.6928 40,691140.6911 40,722640.7226 40,756740.7567 40,791840.7918 40,849540.8495 40,86840.868 40,878740.8787 40,758340.7583 0,05173990.0517399 0,002677010.00267701 0,03904040.0390404 –0,203525-0.203525
passengerspassengers FieldType.DECIMALFieldType.DECIMAL 11 66 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 11 11 11 11 11 55 55 66 66 2,392492.39249 1,831971.83197 3,35613.3561 0,7631440.763144 –1,23467-1.23467
distancedistance FieldType.DECIMALFieldType.DECIMAL 0,010.01 32,3432.34 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 0,01087440.0108744 0,7438980.743898 0,7381940.738194 1,2431.243 2,401682.40168 4,744784.74478 10,513610.5136 14,901114.9011 21,803521.8035 3,54473.5447 3,29433.2943 10,852410.8524 1,915561.91556 4,998984.99898
costcost FieldType.DECIMALFieldType.DECIMAL 0,10.1 8888 6148,06148.0 0,00.0 6148,06148.0 0,00.0 0,00.0 0,00.0 2,338372.33837 5,004915.00491 55 6,931296.93129 10,52410.524 17,481117.4811 33,234333.2343 50,009350.0093 63,175363.1753 13,684313.6843 9,665719.66571 93,42693.426 1,785181.78518 4,139724.13972

Чтобы подготовить данные для эксперимента, добавьте столбцы в dflow_x (таким образом они будут считаться признаками создания модели).You prepare the data for the experiment by adding columns to dflow_x to be features for our model creation. dflow_y определяется как прогнозируемое значение (стоимость).You define dflow_y to be our prediction value, cost:

dflow_X = dflow_prepared.keep_columns(['pickup_weekday','pickup_hour', 'distance','passengers', 'vendor'])
dflow_y = dflow_prepared.keep_columns('cost')

Разделение данных на обучающий и тестовый наборыSplit the data into train and test sets

Теперь разделите данные на обучающий и тестовый наборы с помощью функции train_test_split из библиотеки sklearn.Now you split the data into training and test sets by using the train_test_split function in the sklearn library. Эта функция выполняет разделение данных на набор данных X (функции) для обучения модели и набор данных Y (прогнозируемые значения) для тестирования.This function segregates the data into the x, features, dataset for model training and the y, values to predict, dataset for testing. Параметр test_size определяет процент данных, выделяемых для тестирования.The test_size parameter determines the percentage of data to allocate to testing. Параметр random_state задает начальное значение для случайного генератора, чтобы разделение тестового обучения было детерминированным.The random_state parameter sets a seed to the random generator, so that your train-test splits are always deterministic:

from sklearn.model_selection import train_test_split

x_df = dflow_X.to_pandas_dataframe()
y_df = dflow_y.to_pandas_dataframe()

x_train, x_test, y_train, y_test = train_test_split(x_df, y_df, test_size=0.2, random_state=223)
# flatten y_train to 1d array
y_train.values.flatten()

Цель этого шага — получить точки данных для проверки готовой модели, которые не использовались для обучения модели, чтобы измерить истинную точность.The purpose of this step is to have data points to test the finished model that haven't been used to train the model, in order to measure true accuracy. Другими словами, хорошо обученная модель должна уметь делать точные прогнозы на основе данных, которые она еще не видела.In other words, a well-trained model should be able to accurately make predictions from data it hasn't already seen. Теперь у вас есть необходимые пакеты и готовые данные для автоматического обучения модели.You now have the necessary packages and data ready for autotraining your model.

Автоматическое обучение моделиAutomatically train a model

Чтобы автоматически обучить модель, выполните следующие действия.To automatically train a model, take the following steps:

  1. Определите параметры для запуска эксперимента.Define settings for the experiment run. Вложите данные для обучения в конфигурацию и измените параметры, которые управляют процессом обучения.Attach your training data to the configuration, and modify settings that control the training process.
  2. Отправьте эксперимент для настройки модели.Submit the experiment for model tuning. После отправки эксперимента процесс повторяется в различных алгоритмах машинного обучения и значениях гиперпараметров в соответствии с заданными вами ограничениями.After submitting the experiment, the process iterates through different machine learning algorithms and hyperparameter settings, adhering to your defined constraints. Он выбирает наиболее подходящую модель путем оптимизации метрики точности.It chooses the best-fit model by optimizing an accuracy metric.

Определение параметров для автоматического создания и настройкиDefine settings for autogeneration and tuning

Определите параметры эксперимента и модели для ее автоматического создания и настройки.Define the experiment parameter and model settings for autogeneration and tuning. Просмотрите полный список параметров здесь.View the full list of settings. Отправка эксперимента с этими параметрами по умолчанию занимает примерно 10–15 минут, но если вы хотите снизить время выполнения, уменьшите iterations или iteration_timeout_minutes.Submitting the experiment with these default settings will take approximately 10-15 min, but if you want a shorter run time, reduce either iterations or iteration_timeout_minutes.

СвойствоProperty Значение в этом руководствеValue in this tutorial ОПИСАНИЕDescription
iteration_timeout_minutesiteration_timeout_minutes 1010 Максимальная длительность каждой итерации в минутах.Time limit in minutes for each iteration. Уменьшите это значение, чтобы уменьшить общее время выполнения.Reduce this value to decrease total runtime.
iterationsiterations 3030 Число итераций.Number of iterations. В каждой итерации новая модель машинного обучения обучается с помощью ваших данных.In each iteration, a new machine learning model is trained with your data. Это основное значение, которое влияет на общее время выполнения.This is the primary value that affects total run time.
primary_metricprimary_metric spearman_correlation;spearman_correlation Метрика, который вы хотите оптимизировать.Metric that you want to optimize. Наиболее подходящая модель будет выбрана на основе этой метрики.The best-fit model will be chosen based on this metric.
preprocesspreprocess ИстинаTrue Используя True, эксперимент может предварительно обработать входные данные (обработка отсутствующих данных, преобразование текста в числовой тип и т. д.).By using True, the experiment can preprocess the input data (handling missing data, converting text to numeric, etc.)
verbosityverbosity logging.INFOlogging.INFO Определяет уровень ведения журнала.Controls the level of logging.
n_cross_validationsn_cross_validations 55 Количество разделений перекрестных проверок, которые нужно выполнить, если данные проверки не указаны.Number of cross-validation splits to perform when validation data is not specified.
automl_settings = {
    "iteration_timeout_minutes" : 10,
    "iterations" : 30,
    "primary_metric" : 'spearman_correlation',
    "preprocess" : True,
    "verbosity" : logging.INFO,
    "n_cross_validations": 5
}

Используйте определенные вами параметры обучения в качестве параметра для объекта AutoMLConfig.Use your defined training settings as a parameter to an AutoMLConfig object. Кроме того, укажите свои данные для обучения и тип модели, которая является regression в данном случае.Additionally, specify your training data and the type of model, which is regression in this case.

from azureml.train.automl import AutoMLConfig

# local compute
automated_ml_config = AutoMLConfig(task = 'regression',
                             debug_log = 'automated_ml_errors.log',
                             path = project_folder,
                             X = x_train.values,
                             y = y_train.values.flatten(),
                             **automl_settings)

Обучение модели автоматической регрессииTrain the automatic regression model

Запустите эксперимент, чтобы выполнить его в локальной среде.Start the experiment to run locally. Передайте в эксперимент определенный объект automated_ml_config.Pass the defined automated_ml_config object to the experiment. Настройте выход True для просмотра хода выполнения во время эксперимента:Set the output to True to view progress during the experiment:

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

Показанный вывод обновляется в реальном времени по мере выполнения эксперимента.The output shown updates live as the experiment runs. Для каждой итерации вы видите тип модели, длительность выполнения и точность обучения.For each iteration, you see the model type, the run duration, and the training accuracy. Поле BEST отслеживает лучшую оценку выполнения обучения на основе вашего типа метрики.The field BEST tracks the best running training score based on your metric type.

Parent Run ID: AutoML_02778de3-3696-46e9-a71b-521c8fca0651
*******************************************************************************************
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   MaxAbsScaler ExtremeRandomTrees                0:00:08       0.9447    0.9447
         1   StandardScalerWrapper GradientBoosting         0:00:09       0.9536    0.9536
         2   StandardScalerWrapper ExtremeRandomTrees       0:00:09       0.8580    0.9536
         3   StandardScalerWrapper RandomForest             0:00:08       0.9147    0.9536
         4   StandardScalerWrapper ExtremeRandomTrees       0:00:45       0.9398    0.9536
         5   MaxAbsScaler LightGBM                          0:00:08       0.9562    0.9562
         6   StandardScalerWrapper ExtremeRandomTrees       0:00:27       0.8282    0.9562
         7   StandardScalerWrapper LightGBM                 0:00:07       0.9421    0.9562
         8   MaxAbsScaler DecisionTree                      0:00:08       0.9526    0.9562
         9   MaxAbsScaler RandomForest                      0:00:09       0.9355    0.9562
        10   MaxAbsScaler SGD                               0:00:09       0.9602    0.9602
        11   MaxAbsScaler LightGBM                          0:00:09       0.9553    0.9602
        12   MaxAbsScaler DecisionTree                      0:00:07       0.9484    0.9602
        13   MaxAbsScaler LightGBM                          0:00:08       0.9540    0.9602
        14   MaxAbsScaler RandomForest                      0:00:10       0.9365    0.9602
        15   MaxAbsScaler SGD                               0:00:09       0.9602    0.9602
        16   StandardScalerWrapper ExtremeRandomTrees       0:00:49       0.9171    0.9602
        17   SparseNormalizer LightGBM                      0:00:08       0.9191    0.9602
        18   MaxAbsScaler DecisionTree                      0:00:08       0.9402    0.9602
        19   StandardScalerWrapper ElasticNet               0:00:08       0.9603    0.9603
        20   MaxAbsScaler DecisionTree                      0:00:08       0.9513    0.9603
        21   MaxAbsScaler SGD                               0:00:08       0.9603    0.9603
        22   MaxAbsScaler SGD                               0:00:10       0.9602    0.9603
        23   StandardScalerWrapper ElasticNet               0:00:09       0.9603    0.9603
        24   StandardScalerWrapper ElasticNet               0:00:09       0.9603    0.9603
        25   MaxAbsScaler SGD                               0:00:09       0.9603    0.9603
        26   TruncatedSVDWrapper ElasticNet                 0:00:09       0.9602    0.9603
        27   MaxAbsScaler SGD                               0:00:12       0.9413    0.9603
        28   StandardScalerWrapper ElasticNet               0:00:07       0.9603    0.9603
        29    Ensemble                                      0:00:38       0.9622    0.9622

Просмотр результатов.Explore the results

Ознакомьтесь с результатами автоматического обучения, воспользовавшись мини-приложением Jupyter или журналом эксперимента.Explore the results of automatic training with a Jupyter widget or by examining the experiment history.

Вариант 1. Просмотр результатов с помощью мини-приложения JupyterOption 1: Add a Jupyter widget to see results

Если вы используете записную книжку Jupyter, это мини-приложение позволит просмотреть график и таблицу всех результатов.If you use a Jupyter notebook, use this Jupyter notebook widget to see a graph and a table of all results:

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

Мини-приложение Jupyter, данные о выполнении График в мини-приложении JupyterJupyter widget run details Jupyter widget plot

Вариант 2. Получение и просмотр всех итераций запуска в PythonOption 2: Get and examine all run iterations in Python

Вы можете извлечь журнал каждого эксперимента и просмотреть отдельные метрики для каждой итерации.You can also retrieve the history of each experiment and explore the individual metrics for each iteration run. Проверив RMSE (root_mean_squared_error) для каждого отдельного выполнения модели, вы увидите, что большинство итераций прогнозируют справедливую стоимость такси в разумных границах (3–4 доллара США).By examining RMSE (root_mean_squared_error) for each individual model run, you see that most iterations are predicting the taxi fair cost within a reasonable margin ($3-4).

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

rundata = pd.DataFrame(metricslist).sort_index(1)
rundata
00 11 22 33 4.4 55 66 77 88 99 ...... 2020 2121 2222 2323 2424 2525 2626 2727 2828 2929
explained_varianceexplained_variance 0,8110370.811037 0,8805530.880553 0,3985820.398582 0,7760400.776040 0,6638690.663869 0,8759110.875911 0,1156320.115632 0,5869050.586905 0,8519110.851911 0,7939640.793964 ...... 0,8500230.850023 0,8836030.883603 0,8837040.883704 0,8807970.880797 0,8815640.881564 0,8837080.883708 0,8818260.881826 0,5853770.585377 0,8831230.883123 0,8868170.886817
mean_absolute_errormean_absolute_error 2,1894442.189444 1,5004121.500412 5,4805315.480531 2,6263162.626316 2,9730262.973026 1,5501991.550199 6,3838686.383868 4,4142414.414241 1,7433281.743328 2,2946012.294601 ...... 1,7974021.797402 1,4158151.415815 1,4181671.418167 1,5786171.578617 1,5594271.559427 1,4130421.413042 1,5516981.551698 4,0691964.069196 1,5057951.505795 1,4309571.430957
median_absolute_errormedian_absolute_error 1,4384171.438417 0,8508990.850899 4,5796624.579662 1,7652101.765210 1,5946001.594600 0,8698830.869883 4,2664504.266450 3,6273553.627355 0,9549920.954992 1,3610141.361014 ...... 0,9736340.973634 0,7748140.774814 0,7972690.797269 1,1472341.147234 1,1164241.116424 0,7839580.783958 1,0984641.098464 2,7090272.709027 1,0037281.003728 0,8517240.851724
normalized_mean_absolute_error;normalized_mean_absolute_error 0,0249080.024908 0,0170700.017070 0,0623500.062350 0,0298780.029878 0,0338230.033823 0,0176360.017636 0,0726260.072626 0,0502190.050219 0,0198330.019833 0,0261050.026105 ...... 0,0204480.020448 0,0161070.016107 0,0161340.016134 0,0179590.017959 0,0177410.017741 0,0160760.016076 0,0176530.017653 0,0462930.046293 0,0171310.017131 0,0162790.016279
normalized_median_absolute_errornormalized_median_absolute_error 0,0163640.016364 0,0096800.009680 0,0521010.052101 0,0200820.020082 0,0181410.018141 0,0098960.009896 0,0485380.048538 0,0412670.041267 0,0108650.010865 0,0154840.015484 ...... 0,0110770.011077 0,0088150.008815 0,0090700.009070 0,0130520.013052 0,0127010.012701 0,0089190.008919 0,0124970.012497 0,0308190.030819 0,0114190.011419 0,0096900.009690
normalized_root_mean_squared_error;normalized_root_mean_squared_error 0,0479680.047968 0,0378820.037882 0,0855720.085572 0,0522820.052282 0,0658090.065809 0,0386640.038664 0,1094010.109401 0,0711040.071104 0,0422940.042294 0,0499670.049967 ...... 0,0425650.042565 0,0376850.037685 0,0375570.037557 0,0376430.037643 0,0375130.037513 0,0375600.037560 0,0374650.037465 0,0720770.072077 0,0372490.037249 0,0367160.036716
normalized_root_mean_squared_log_error;normalized_root_mean_squared_log_error 0,0553530.055353 0,0450000.045000 0,1102190.110219 0,0656330.065633 0,0635890.063589 0,0444120.044412 0,1234330.123433 0,0923120.092312 0,0461300.046130 0,0552430.055243 ...... 0,0465400.046540 0,0418040.041804 0,0417710.041771 0,0451750.045175 0,0446280.044628 0,0416170.041617 0,0444050.044405 0,0796510.079651 0,0427990.042799 0,0415300.041530
r2_score;r2_score 0,8109000.810900 0,8803280.880328 0,3980760.398076 0,7759570.775957 0,6428120.642812 0,8757190.875719 0,0216030.021603 0,5865140.586514 0,8517670.851767 0,7936710.793671 ...... 0,8498090.849809 0,8801420.880142 0,8809520.880952 0,8805860.880586 0,8813470.881347 0,8808870.880887 0,8816130.881613 0,5481210.548121 0,8828830.882883 0,8863210.886321
root_mean_squared_errorroot_mean_squared_error 4,2163624.216362 3,3298103.329810 7,5217657.521765 4,5956044.595604 5,7846015.784601 3,3985403.398540 9,6163549.616354 6,2500116.250011 3,7176613.717661 4,3920724.392072 ...... 3,7414473.741447 3,3125333.312533 3,3012423.301242 3,3087953.308795 3,2973893.297389 3,3014853.301485 3,2931823.293182 6,3355816.335581 3,2742093.274209 3,2273653.227365
root_mean_squared_log_errorroot_mean_squared_log_error 0,2431840.243184 0,1977020.197702 0,4842270.484227 0,2883490.288349 0,2793670.279367 0,1951160.195116 0,5422810.542281 0,4055590.405559 0,2026660.202666 0,2427020.242702 ...... 0,2044640.204464 0,1836580.183658 0,1835140.183514 0,1984680.198468 0,1960670.196067 0,1828360.182836 0,1950870.195087 0,3499350.349935 0,1880310.188031 0,1824550.182455
spearman_correlation;spearman_correlation 0,9447430.944743 0,9536180.953618 0,8579650.857965 0,9147030.914703 0,9398460.939846 0,9561590.956159 0,8281870.828187 0,9420690.942069 0,9525810.952581 0,9354770.935477 ...... 0,9512870.951287 0,9603350.960335 0,9601950.960195 0,9602790.960279 0,9602880.960288 0,9603230.960323 0,9601610.960161 0,9412540.941254 0,9602930.960293 0,9621580.962158
spearman_correlation_maxspearman_correlation_max 0,9447430.944743 0,9536180.953618 0,9536180.953618 0,9536180.953618 0,9536180.953618 0,9561590.956159 0,9561590.956159 0,9561590.956159 0,9561590.956159 0,9561590.956159 ...... 0,9603030.960303 0,9603350.960335 0,9603350.960335 0,9603350.960335 0,9603350.960335 0,9603350.960335 0,9603350.960335 0,9603350.960335 0,9603350.960335 0,9621580.962158

12 строк × 30 столбцов12 rows × 30 columns

Извлечение наиболее эффективной моделиRetrieve the best model

Выберите наилучший конвейер из итераций.Select the best pipeline from our iterations. Метод get_output в automl_classifier возвращает лучшее выполнение и соответствующую модель для последнего соответствующего вызова.The get_output method on automl_classifier returns the best run and the fitted model for the last fit invocation. Используя перегрузки get_output, вы можете извлекать лучшее выполнение и соответствующую ему модель по любой зарегистрированной метрике или по определенной итерации.By using the overloads on get_output, you can retrieve the best run and fitted model for any logged metric or a particular iteration:

best_run, fitted_model = local_run.get_output()
print(best_run)
print(fitted_model)

Тестирование точности лучшей моделиTest the best model accuracy

Используйте лучшую модель для выполнения прогнозирования в тестовом наборе данных, чтобы прогнозировать тарифы на такси.Use the best model to run predictions on the test dataset to predict taxi fares. Функция predict использует лучшую модель и прогнозирует значения Y (стоимость поездки) из набора данных x_test.The function predict uses the best model and predicts the values of y, trip cost, from the x_test dataset. Выведите первые 10 прогнозируемых значений стоимости из y_predict.Print the first 10 predicted cost values from y_predict:

y_predict = fitted_model.predict(x_test.values)
print(y_predict[:10])

Создайте точечную диаграмму для отображения прогнозируемых значений затрат в сравнении с фактическими значениями затрат.Create a scatter plot to visualize the predicted cost values compared to the actual cost values. Следующий код использует функцию distance в качестве оси X и поездку cost как ось Y.The following code uses the distance feature as the x-axis and trip cost as the y-axis. Чтобы сравнивать дисперсию прогнозируемых затрат при каждом значении расстояния поездки, первые 100 прогнозируемых и фактических значений затрат создаются в виде отдельных рядов.To compare the variance of predicted cost at each trip distance value, the first 100 predicted and actual cost values are created as separate series. Просматривая график видно, что отношение расстояния и затрат почти линейное, а прогнозируемые значения затрат в большинстве случаев очень близки к фактической цене для той же длительности поездки.Examining the plot shows that the distance/cost relationship is nearly linear, and the predicted cost values are in most cases very close to the actual cost values for the same trip distance.

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(14, 10))
ax1 = fig.add_subplot(111)

distance_vals = [x[4] for x in x_test.values]
y_actual = y_test.values.flatten().tolist()

ax1.scatter(distance_vals[:100], y_predict[:100], s=18, c='b', marker="s", label='Predicted')
ax1.scatter(distance_vals[:100], y_actual[:100], s=18, c='r', marker="o", label='Actual')

ax1.set_xlabel('distance (mi)')
ax1.set_title('Predicted and Actual Cost/Distance')
ax1.set_ylabel('Cost ($)')

plt.legend(loc='upper left', prop={'size': 12})
plt.rcParams.update({'font.size': 14})
plt.show()

Точечная диаграмма с результатами прогнозов

Вычислите значение root mean squared error результатов.Calculate the root mean squared error of the results. Примените кадр данных y_test.Use the y_test dataframe. Преобразуйте его в список, чтобы сравнить с прогнозируемыми значениями.Convert it to a list to compare to the predicted values. Функция mean_squared_error принимает два массива значений и вычисляет значение среднеквадратической погрешности между ними.The function mean_squared_error takes two arrays of values and calculates the average squared error between them. Квадратный корень из результата позволяет получить оценку ошибку в тех же единицах, что и для переменной y (стоимость).Taking the square root of the result gives an error in the same units as the y variable, cost. Она обозначает, насколько далеки полученные прогнозы тарифов на такси от фактических тарифов:It indicates roughly how far the taxi fare predictions are from the actual fares:

from sklearn.metrics import mean_squared_error
from math import sqrt

rmse = sqrt(mean_squared_error(y_actual, y_predict))
rmse
3.2204936862688798

Чтобы вычислить MAPE (средняя абсолютная погрешность в процентах), запустите следующий код для полных наборов данных y_actual и y_predict.Run the following code to calculate mean absolute percent error (MAPE) by using the full y_actual and y_predict datasets. Эта метрика вычисляет абсолютное отклонение между каждой парой прогнозируемого и фактического значения, а затем суммирует все отклонения.This metric calculates an absolute difference between each predicted and actual value and sums all the differences. Эта сумма выражается в процентах от общего количества фактических значений:Then it expresses that sum as a percent of the total of the actual values:

sum_actuals = sum_errors = 0

for actual_val, predict_val in zip(y_actual, y_predict):
    abs_error = actual_val - predict_val
    if abs_error < 0:
        abs_error = abs_error * -1

    sum_errors = sum_errors + abs_error
    sum_actuals = sum_actuals + actual_val

mean_abs_percent_error = sum_errors / sum_actuals
print("Model MAPE:")
print(mean_abs_percent_error)
print()
print("Model Accuracy:")
print(1 - mean_abs_percent_error)
Model MAPE:
0.10545153869569586

Model Accuracy:
0.8945484613043041

Из конечных метрик точности прогнозирования вы видите, что модель достаточно хороша в прогнозировании тарифов на такси на основе функций набора данных, обычно в пределах + - 3,00 доллара США.From the final prediction accuracy metrics, you see that the model is fairly good at predicting taxi fares from the data set's features, typically within +- $3.00. Традиционный процесс разработки модели машинного обучения является очень ресурсоемким и требует значительных предметных знаний и времени для выполнения десятков моделей и сравнения их результатов.The traditional machine learning model development process is highly resource-intensive, and requires significant domain knowledge and time investment to run and compare the results of dozens of models. Использование автоматического машинного обучения является отличным способом быстро протестировать множество различных моделей для вашего сценария.Using automated machine learning is a great way to rapidly test many different models for your scenario.

Очистка ресурсовClean up resources

Важно!

Созданные ресурсы могут использоваться в качестве необходимых компонентов для других руководств и статей с практическими рекомендациями по Службе машинного обучения Azure.The resources you created can be used as prerequisites to other Azure Machine Learning service tutorials and how-to articles.

Если вы не планируете использовать созданные ресурсы, удалите их, чтобы с вас не взималась плата.If you don't plan to use the resources you created, delete them, so you don't incur any charges:

  1. На портале Azure выберите Группы ресурсов в левой части окна.In the Azure portal, select Resource groups on the far left.

    Удаление ресурсов на портале Azure

  2. В списке выберите созданную группу ресурсов.From the list, select the resource group you created.

  3. Выберите Удалить группу ресурсов.Select Delete resource group.

  4. Введите имя группы ресурсов.Enter the resource group name. Теперь щелкните Удалить.Then select Delete.

Дополнительная информацияNext steps

Изучив это руководство об автоматическом машинном обучении, вы выполнили следующие задачи.In this automated machine learning tutorial, you did the following tasks:

  • Настройка рабочей области и подготовка данных для эксперимента.Configured a workspace and prepared data for an experiment.
  • Обучение с помощью локальной автоматической модели регрессии с пользовательскими параметрами.Trained by using an automated regression model locally with custom parameters.
  • Просмотр и проверка результатов обучения.Explored and reviewed training results.

Разверните модель с помощью службы "Машинное обучение Azure".Deploy your model with Azure Machine Learning.