Руководство по Использованию автоматического машинного обучения для прогнозирования тарифов на таксиTutorial: Use automated machine learning to predict taxi fares

Применимо к: даБазовый выпуск даКорпоративный выпуск                    (Обновление до выпуска "Корпоративный")APPLIES TO: yesBasic edition yesEnterprise edition                    (Upgrade to Enterprise edition)

В этом руководстве показано, как с помощью функции автоматизированного машинного обучения в Машинном обучении Azure создать модель регрессии для прогнозирования тарифов на такси в Нью-Йорке.In this tutorial, you use automated machine learning in Azure Machine Learning to create a regression model to predict NYC taxi fare prices. В ходе этого процесса добавляются данные для обучения и настраиваются параметры, а также выполняется автоматическая итерация с использованием комбинаций разных методов нормализации или стандартизации признаков, моделей и настроек гиперпараметров для получения оптимальной модели.This process accepts training data and configuration settings, and automatically iterates through combinations of different feature normalization/standardization methods, models, and hyperparameter settings to arrive at the best model.

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

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

  • Загрузка, преобразование и очистка данных с помощью Открытых наборов данных Azure.Download, transform, and clean data using Azure Open Datasets
  • Обучение автоматизированной регрессионной модели машинного обучения.Train an automated machine learning regression model
  • Расчет точности модели.Calculate model accuracy

Если у вас еще нет подписки 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 today.

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

  • Выполните инструкции из руководства по установке, если у вас еще нет рабочей области Машинного обучения Azure или виртуальной машины записных книжек.Complete the setup tutorial if you don't already have an Azure Machine Learning workspace or notebook virtual machine.
  • Завершив установку, откройте записную книжкуtutorials/regression-automated-ml.ipynb, используя тот же сервер записной книжки.After you complete the setup tutorial, open the tutorials/regression-automated-ml.ipynb notebook using the same notebook server.

Это руководство также доступно на сайте GitHub, если вы хотите запустить его в собственной локальной среде.This tutorial is also available on GitHub if you wish to run it in your own local environment. Выполните команду pip install azureml-sdk[automl] azureml-opendatasets azureml-widgets, чтобы получить необходимые пакеты.Run pip install azureml-sdk[automl] azureml-opendatasets azureml-widgets to get the required packages.

Скачивание и подготовка данныхDownload and prepare data

Импортируйте необходимые пакеты.Import the necessary packages. Пакет открытых наборов данных содержит класс, представляющий каждый источник данных (например NycTlcGreen), для упрощения фильтрации параметров данных перед скачиванием.The Open Datasets package contains a class representing each data source (NycTlcGreen for example) to easily filter date parameters before downloading.

from azureml.opendatasets import NycTlcGreen
import pandas as pd
from datetime import datetime
from dateutil.relativedelta import relativedelta

Начните с создания кадра данных для хранения данных о поездках на такси.Begin by creating a dataframe to hold the taxi data. При работе в среде, отличающейся от Spark, в открытых наборах данных можно скачать за раз данные некоторых классов только за один месяц. Это ограничение позволяет избежать ошибки MemoryError при использовании больших наборов данных.When working in a non-Spark environment, Open Datasets only allows downloading one month of data at a time with certain classes to avoid MemoryError with large datasets.

Чтобы получить данные о поездках на такси, поочередно скачайте данные за каждый месяц и, прежде чем добавить их кgreen_taxi_dfслучайной выборке 2,000 записей за каждый месяц, чтобы не раздувать кадр данных.To download taxi data, iteratively fetch one month at a time, and before appending it to green_taxi_df randomly sample 2,000 records from each month to avoid bloating the dataframe. После этого проверьте данные.Then preview the data.

green_taxi_df = pd.DataFrame([])
start = datetime.strptime("1/1/2015","%m/%d/%Y")
end = datetime.strptime("1/31/2015","%m/%d/%Y")

for sample_month in range(12):
    temp_df_green = NycTlcGreen(start + relativedelta(months=sample_month), end + relativedelta(months=sample_month)) \
        .to_pandas_dataframe()
    green_taxi_df = green_taxi_df.append(temp_df_green.sample(2000))

green_taxi_df.head(10)
vendorIDvendorID lpepPickupDatetimelpepPickupDatetime lpepDropoffDatetimelpepDropoffDatetime passengerCountpassengerCount tripDistancetripDistance puLocationIdpuLocationId doLocationIddoLocationId pickupLongitudepickupLongitude pickupLatitudepickupLatitude dropoffLongitudedropoffLongitude ...... paymentTypepaymentType fareAmountfareAmount extraextra mtaTaxmtaTax improvementSurchargeimprovementSurcharge tipAmounttipAmount tollsAmounttollsAmount ehailFeeehailFee totalAmounttotalAmount tripTypetripType
131969131969 22 2015-01-11 05:34:442015-01-11 05:34:44 2015-01-11 05:45:032015-01-11 05:45:03 33 4,844.84 НетNone НетNone -73,88-73.88 40,8440.84 -73,94-73.94 ...... 22 15,0015.00 0,500.50 0,500.50 0,30.3 0,000.00 0,000.00 не числоnan 16,3016.30 1.001.00
11298171129817 22 2015-01-20 16:26:292015-01-20 16:26:29 2015-01-20 16:30:262015-01-20 16:30:26 11 0,690.69 НетNone НетNone -73,96-73.96 40,8140.81 -73,96-73.96 ...... 22 4.504.50 1.001.00 0,500.50 0,30.3 0,000.00 0,000.00 не числоnan 6,306.30 1.001.00
12786201278620 22 2015-01-01 05:58:102015-01-01 05:58:10 2015-01-01 06:00:552015-01-01 06:00:55 11 0,450.45 НетNone НетNone -73,92-73.92 40,7640.76 -73,91-73.91 ...... 22 4,004.00 0,000.00 0,500.50 0,30.3 0,000.00 0,000.00 не числоnan 4,804.80 1.001.00
348430348430 22 2015-01-17 02:20:502015-01-17 02:20:50 2015-01-17 02:41:382015-01-17 02:41:38 11 0,000.00 НетNone НетNone -73,81-73.81 40,7040.70 -73,82-73.82 ...... 22 12,5012.50 0,500.50 0,500.50 0,30.3 0,000.00 0,000.00 не числоnan 13,8013.80 1.001.00
12696271269627 11 2015-01-01 05:04:102015-01-01 05:04:10 2015-01-01 05:06:232015-01-01 05:06:23 11 0,500.50 НетNone НетNone -73,92-73.92 40,7640.76 -73,92-73.92 ...... 22 4,004.00 0,500.50 0,500.50 00 0,000.00 0,000.00 не числоnan 5.005.00 1.001.00
811755811755 11 2015-01-04 19:57:512015-01-04 19:57:51 2015-01-04 20:05:452015-01-04 20:05:45 22 1,101.10 НетNone НетNone -73,96-73.96 40,7240.72 -73,95-73.95 ...... 22 6,506.50 0,500.50 0,500.50 0,30.3 0,000.00 0,000.00 не числоnan 7,807.80 1.001.00
737281737281 11 2015-01-03 12:27:312015-01-03 12:27:31 2015-01-03 12:33:522015-01-03 12:33:52 11 0,900.90 НетNone НетNone -73,88-73.88 40,7640.76 -73,87-73.87 ...... 22 6,006.00 0,000.00 0,500.50 0,30.3 0,000.00 0,000.00 не числоnan 6,806.80 1.001.00
113951113951 11 2015-01-09 23:25:512015-01-09 23:25:51 2015-01-09 23:39:522015-01-09 23:39:52 11 3,303.30 НетNone НетNone -73,96-73.96 40,7240.72 -73,91-73.91 ...... 22 12,5012.50 0,500.50 0,500.50 0,30.3 0,000.00 0,000.00 не числоnan 13,8013.80 1.001.00
150436150436 22 2015-01-11 17:15:142015-01-11 17:15:14 2015-01-11 17:22:572015-01-11 17:22:57 11 1,191.19 НетNone НетNone -73,94-73.94 40,7140.71 -73,95-73.95 ...... 11 7,007.00 0,000.00 0,500.50 0,30.3 1,751.75 0,000.00 не числоnan 9,559.55 1.001.00
432136432136 22 2015-01-22 23:16:332015-01-22 23:16:33 2015-01-22 23:20:132015-01-22 23:20:13 11 0,650.65 НетNone НетNone -73,94-73.94 40,7140.71 -73,94-73.94 ...... 22 5.005.00 0,500.50 0,500.50 0,30.3 0,000.00 0,000.00 не числоnan 6,306.30 1.001.00

10 строк × 23 столбца10 rows × 23 columns

Теперь, когда начальные данные загружены, определите функцию для создания различных признаков на основе времени из поля с временем и датой начала поездки.Now that the initial data is loaded, define a function to create various time-based features from the pickup datetime field. При этом будут созданы новые поля для номера месяца, дня месяца, дня недели и времени дня, что позволит модели учитывать сезонные колебания на основе времени.This will create new fields for the month number, day of month, day of week, and hour of day, and will allow the model to factor in time-based seasonality. Примените функцию apply() к кадру данных, чтобы последовательно применить функцию build_time_features() к каждой строке данных о поездках на такси.Use the apply() function on the dataframe to iteratively apply the build_time_features() function to each row in the taxi data.

def build_time_features(vector):
    pickup_datetime = vector[0]
    month_num = pickup_datetime.month
    day_of_month = pickup_datetime.day
    day_of_week = pickup_datetime.weekday()
    hour_of_day = pickup_datetime.hour

    return pd.Series((month_num, day_of_month, day_of_week, hour_of_day))

green_taxi_df[["month_num", "day_of_month","day_of_week", "hour_of_day"]] = green_taxi_df[["lpepPickupDatetime"]].apply(build_time_features, axis=1)
green_taxi_df.head(10)
vendorIDvendorID lpepPickupDatetimelpepPickupDatetime lpepDropoffDatetimelpepDropoffDatetime passengerCountpassengerCount tripDistancetripDistance puLocationIdpuLocationId doLocationIddoLocationId pickupLongitudepickupLongitude pickupLatitudepickupLatitude dropoffLongitudedropoffLongitude ...... improvementSurchargeimprovementSurcharge tipAmounttipAmount tollsAmounttollsAmount ehailFeeehailFee totalAmounttotalAmount tripTypetripType month_nummonth_num day_of_monthday_of_month day_of_weekday_of_week hour_of_dayhour_of_day
131969131969 22 2015-01-11 05:34:442015-01-11 05:34:44 2015-01-11 05:45:032015-01-11 05:45:03 33 4,844.84 НетNone НетNone -73,88-73.88 40,8440.84 -73,94-73.94 ...... 0,30.3 0,000.00 0,000.00 не числоnan 16,3016.30 1.001.00 11 1111 66 55
11298171129817 22 2015-01-20 16:26:292015-01-20 16:26:29 2015-01-20 16:30:262015-01-20 16:30:26 11 0,690.69 НетNone НетNone -73,96-73.96 40,8140.81 -73,96-73.96 ...... 0,30.3 0,000.00 0,000.00 не числоnan 6,306.30 1.001.00 11 2020 11 1616
12786201278620 22 2015-01-01 05:58:102015-01-01 05:58:10 2015-01-01 06:00:552015-01-01 06:00:55 11 0,450.45 НетNone НетNone -73,92-73.92 40,7640.76 -73,91-73.91 ...... 0,30.3 0,000.00 0,000.00 не числоnan 4,804.80 1.001.00 11 11 33 55
348430348430 22 2015-01-17 02:20:502015-01-17 02:20:50 2015-01-17 02:41:382015-01-17 02:41:38 11 0,000.00 НетNone НетNone -73,81-73.81 40,7040.70 -73,82-73.82 ...... 0,30.3 0,000.00 0,000.00 не числоnan 13,8013.80 1.001.00 11 1717 55 22
12696271269627 11 2015-01-01 05:04:102015-01-01 05:04:10 2015-01-01 05:06:232015-01-01 05:06:23 11 0,500.50 НетNone НетNone -73,92-73.92 40,7640.76 -73,92-73.92 ...... 00 0,000.00 0,000.00 не числоnan 5.005.00 1.001.00 11 11 33 55
811755811755 11 2015-01-04 19:57:512015-01-04 19:57:51 2015-01-04 20:05:452015-01-04 20:05:45 22 1,101.10 НетNone НетNone -73,96-73.96 40,7240.72 -73,95-73.95 ...... 0,30.3 0,000.00 0,000.00 не числоnan 7,807.80 1.001.00 11 4\.4 66 1919
737281737281 11 2015-01-03 12:27:312015-01-03 12:27:31 2015-01-03 12:33:522015-01-03 12:33:52 11 0,900.90 НетNone НетNone -73,88-73.88 40,7640.76 -73,87-73.87 ...... 0,30.3 0,000.00 0,000.00 не числоnan 6,806.80 1.001.00 11 33 55 1212
113951113951 11 2015-01-09 23:25:512015-01-09 23:25:51 2015-01-09 23:39:522015-01-09 23:39:52 11 3,303.30 НетNone НетNone -73,96-73.96 40,7240.72 -73,91-73.91 ...... 0,30.3 0,000.00 0,000.00 не числоnan 13,8013.80 1.001.00 11 99 4\.4 2323
150436150436 22 2015-01-11 17:15:142015-01-11 17:15:14 2015-01-11 17:22:572015-01-11 17:22:57 11 1,191.19 НетNone НетNone -73,94-73.94 40,7140.71 -73,95-73.95 ...... 0,30.3 1,751.75 0,000.00 не числоnan 9,559.55 1.001.00 11 1111 66 1717
432136432136 22 2015-01-22 23:16:332015-01-22 23:16:33 2015-01-22 23:20:132015-01-22 23:20:13 11 0,650.65 НетNone НетNone -73,94-73.94 40,7140.71 -73,94-73.94 ...... 0,30.3 0,000.00 0,000.00 не числоnan 6,306.30 1.001.00 11 2222 33 2323

10 строк × 27 столбцов10 rows × 27 columns

Удалите столбцы, которые не требуются для обучения или построения дополнительных компонентов.Remove some of the columns that you won't need for training or additional feature building.

columns_to_remove = ["lpepPickupDatetime", "lpepDropoffDatetime", "puLocationId", "doLocationId", "extra", "mtaTax",
                     "improvementSurcharge", "tollsAmount", "ehailFee", "tripType", "rateCodeID",
                     "storeAndFwdFlag", "paymentType", "fareAmount", "tipAmount"
                    ]
for col in columns_to_remove:
    green_taxi_df.pop(col)

green_taxi_df.head(5)

Удаление данныхCleanse data

Примените функцию describe() к новому кадру данных, чтобы просмотреть сводные статистические данные для каждого поля.Run the describe() function on the new dataframe to see summary statistics for each field.

green_taxi_df.describe()
vendorIDvendorID passengerCountpassengerCount tripDistancetripDistance pickupLongitudepickupLongitude pickupLatitudepickupLatitude dropoffLongitudedropoffLongitude dropoffLatitudedropoffLatitude totalAmounttotalAmount month_nummonth_num day_of_monthday_of_month day_of_weekday_of_week hour_of_dayhour_of_day
countcount 48000,0048000.00 48000,0048000.00 48000,0048000.00 48000,0048000.00 48000,0048000.00 48000,0048000.00 48000,0048000.00 48000,0048000.00 48000,0048000.00 48000,0048000.00 48000,0048000.00 48000,0048000.00
meanmean 1,781.78 1,371.37 2,872.87 -73,83-73.83 40,6940.69 -73.84-73.84 40,7040.70 14,7514.75 6,506.50 15,1315.13 3,273.27 13,5213.52
stdstd 0,410.41 1,041.04 2,932.93 2.762.76 1,521.52 2.612.61 1,441.44 12,0812.08 3.453.45 8,458.45 1,951.95 6,836.83
Minmin 1.001.00 0,000.00 0,000.00 -74,66-74.66 0,000.00 -74,66-74.66 0,000.00 -300,00-300.00 1.001.00 1.001.00 0,000.00 0,000.00
25 %25% 2,002.00 1.001.00 1,061.06 -73,96-73.96 40,7040.70 -73,97-73.97 40,7040.70 7,807.80 3,753.75 8,008.00 2,002.00 9,009.00
50 %50% 2,002.00 1.001.00 1,901.90 -73,94-73.94 40,7540.75 -73,94-73.94 40,7540.75 11,3011.30 6,506.50 15,0015.00 3.003.00 15,0015.00
75 %75% 2,002.00 1.001.00 3.603.60 -73,92-73.92 40,8040.80 -73,91-73.91 40,7940.79 17,8017.80 9,259.25 22,0022.00 5.005.00 19,0019.00
maxmax 2,002.00 9,009.00 97,5797.57 0,000.00 41,9341.93 0,000.00 41,9441.94 450,00450.00 12,0012.00 30,0030.00 6,006.00 23,0023.00

Из сводных статистических данных видно, что в некоторых полях присутствуют выбросы или значения, снижающие точность модели.From the summary statistics, you see that there are several fields that have outliers or values that will reduce model accuracy. Сначала отфильтруйте поля ширины/долготы в границах округа Манхэттен.First filter the lat/long fields to be within the bounds of the Manhattan area. Это отфильтрует более длительные поездки на такси или поездки, которые являются выбросами по отношению к другим компонентам.This will filter out longer taxi trips or trips that are outliers in respect to their relationship with other features.

Кроме того, отфильтруйте поле tripDistance, чтобы его значение было больше нуля, но меньше 31 мили (расстояние между двумя парами ширина/долгота по формуле гаверсинуса).Additionally filter the tripDistance field to be greater than zero but less than 31 miles (the haversine distance between the two lat/long pairs). Это исключает длительные поездки-выбросы, которые имеют несогласованную стоимость.This eliminates long outlier trips that have inconsistent trip cost.

Наконец, поле totalAmount содержит отрицательные значения для тарифов на такси, которые не имеют смысла в контексте нашей модели, а поле passengerCount содержит неверные данные с минимальными значениями, равными нулю.Lastly, the totalAmount field has negative values for the taxi fares, which don't make sense in the context of our model, and the passengerCount field has bad data with the minimum values being zero.

Отфильтруйте эти аномалии с помощью функций запросов, а затем удалите несколько последних столбцов, не требуемых для обучения.Filter out these anomalies using query functions, and then remove the last few columns unnecessary for training.

final_df = green_taxi_df.query("pickupLatitude>=40.53 and pickupLatitude<=40.88")
final_df = final_df.query("pickupLongitude>=-74.09 and pickupLongitude<=-73.72")
final_df = final_df.query("tripDistance>=0.25 and tripDistance<31")
final_df = final_df.query("passengerCount>0 and totalAmount>0")

columns_to_remove_for_training = ["pickupLongitude", "pickupLatitude", "dropoffLongitude", "dropoffLatitude"]
for col in columns_to_remove_for_training:
    final_df.pop(col)

Снова вызовите describe(), чтобы убедиться в том, что данные очищены должным образом.Call describe() again on the data to ensure cleansing worked as expected. Теперь у вас есть подготовленный набор очищенных данных о поездках на такси, праздничных днях и погоде для обучения модели машинного обучения.You now have a prepared and cleansed set of taxi, holiday, and weather data to use for machine learning model training.

final_df.describe()

Настройка рабочей области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 authentication details into an object named ws. ws используется в остальном коде в этом руководстве.ws is used throughout the rest of the code in this tutorial.

from azureml.core.workspace import Workspace
ws = Workspace.from_config()

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

Разделите данные на обучающий и тестовый наборы с помощью функции train_test_split из библиотеки scikit-learn.Split the data into training and test sets by using the train_test_split function in the scikit-learn library. Эта функция выполняет разделение данных на набор данных X (функции) для обучения модели и набор данных Y (прогнозируемые значения) для тестирования.This function segregates the data into the x (features) data set for model training and the y (values to predict) data set 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 deterministic.

from sklearn.model_selection import train_test_split

y_df = final_df.pop("totalAmount")
x_df = final_df

x_train, x_test, y_train, y_test = train_test_split(x_df, y_df, test_size=0.2, random_state=223)

Цель этого шага — получить точки данных для проверки готовой модели, которые не использовались для обучения модели, чтобы измерить истинную точность.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 data prepared for auto-training a machine learning 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 training settings

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

СвойствоProperty Значение в этом руководствеValue in this tutorial ОПИСАНИЕDescription
iteration_timeout_minutesiteration_timeout_minutes 22 Максимальная длительность каждой итерации в минутах.Time limit in minutes for each iteration. Уменьшите это значение, чтобы уменьшить общее время выполнения.Reduce this value to decrease total runtime.
experiment_timeout_minutesexperiment_timeout_minutes 2020 Максимальное количество времени в минутах, в течение которого могут быть пройдены все итерации до завершения эксперимента.Maximum amount of time in minutes that all iterations combined can take before the experiment terminates.
enable_early_stoppingenable_early_stopping ИстинаTrue Флаг для включения преждевременного завершения, если оценка не улучшается за короткое время.Flag to enble early termination if the score is not improving in the short term.
primary_metricprimary_metric spearman_correlation;spearman_correlation Метрика, который вы хотите оптимизировать.Metric that you want to optimize. Наиболее подходящая модель будет выбрана на основе этой метрики.The best-fit model will be chosen based on this metric.
featurizationfeaturization автоauto Используя значение auto, эксперимент может предварительно обработать входные данные (обработка отсутствующих данных, преобразование текста в числовой тип и т. д.).By using auto, 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.
import logging

automl_settings = {
    "iteration_timeout_minutes": 2,
    "experiment_timeout_minutes": 20,
    "enable_early_stopping": True,
    "primary_metric": 'spearman_correlation',
    "featurization": 'auto',
    "verbosity": logging.INFO,
    "n_cross_validations": 5
}

Используйте определенные вами параметры обучения в качестве параметра **kwargs для объекта AutoMLConfig.Use your defined training settings as a **kwargs 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

automl_config = AutoMLConfig(task='regression',
                             debug_log='automated_ml_errors.log',
                             X=x_train.values,
                             y=y_train.values.flatten(),
                             **automl_settings)

Примечание

Этапы предварительной обработки автоматизированного машинного обучения (нормализация компонентов, обработка недостающих данных, преобразование текста в числовой формат и т. д.) становятся частью базовой модели.Automated machine learning pre-processing steps (feature normalization, handling missing data, converting text to numeric, etc.) become part of the underlying model. При использовании модели для прогнозирования эти этапы предварительной обработки, которые выполнялись во время обучения, автоматически выполняются для входных данных.When using the model for predictions, the same pre-processing steps applied during training are applied to your input data automatically.

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

Создайте объект эксперимента в рабочей области.Create an experiment object in your workspace. Эксперимент выступает в качестве контейнера для отдельных запусков.An experiment acts as a container for your individual runs. Передайте определенный объект automl_config в эксперимент и задайте для выходных данных значение True, чтобы просмотреть ход выполнения.Pass the defined automl_config object to the experiment, and set the output to True to view progress during the run.

После запуска эксперимента показанный вывод обновляется в реальном времени по мере выполнения эксперимента.After starting the experiment, 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.

from azureml.core.experiment import Experiment
experiment = Experiment(ws, "taxi-experiment")
local_run = experiment.submit(automl_config, show_output=True)
Running on local machine
Parent Run ID: AutoML_1766cdf7-56cf-4b28-a340-c4aeee15b12b
Current status: DatasetFeaturization. Beginning to featurize the dataset.
Current status: DatasetEvaluation. Gathering dataset statistics.
Current status: FeaturesGeneration. Generating features for the dataset.
Current status: DatasetFeaturizationCompleted. Completed featurizing the dataset.
Current status: DatasetCrossValidationSplit. Generating individually featurized CV splits.
Current status: ModelSelection. Beginning model selection.

****************************************************************************************************
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   StandardScalerWrapper RandomForest             0:00:16       0.8746    0.8746
         1   MinMaxScaler RandomForest                      0:00:15       0.9468    0.9468
         2   StandardScalerWrapper ExtremeRandomTrees       0:00:09       0.9303    0.9468
         3   StandardScalerWrapper LightGBM                 0:00:10       0.9424    0.9468
         4   RobustScaler DecisionTree                      0:00:09       0.9449    0.9468
         5   StandardScalerWrapper LassoLars                0:00:09       0.9440    0.9468
         6   StandardScalerWrapper LightGBM                 0:00:10       0.9282    0.9468
         7   StandardScalerWrapper RandomForest             0:00:12       0.8946    0.9468
         8   StandardScalerWrapper LassoLars                0:00:16       0.9439    0.9468
         9   MinMaxScaler ExtremeRandomTrees                0:00:35       0.9199    0.9468
        10   RobustScaler ExtremeRandomTrees                0:00:19       0.9411    0.9468
        11   StandardScalerWrapper ExtremeRandomTrees       0:00:13       0.9077    0.9468
        12   StandardScalerWrapper LassoLars                0:00:15       0.9433    0.9468
        13   MinMaxScaler ExtremeRandomTrees                0:00:14       0.9186    0.9468
        14   RobustScaler RandomForest                      0:00:10       0.8810    0.9468
        15   StandardScalerWrapper LassoLars                0:00:55       0.9433    0.9468
        16   StandardScalerWrapper ExtremeRandomTrees       0:00:13       0.9026    0.9468
        17   StandardScalerWrapper RandomForest             0:00:13       0.9140    0.9468
        18   VotingEnsemble                                 0:00:23       0.9471    0.9471
        19   StackEnsemble                                  0:00:27       0.9463    0.9471

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

Просмотрите результаты автоматического обучения с помощью мини-приложения Jupyter.Explore the results of automatic training with a Jupyter widget. Мини-приложение позволяет просматривать график и таблицу всех отдельных итераций выполнения, а также метрики и метаданные точности обучения.The widget allows you to see a graph and table of all individual run iterations, along with training accuracy metrics and metadata. Кроме того, с помощью раскрывающегося списка вы можете выполнить фильтрацию по метрикам точности, отличным от основной.Additionally, you can filter on different accuracy metrics than your primary metric with the dropdown selector.

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

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

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

Выберите наиболее эффективную модель из итераций.Select the best model from your iterations. Функция get_output возвращает лучшее выполнение и соответствующую модель для последнего соответствующего вызова.The get_output function 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 data set 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 data set. Распечатайте первые 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])

Вычислите значение root mean squared error результатов.Calculate the root mean squared error of the results. Преобразуйте кадр данных y_test в список для сравнения с прогнозируемыми значениями.Convert the y_test dataframe 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

y_actual = y_test.values.flatten().tolist()
rmse = sqrt(mean_squared_error(y_actual, y_predict))
rmse

Чтобы вычислить среднюю абсолютную погрешность в процентах (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 data sets. Эта метрика вычисляет абсолютное отклонение между каждой парой прогнозируемого и фактического значения, а затем суммирует все отклонения.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.14353867606052823

Model Accuracy:
0.8564613239394718

Из двух метрик точности прогнозирования вы видите, что модель достаточно хороша в прогнозировании тарифов на такси на основе функций набора данных, обычно в пределах + - 4,00 доллара США и приблизительной погрешностью 15%.From the two prediction accuracy metrics, you see that the model is fairly good at predicting taxi fares from the data set's features, typically within +- $4.00, and approximately 15% error.

Традиционный процесс разработки модели машинного обучения является очень ресурсоемким и требует значительных предметных знаний и времени для выполнения десятков моделей и сравнения их результатов.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.Do not complete this section if you plan on running other Azure Machine Learning tutorials.

Остановка работы виртуальной машины для записных книжекStop the Notebook VM

Если вы использовали вычислительный экземпляр или виртуальную машину для записных книжек, завершите работу неиспользуемой виртуальной машины, чтобы сократить расходы.If you used a compute instance or Notebook VM, stop the VM when you are not using it to reduce cost.

  1. В своей рабочей области выберите Вычисление.In your workspace, select Compute.

  2. Выберите пользователя из списка.From the list, select the VM.

  3. Выберите Остановить.Select Stop.

  4. Когда вам снова понадобится использовать сервер, выберите Запустить.When you're ready to use the server again, select Start.

Удаление всех ресурсовDelete everything

Если вы не планируете использовать созданные ресурсы, удалите их, чтобы с вас не взималась плата.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.
  2. В списке выберите созданную группу ресурсов.From the list, select the resource group you created.
  3. Выберите Удалить группу ресурсов.Select Delete resource group.
  4. Введите имя группы ресурсов.Enter the resource group name. Теперь щелкните Удалить.Then select Delete.

Вы также можете сохранить группу ресурсов, но удалить одну рабочую область.You can also keep the resource group but delete a single workspace. Отобразите свойства рабочей области и нажмите кнопку Удалить.Display the workspace properties and 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.