Bagikan melalui


Melatih model regresi dengan ML otomatis dan Python (SDK v1)

BERLAKU UNTUK: Python SDK azureml v1

Dalam artikel ini, Anda mempelajari cara melatih model regresi dengan Azure Pembelajaran Mesin Python SDK dengan menggunakan Azure Pembelajaran Mesin Automated ML. Model regresi memprediksi tarif penumpang untuk taksi yang beroperasi di New York City (NYC). Anda menulis kode dengan Python SDK untuk mengonfigurasi ruang kerja dengan data yang disiapkan, melatih model secara lokal dengan parameter kustom, dan menjelajahi hasilnya.

Proses ini menerima data pelatihan dan pengaturan konfigurasi. Ini secara otomatis melakukan iterasi melalui kombinasi metode normalisasi/standardisasi fitur yang berbeda, model, dan pengaturan hiperparameter untuk tiba di model terbaik. Diagram berikut mengilustrasikan alur proses untuk pelatihan model regresi:

Diagram yang mengilustrasikan alur proses untuk pelatihan model regresi yang dijelaskan dalam artikel.

Prasyarat

  • Langganan Azure. Anda dapat membuat akun gratis atau berbayar Azure Pembelajaran Mesin.

  • Ruang kerja atau instans komputasi Azure Pembelajaran Mesin. Untuk menyiapkan sumber daya ini, lihat Mulai Cepat: Mulai menggunakan Azure Pembelajaran Mesin.

  • Dapatkan data sampel yang disiapkan untuk latihan tutorial dengan memuat buku catatan ke ruang kerja Anda:

    1. Buka ruang kerja Anda di studio Azure Pembelajaran Mesin, pilih Buku Catatan, lalu pilih tab Sampel.

    2. Dalam daftar notebook, perluas >sampel SDK v1>tutorial>regresi-automl-nyc-taxi-data node.

    3. Pilih buku catatan regresi-automated-ml.ipynb.

    4. Untuk menjalankan setiap sel buku catatan sebagai bagian dari tutorial ini, pilih Kloning file ini.

    Pendekatan alternatif: Jika mau, Anda dapat menjalankan latihan tutorial di lingkungan lokal. Tutorial ini tersedia di repositori Azure Pembelajaran Mesin Notebooks di GitHub. Untuk pendekatan ini, ikuti langkah-langkah berikut untuk mendapatkan paket yang diperlukan:

    1. Instal klien automl lengkap.

    2. Jalankan pip install azureml-opendatasets azureml-widgets perintah pada komputer lokal Anda untuk mendapatkan paket yang diperlukan.

Mengunduh dan menyiapkan data

Paket Open Datasets berisi kelas yang mewakili setiap sumber data (seperti NycTlcGreen) untuk memfilter parameter tanggal dengan mudah sebelum mengunduh.

Kode berikut mengimpor paket yang diperlukan:

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

Langkah pertama adalah membuat dataframe untuk data taksi. Saat Anda bekerja di lingkungan non-Spark, paket Open Datasets memungkinkan pengunduhan hanya satu bulan data pada satu waktu dengan kelas tertentu. Pendekatan ini membantu menghindari MemoryError masalah yang dapat terjadi dengan himpunan data besar.

Untuk mengunduh data taksi, ambil satu bulan secara berulang pada satu waktu. Sebelum Anda menambahkan kumpulan data berikutnya ke green_taxi_df dataframe, sampel 2.000 rekaman secara acak dari setiap bulan, lalu pratinjau data. Pendekatan ini membantu menghindari kembungnya dataframe.

Kode berikut membuat dataframe, mengambil data, dan memuatnya ke dalam dataframe:

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)

Tabel berikut ini memperlihatkan banyak kolom nilai dalam data taksi sampel:

vendorID lpepPickupDatetime lpepDropoffDatetime passengerCount tripDistance puLocationId doLocationId pickupLongitude pickupLatitude dropoffLongitude ... paymentType fareAmount extra mtaTax improvementSurcharge tipAmount tollsAmount ehailFee totalAmount tripType
2 2015-01-30 18:38:09 2015-01-30 19:01:49 1 1.88 Tidak Tidak -73.996155 40.690903 -73.964287 ... 1 15.0 1.0 0,5 0,3 4.00 0.0 Tidak 20.80 1.0
1 2015-01-17 23:21:39 2015-01-17 23:35:16 1 2.70 Tidak Tidak -73.978508 40.687984 -73.955116 ... 1 11.5 0,5 0,5 0,3 2.55 0.0 Tidak 15.35 1.0
2 2015-01-16 01:38:40 2015-01-16 01:52:55 1 3.54 Tidak Tidak -73.957787 40.721779 -73.963005 ... 1 13,5 0,5 0,5 0,3 2.80 0.0 Tidak 17.60 1.0
2 2015-01-04 17:09:26 2015-01-04 17:16:12 1 1 Tidak Tidak -73.919914 40.826023 -73.904839 ... 2 6.5 0.0 0,5 0,3 0.00 0.0 Tidak 7,30 1.0
1 2015-01-14 10:10:57 2015-01-14 10:33:30 1 5.10 Tidak Tidak -73.943710 40.825439 -73.982964 ... 1 18.5 0.0 0,5 0,3 3.85 0.0 Tidak 23.15 1.0
2 2015-01-19 18:10:41 2015-01-19 18:32:20 1 7.41 Tidak Tidak -73.940918 40.839714 -73.994339 ... 1 24,0 0.0 0,5 0,3 4,80 0.0 Tidak 29.60 1.0
2 2015-01-01 15:44:21 2015-01-01 15:50:16 1 1.03 Tidak Tidak -73.985718 40.685646 -73.996773 ... 1 6.5 0.0 0,5 0,3 1.30 0.0 Tidak 8.60 1.0
2 2015-01-12 08:01:21 2015-01-12 08:14:52 5 2.94 Tidak Tidak -73.939865 40.789822 -73.952957 ... 2 12.5 0.0 0,5 0,3 0.00 0.0 Tidak 13.30 1.0
1 2015-01-16 21:54:26 2015-01-16 22:12:39 1 3 Tidak Tidak -73.957939 40.721928 -73.926247 ... 1 14,0 0,5 0,5 0,3 2.00 0.0 Tidak 17.30 1.0
2 2015-01-06 06:34:53 2015-01-06 06:44:23 1 2,31 Tidak Tidak -73.943825 40.810257 -73.943062 ... 1 10.0 0.0 0,5 0,3 2.00 0.0 Tidak 12,80 1.0

Sangat membantu untuk menghapus beberapa kolom yang tidak Anda butuhkan untuk pelatihan atau pembuatan fitur lainnya. Misalnya, Anda dapat menghapus kolom lpepPickupDatetime karena ML Otomatis secara otomatis menangani fitur berbasis waktu.

Kode berikut menghapus 14 kolom dari data sampel:

columns_to_remove = ["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)

Membersihkan data

Langkah selanjutnya adalah membersihkan data.

Kode berikut menjalankan describe() fungsi pada kerangka data baru untuk menghasilkan statistik ringkasan untuk setiap bidang:

green_taxi_df.describe()

Tabel berikut ini memperlihatkan statistik ringkasan untuk bidang yang tersisa dalam data sampel:

vendorID passengerCount tripDistance pickupLongitude pickupLatitude dropoffLongitude dropoffLatitude totalAmount
count 24000.00 24000.00 24000.00 24000.00 24000.00 24000.00 24000.00 24000.00
mean 1.777625 1.373625 2.893981 -73.827403 40.689730 -73.819670 40.684436 14.892744
Std 0.415850 1.046180 3.072343 2.821767 1.556082 2.901199 1.599776 12.339749
min 1 0.00 0.00 -74.357101 0.00 -74.342766 0.00 -120.80
25% 2.00 1 1,05 -73.959175 40.699127 -73.966476 40.699459 8.00
50% 2.00 1 1.93 -73.945049 40.746754 -73.944221 40.747536 11.30
75% 2.00 1 3.70 -73.917089 40.803060 -73.909061 40.791526 17.80
max 2.00 8.00 154.28 0.00 41.109089 0.00 40.982826 425.00

Statistik ringkasan mengungkapkan beberapa bidang yang merupakan outlier, yang merupakan nilai yang mengurangi akurasi model. Untuk mengatasi masalah ini, filter bidang garis lintang/bujur (lat/panjang) sehingga nilai berada dalam batas area Manhattan. Pendekatan ini memfilter perjalanan taksi atau perjalanan yang lebih lama yang merupakan outlier sehubungan dengan hubungan mereka dengan fitur lain.

Selanjutnya, filter tripDistance bidang untuk nilai yang lebih besar dari nol tetapi kurang dari 31 mil (jarak hasrsine antara dua pasangan lat/panjang). Teknik ini menghilangkan perjalanan outlier panjang yang memiliki biaya perjalanan yang tidak konsisten.

Terakhir, totalAmount bidang memiliki nilai negatif untuk tarif taksi, yang tidak masuk akal dalam konteks model. Bidang ini passengerCount juga berisi data buruk di mana nilai minimum adalah nol.

Kode berikut memfilter anomali nilai ini dengan menggunakan fungsi kueri. Kode kemudian menghapus beberapa kolom terakhir yang tidak diperlukan untuk pelatihan:

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)

Langkah terakhir dalam urutan ini adalah memanggil describe() fungsi lagi pada data untuk memastikan pembersihan berfungsi seperti yang diharapkan. Anda sekarang memiliki serangkaian data taksi, liburan, dan cuaca yang disiapkan dan dibersihkan untuk digunakan untuk pelatihan model pembelajaran mesin:

final_df.describe()

Konfigurasi ruang kerja

Buat objek ruang kerja dari ruang kerja yang sudah ada. Ruang kerja adalah kelas yang menerima informasi langganan dan sumber daya Azure Anda. Ruang kerja juga membuat sumber daya cloud untuk memantau dan melacak eksekusi model Anda.

Kode berikut memanggil Workspace.from_config() fungsi untuk membaca file config.json dan memuat detail autentikasi ke dalam objek bernama ws.

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

Objek ws digunakan di seluruh kode lainnya dalam tutorial ini.

Membagi data menjadi kumpulan pelatihan dan pengujian

Pisahkan data menjadi set pelatihan dan pengujian dengan menggunakan train_test_split fungsi di pustaka scikit-learn . Fungsi ini memisahkan data ke dalam kumpulan data x (fitur) untuk pelatihan model dan kumpulan data y (nilai yang akan diprediksi) untuk pengujian.

Parameter test_size menentukan persentase data yang akan dialokasikan ke pengujian. Parameter random_state menetapkan seed ke generator acak sehingga pemisahan pengujian dan pelatihan Anda bersifat deterministik.

Kode berikut memanggil train_test_split fungsi untuk memuat himpunan data x dan y:

from sklearn.model_selection import train_test_split

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

Tujuan dari langkah ini adalah untuk menyiapkan poin data untuk menguji model jadi yang tidak digunakan untuk melatih model. Poin-poin ini digunakan untuk mengukur akurasi sejati. Model yang terlatih dengan baik adalah model yang dapat membuat prediksi yang akurat dari data yang tidak terlihat. Anda sekarang memiliki data yang disiapkan untuk melatih otomatis model pembelajaran mesin.

Melatih model secara otomatis

Untuk melatih model secara otomatis, ikuti langkah-langkah berikut:

  1. Tentukan pengaturan untuk eksperimen yang dijalankan. Lampirkan data pelatihan Anda ke konfigurasi, dan ubah pengaturan yang mengontrol proses pelatihan.

  2. Kirim eksperimen untuk penyetelan model. Setelah Anda mengirimkan eksperimen, proses berulang melalui algoritma pembelajaran mesin yang berbeda dan pengaturan hiperparameter, mematuhi batasan yang Anda tentukan. Proses ini memilih model yang paling cocok dengan mengoptimalkan metrik akurasi.

Menentukan pengaturan pelatihan

Tentukan parameter eksperimen dan pengaturan model untuk pelatihan. Lihat daftar lengkap pengaturan. Mengirimkan eksperimen dengan pengaturan default ini membutuhkan waktu sekitar 5-20 menit. Untuk mengurangi waktu proses, kurangi experiment_timeout_hours parameter .

Properti Nilai dalam tutorial ini Deskripsi
iteration_timeout_minutes 10 Batas waktu dalam menit untuk setiap iterasi. Tingkatkan nilai ini untuk set data yang lebih besar yang membutuhkan lebih banyak waktu untuk setiap iterasi.
experiment_timeout_hours 0,3 Jumlah waktu maksimum dalam jam yang diperlukan semua iterasi sebelum eksperimen diakhiri.
enable_early_stopping Benar Bendera untuk mengaktifkan penghentian dini jika skor tidak membaik dalam jangka pendek.
primary_metric spearman_correlation Metrik yang ingin Anda optimalkan. Model yang paling sesuai dipilih berdasarkan metrik ini.
featurization auto Nilai otomatis memungkinkan eksperimen untuk memproses data input sebelumnya, termasuk menangani data yang hilang, mengonversi teks menjadi numerik, dan sebagainya.
verbosity logging.INFO Mengontrol tingkat pencatatan.
n_cross_validations 5 Jumlah pemisahan validasi silang yang akan dilakukan saat data validasi tidak ditentukan.

Kode berikut mengirimkan eksperimen:

import logging

automl_settings = {
   "iteration_timeout_minutes": 10,
   "experiment_timeout_hours": 0.3,
   "enable_early_stopping": True,
   "primary_metric": 'spearman_correlation',
   "featurization": 'auto',
   "verbosity": logging.INFO,
   "n_cross_validations": 5
}

Kode berikut memungkinkan Anda menggunakan pengaturan pelatihan yang **kwargs ditentukan sebagai parameter ke AutoMLConfig objek. Selain itu, Anda menentukan data pelatihan dan jenis model, yang dalam regression hal ini.

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)

Catatan

Langkah-langkah pra-pemrosesan ML otomatis (normalisasi fitur, menangani data yang hilang, mengonversi teks ke numerik, dan sebagainya) menjadi bagian dari model yang mendasarinya. Saat Anda menggunakan model untuk prediksi, langkah-langkah pra-pemrosesan yang sama yang diterapkan selama pelatihan diterapkan ke data input Anda secara otomatis.

Melatih model regresi otomatis

Buat objek eksperimen di ruang kerja Anda. Eksperimen berfungsi sebagai kontainer untuk pekerjaan individu Anda. Teruskan objek yang ditentukan automl_config ke eksperimen, dan atur output ke True untuk melihat kemajuan selama pekerjaan.

Setelah Anda memulai eksperimen, pembaruan output yang ditampilkan langsung saat eksperimen berjalan. Untuk setiap iterasi, Anda akan melihat jenis model, durasi eksekusi, dan akurasi pelatihan. Bidang BEST melacak skor pelatihan terbaik yang berjalan berdasarkan jenis metrik Anda:

from azureml.core.experiment import Experiment
experiment = Experiment(ws, "Tutorial-NYCTaxi")
local_run = experiment.submit(automl_config, show_output=True)

Berikut output-nya:

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

Menjelajahi hasil

Jelajahi hasil pelatihan otomatis dengan widget Jupyter. Widget memungkinkan Anda untuk melihat grafik dan tabel dari semua perulangan pekerjaan individual, bersama dengan metrik akurasi pelatihan dan metadata. Selain itu, Anda dapat memfilter metrik akurasi yang berbeda dari metrik utama dengan pemilih dropdown.

Kode berikut menghasilkan grafik untuk menjelajahi hasilnya:

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

Detail eksekusi untuk widget Jupyter:

Cuplikan layar yang memperlihatkan detail eksekusi widget Jupyter di studio Azure Pembelajaran Mesin.

Bagan plot untuk widget Jupyter:

Cuplikan layar yang memperlihatkan diagram plot widget Jupyter di studio Azure Pembelajaran Mesin.

Mengambil model terbaik

Kode berikut memungkinkan Anda memilih model terbaik dari iterasi Anda. Fungsi get_output mengembalikan proses terbaik dan model yang tepat untuk pemanggilan terbaik terakhir. Dengan menggunakan kelebihan beban pada get_output fungsi, Anda dapat mengambil model terbaik yang dijalankan dan dipasang untuk metrik yang dicatat atau iterasi tertentu.

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

Menguji akurasi model terbaik

Gunakan model terbaik untuk menjalankan prediksi pada kumpulan data pengujian guna memprediksi tarif taksi. Fungsi ini predict menggunakan model terbaik dan memprediksi nilai y, biaya perjalanan, dari himpunan x_test data.

Kode berikut mencetak 10 nilai biaya pertama yang diprediksi dari himpunan y_predict data:

y_test = x_test.pop("totalAmount")

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

Hitung root mean squared error hasilnya. Konversikan y_test dataframe menjadi daftar dan bandingkan dengan nilai yang diprediksi. Fungsi ini mean_squared_error mengambil dua array nilai dan menghitung kesalahan kuadrat rata-rata di antaranya. Mengambil akar kuadrat dari hasil memberikan kesalahan dalam unit yang sama dengan variabel y, biaya. Metrik ini menunjukkan kira-kira seberapa jauh prediksi tarif taksi dari nilai tarif aktual.

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

Jalankan kode berikut untuk menghitung kesalahan persentase absolut rata-rata (MAPE) dengan menggunakan kumpulan data y_actual dan y_predict penuh. Metrik ini menghitung perbedaan absolut antara setiap nilai yang diprediksi dan nilai sesungguhnya, serta menjumlahkan semua perbedaan. Lalu mengekspresikan jumlah tersebut sebagai persentase dari total nilai sesungguhnya.

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)

Berikut output-nya:

Model MAPE:
0.14353867606052823

Model Accuracy:
0.8564613239394718

Dari dua metrik akurasi prediksi, Anda melihat bahwa model ini cukup baik dalam memprediksi tarif taksi dari fitur kumpulan data, biasanya dalam +- $4.00, dan sekitar 15% kesalahan.

Proses pengembangan model pembelajaran mesin tradisional sangat intensif sumber daya. Ini membutuhkan pengetahuan domain yang signifikan dan investasi waktu untuk menjalankan dan membandingkan hasil puluhan model. Menggunakan pembelajaran mesin otomatis adalah cara yang bagus untuk menguji dengan cepat banyak model berbeda untuk skenario Anda.

Membersihkan sumber daya

Jika Anda tidak berencana untuk mengerjakan tutorial Azure Pembelajaran Mesin lainnya, selesaikan langkah-langkah berikut untuk menghapus sumber daya yang tidak lagi Anda butuhkan.

Menghentikan komputasi

Jika Anda menggunakan komputasi, Anda dapat menghentikan komputer virtual saat tidak menggunakannya dan mengurangi biaya Anda:

  1. Buka ruang kerja Anda di studio Azure Pembelajaran Mesin, dan pilih Komputasi.

  2. Dalam daftar, pilih komputasi yang ingin Anda hentikan, lalu pilih Hentikan.

Ketika Anda siap untuk menggunakan komputasi lagi, Anda dapat menghidupkan ulang komputer virtual.

Menghapus sumber daya lain

Jika Anda tidak berencana untuk menggunakan sumber daya yang Anda buat dalam tutorial ini, Anda dapat menghapusnya dan menghindari dikenakan biaya lebih lanjut.

Ikuti langkah-langkah ini untuk menghapus grup sumber daya dan semua sumber daya:

  1. Di portal Microsoft Azure, buka Grup sumber daya.

  2. Dalam daftar, pilih grup sumber daya yang Anda buat dalam tutorial ini, lalu pilih Hapus grup sumber daya.

  3. Pada perintah konfirmasi, masukkan nama grup sumber daya, lalu pilih Hapus.

Jika Anda ingin menyimpan grup sumber daya, dan menghapus satu ruang kerja saja, ikuti langkah-langkah berikut:

  1. Di portal Azure, buka grup sumber daya yang berisi ruang kerja yang ingin Anda hapus.

  2. Pilih ruang kerja, pilih Properti, lalu pilih Hapus.

Langkah selanjutnya