Унифицированный аналитический инструмент для приема, вычисления или обработки данных, хранения данных, расширенной аналитики или машинного обучения и отображения всего в одном инструменте. Платформа сквозной аналитики данных, созданная для масштабирования и простоты использования.

Расширенная аналитика Synapse

Synapse может запускать код на основе искры, что приводит к разработке данных или разработке функций, а также к машинному обучению. В этой статье описывается, как обучить модель машинного обучения с помощью искры в синапсе.

Предпосылка

  • Создайте службы машинного обучения Azure. Выберите регион так же, как для аналитики синапсов.
  • Создайте репозиторий на гитхабе
  • Подключиться к репозиторию в разделе управления
  • Создайте блокнот pyspark.
  • Запустите каждый пакетный оператор в отдельной ячейке в блокноте.

Настройка информации о рабочем пространстве

  • Давайте настроим рабочую область для доступа
  • Нужен идентификатор подписки, имя рабочей области и имя группы ресурсов.
  • Давайте импортируем рабочее пространство
from azureml.core import Workspace
import azureml.core 
print(azureml.core.VERSION)
  • когда я тестировал, это была 1.16.0
  • Настроить рабочее пространство
ws = Workspace.get(name="wsname", subscription_id='subid', resource_group='rgname')
print('Workspace name: ' + ws.name, 'Azure region: ' + ws.location, 'Subscription id: ' + ws.subscription_id, 'Resource group: ' + ws.resource_group, sep = '\n')
ws.write_config(path='.azureml')
from azureml.core import Workspace
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException
ws = Workspace.from_config() # This automatically looks for a directory .azureml
# Choose a name for your CPU cluster
cpu_cluster_name = "cpu-cluster"
# Verify that the cluster does not exist already
try:
cpu_cluster = ComputeTarget(workspace=ws, name=cpu_cluster_name)
print('Found existing cluster, use it.')
except ComputeTargetException:
compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',idle_seconds_before_scaledown=2400,min_nodes=0,max_nodes=4)
cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
cpu_cluster.wait_for_completion(show_output=True)

Получите набор данных для модели машинного обучения

from azureml.opendatasets import NycTlcGreen
import pandas as pd
from datetime import datetime
from dateutil.relativedelta import relativedelta
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)
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)
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)
green_taxi_df.describe()
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)
final_df.describe()

Создать модель машинного обучения

from sklearn.model_selection import train_test_split

x_train, x_test = train_test_split(final_df, test_size=0.2, random_state=223)
import logging

automl_settings = {
    "iteration_timeout_minutes": 2,
    "experiment_timeout_hours": 0.3,
    "enable_early_stopping": True,
    "primary_metric": 'spearman_correlation',
    "featurization": 'auto',
    "verbosity": logging.INFO,
    "n_cross_validations": 5
}
from azureml.train.automl import AutoMLConfig

automl_config = AutoMLConfig(task='regression',
                             debug_log='automated_ml_errors.log',
                             training_data=x_train,
                             label_column_name="totalAmount",
                             **automl_settings)
from azureml.core.experiment import Experiment
experiment = Experiment(ws, "taxi-experiment-fromsynapsews")
local_run = experiment.submit(automl_config, show_output=True)
best_run, fitted_model = local_run.get_output()
print(best_run)
print(fitted_model)
y_test = x_test.pop("totalAmount")

y_predict = fitted_model.predict(x_test)
print(y_predict[:10])
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 и точность

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
Output:
Model MAPE: 0.1393469862795163 Model Accuracy: 0.8606530137204838

Первоначально опубликовано на https://github.com.