Azure Machine Learning ile scikit-learn modellerini uygun ölçekte eğitin

ŞUNLAR IÇIN GEÇERLIDIR: Python SDK'sı azure-ai-ml v2 (geçerli)

Bu makalede, Azure Machine Learning Python SDK v2 ile scikit-learn eğitim betiklerinizi çalıştırmayı öğrenin.

Bu makaledeki örnek betikler, scikit-learn'ün iris veri kümesini temel alan bir makine öğrenmesi modeli oluşturmak üzere iris çiçek görüntülerini sınıflandırmak için kullanılır.

İster sıfırdan bir makine öğrenmesi scikit-learn modeli eğitin ister mevcut bir modeli buluta taşıyın, Azure Machine Learning'i kullanarak esnek bulut işlem kaynaklarını kullanarak açık kaynak eğitim işlerinin ölçeğini genişletebilirsiniz. Azure Machine Learning ile üretim sınıfı modeller oluşturabilir, dağıtabilir, sürüm oluşturabilir ve izleyebilirsiniz.

Önkoşullar

Bu makalenin kodunu bir Azure Machine Learning işlem örneğinde veya kendi Jupyter Notebook'unuzda çalıştırabilirsiniz.

  • Azure Machine Learning işlem örneği

    • İşlem örneği oluşturmaya başlamak için Kaynak oluşturma işlemini tamamlayın. Her işlem örneği, SDK ile önceden yüklenmiş ayrılmış bir not defteri sunucusu ve not defterleri örnek deposu içerir.
    • Azure Machine Learning stüdyosu not defteri sekmesini seçin. Örnekler eğitim klasöründe şu dizine giderek tamamlanmış ve genişletilmiş bir not defteri bulun: v2 > sdk > işleri > tek adımlı > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn.
    • Bu öğreticiyi tamamlamak için örnek eğitim klasöründeki önceden doldurulmuş kodu kullanabilirsiniz.
  • Jupyter not defteri sunucunuz.

İşi ayarlama

Bu bölüm, gerekli Python paketlerini yükleyerek, bir çalışma alanına bağlanarak, komut işini çalıştırmak için işlem kaynağı oluşturarak ve işi çalıştırmak için bir ortam oluşturarak işi eğitim için ayarlar.

Çalışma alanına Bağlan

İlk olarak Azure Machine Learning çalışma alanınıza bağlanmanız gerekir. Azure Machine Learning çalışma alanı, hizmetin en üst düzey kaynağıdır. Azure Machine Learning'i kullanırken oluşturduğunuz tüm yapıtlarla çalışmak için merkezi bir yer sağlar.

Çalışma alanına erişmek için kullanıyoruz DefaultAzureCredential . Bu kimlik bilgisi Çoğu Azure SDK kimlik doğrulama senaryolarını işleyebilecek durumda olmalıdır.

Sizin için işe yaramazsa DefaultAzureCredential , bkz azure-identity reference documentation . veya Set up authentication daha fazla kullanılabilir kimlik bilgisi için.

# Handle to the workspace
from azure.ai.ml import MLClient

# Authentication package
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()

Oturum açmak ve kimlik doğrulaması yapmak için tarayıcı kullanmayı tercih ediyorsanız, aşağıdaki koddaki açıklamaları kaldırmanız ve bunun yerine kullanmanız gerekir.

# Handle to the workspace
# from azure.ai.ml import MLClient

# Authentication package
# from azure.identity import InteractiveBrowserCredential
# credential = InteractiveBrowserCredential()

Ardından Abonelik Kimliğinizi, Kaynak Grubu adınızı ve çalışma alanı adınızı sağlayarak çalışma alanına yönelik bir tanıtıcı alın. Bu parametreleri bulmak için:

  1. Çalışma alanı adınızın Azure Machine Learning stüdyosu araç çubuğunun sağ üst köşesine bakın.
  2. Kaynak Grubunuzu ve Abonelik Kimliğinizi göstermek için çalışma alanı adınızı seçin.
  3. Kaynak Grubu ve Abonelik Kimliği değerlerini koda kopyalayın.
# Get a handle to the workspace
ml_client = MLClient(
    credential=credential,
    subscription_id="<SUBSCRIPTION_ID>",
    resource_group_name="<RESOURCE_GROUP>",
    workspace_name="<AML_WORKSPACE_NAME>",
)

Bu betiği çalıştırmanın sonucu, diğer kaynakları ve işleri yönetmek için kullandığınız bir çalışma alanı tanıtıcısıdır.

Not

Oluşturma MLClient , istemciyi çalışma alanına bağlamaz. İstemci başlatması gecikmelidir ve ilk kez çağrı yapmasını bekler. Bu makalede, işlem oluşturma sırasında bu durum ortaya çıkacaktır.

İşlem kaynağı oluşturma

Azure Machine Learning'in bir işi çalıştırmak için bir işlem kaynağına ihtiyacı vardır. Bu kaynak, Linux veya Windows işletim sistemine sahip tek veya çok düğümlü makineler ya da Spark gibi belirli bir işlem dokusu olabilir.

Aşağıdaki örnek betikte bir Linux compute clustersağlıyoruz. VM boyutlarının Azure Machine Learning pricing ve fiyatlarının tam listesinin sayfasını görebilirsiniz. Bu örnek için yalnızca temel bir kümeye ihtiyacımız var; bu nedenle Azure Machine Learning işlem oluşturmak için 2 vCPU çekirdeği ve 7 GB RAM içeren bir Standard_DS3_v2 modeli seçiyoruz.

from azure.ai.ml.entities import AmlCompute

# Name assigned to the compute cluster
cpu_compute_target = "cpu-cluster"

try:
    # let's see if the compute target already exists
    cpu_cluster = ml_client.compute.get(cpu_compute_target)
    print(
        f"You already have a cluster named {cpu_compute_target}, we'll reuse it as is."
    )

except Exception:
    print("Creating a new cpu compute target...")

    # Let's create the Azure ML compute object with the intended parameters
    cpu_cluster = AmlCompute(
        name=cpu_compute_target,
        # Azure ML Compute is the on-demand VM service
        type="amlcompute",
        # VM Family
        size="STANDARD_DS3_V2",
        # Minimum running nodes when there is no job running
        min_instances=0,
        # Nodes in cluster
        max_instances=4,
        # How many seconds will the node running after the job termination
        idle_time_before_scale_down=180,
        # Dedicated or LowPriority. The latter is cheaper but there is a chance of job termination
        tier="Dedicated",
    )

    # Now, we pass the object to MLClient's create_or_update method
    cpu_cluster = ml_client.compute.begin_create_or_update(cpu_cluster).result()

print(
    f"AMLCompute with name {cpu_cluster.name} is created, the compute size is {cpu_cluster.size}"
)

İş ortamı oluşturma

Azure Machine Learning işini çalıştırmak için bir ortamınız olmalıdır. Azure Machine Learning ortamı , işlem kaynağınızda makine öğrenmesi eğitim betiğinizi çalıştırmak için gereken bağımlılıkları (yazılım çalışma zamanı ve kitaplıklar gibi) kapsüller. Bu ortam, yerel makinenizdeki python ortamına benzer.

Azure Machine Learning, seçilmiş (veya hazır) bir ortam kullanmanıza veya Docker görüntüsü veya Conda yapılandırması kullanarak özel bir ortam oluşturmanıza olanak tanır. Bu makalede, Conda YAML dosyası kullanarak işleriniz için özel bir ortam oluşturacaksınız.

Özel ortam oluşturma

Özel ortamınızı oluşturmak için Conda bağımlılıklarınızı bir YAML dosyasında tanımlarsınız. İlk olarak, dosyayı depolamak için bir dizin oluşturun. Bu örnekte dizinine envadını verdik.

import os

dependencies_dir = "./env"
os.makedirs(dependencies_dir, exist_ok=True)

Ardından dosyayı dependencies dizininde oluşturun. Bu örnekte dosyasını conda.ymladlandırdık.

%%writefile {dependencies_dir}/conda.yaml
name: sklearn-env
channels:
  - conda-forge
dependencies:
  - python=3.8
  - pip=21.2.4
  - scikit-learn=0.24.2
  - scipy=1.7.1
  - pip:  
    - azureml-mlflow==1.42.0
    - mlflow-skinny==2.3.2

Belirtim, işinizde kullandığınız bazı normal paketleri (numpy ve pip gibi) içerir.

Ardından, bu özel ortamı oluşturmak ve çalışma alanınıza kaydetmek için YAML dosyasını kullanın. Ortam, çalışma zamanında bir Docker kapsayıcısına paketlenmiş durumdadır.

from azure.ai.ml.entities import Environment

custom_env_name = "sklearn-env"

job_env = Environment(
    name=custom_env_name,
    description="Custom environment for sklearn image classification",
    conda_file=os.path.join(dependencies_dir, "conda.yaml"),
    image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest",
)
job_env = ml_client.environments.create_or_update(job_env)

print(
    f"Environment with name {job_env.name} is registered to workspace, the environment version is {job_env.version}"
)

Ortam oluşturma ve kullanma hakkında daha fazla bilgi için bkz . Azure Machine Learning'de yazılım ortamları oluşturma ve kullanma.

[İsteğe bağlı] Scikit-Learn için Intel® Uzantısı ile özel ortam oluşturma

Intel donanımında scikit-learn betiklerinizi hızlandırmak mı istiyorsunuz? Conda yaml dosyanıza Scikit-Learn için Intel® Uzantısı eklemeyi deneyin ve yukarıda ayrıntılı olarak belirtilen sonraki adımları izleyin. Bu iyileştirmeleri nasıl etkinleştireceğini bu örnekte daha sonra göstereceğiz:

%%writefile {dependencies_dir}/conda.yaml
name: sklearn-env
channels:
  - conda-forge
dependencies:
  - python=3.8
  - pip=21.2.4
  - scikit-learn=0.24.2
  - scikit-learn-intelex
  - scipy=1.7.1
  - pip:  
    - azureml-mlflow==1.42.0
    - mlflow-skinny==2.3.2

Eğitim işinizi yapılandırma ve gönderme

Bu bölümde, sağladığımız bir eğitim betiğini kullanarak bir eğitim işinin nasıl çalıştırıldığını ele alacağız. Başlamak için, eğitim betiğini çalıştırmak için komutunu yapılandırarak eğitim işini oluşturursunuz. Ardından, Azure Machine Learning'de çalıştırılacak eğitim işini gönderirsiniz.

Eğitim betiğini hazırlama

Bu makalede train_iris.py eğitim betiğini sağladık. Uygulamada, herhangi bir özel eğitim betiğini olduğu gibi alabilmeniz ve kodunuzu değiştirmenize gerek kalmadan Azure Machine Learning ile çalıştırabilmeniz gerekir.

Not

Sağlanan eğitim betiği aşağıdakileri yapar:

  • Azure Machine Learning çalıştırmanızda bazı ölçümleri günlüğe kaydetmeyi gösterir;
  • kullanarak eğitim verilerini iris = datasets.load_iris()indirip ayıklar; ve
  • modeli eğitip kaydeder ve kaydeder.

Kendi verilerinizi kullanmak ve verilere erişmek için eğitim sırasında verileri kullanılabilir hale getirmek için bir işteki verileri okuma ve yazma bölümüne bakın.

Eğitim betiğini kullanmak için önce dosyayı depoladığınız bir dizin oluşturun.

import os

src_dir = "./src"
os.makedirs(src_dir, exist_ok=True)

Ardından, betik dosyasını kaynak dizinde oluşturun.

%%writefile {src_dir}/train_iris.py
# Modified from https://www.geeksforgeeks.org/multiclass-classification-using-scikit-learn/

import argparse
import os

# importing necessary libraries
import numpy as np

from sklearn import datasets
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split

import joblib

import mlflow
import mlflow.sklearn

def main():
    parser = argparse.ArgumentParser()

    parser.add_argument('--kernel', type=str, default='linear',
                        help='Kernel type to be used in the algorithm')
    parser.add_argument('--penalty', type=float, default=1.0,
                        help='Penalty parameter of the error term')

    # Start Logging
    mlflow.start_run()

    # enable autologging
    mlflow.sklearn.autolog()

    args = parser.parse_args()
    mlflow.log_param('Kernel type', str(args.kernel))
    mlflow.log_metric('Penalty', float(args.penalty))

    # loading the iris dataset
    iris = datasets.load_iris()

    # X -> features, y -> label
    X = iris.data
    y = iris.target

    # dividing X, y into train and test data
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

    # training a linear SVM classifier
    from sklearn.svm import SVC
    svm_model_linear = SVC(kernel=args.kernel, C=args.penalty)
    svm_model_linear = svm_model_linear.fit(X_train, y_train)
    svm_predictions = svm_model_linear.predict(X_test)

    # model accuracy for X_test
    accuracy = svm_model_linear.score(X_test, y_test)
    print('Accuracy of SVM classifier on test set: {:.2f}'.format(accuracy))
    mlflow.log_metric('Accuracy', float(accuracy))
    # creating a confusion matrix
    cm = confusion_matrix(y_test, svm_predictions)
    print(cm)

    registered_model_name="sklearn-iris-flower-classify-model"

    ##########################
    #<save and register model>
    ##########################
    # Registering the model to the workspace
    print("Registering the model via MLFlow")
    mlflow.sklearn.log_model(
        sk_model=svm_model_linear,
        registered_model_name=registered_model_name,
        artifact_path=registered_model_name
    )

    # # Saving the model to a file
    print("Saving the model via MLFlow")
    mlflow.sklearn.save_model(
        sk_model=svm_model_linear,
        path=os.path.join(registered_model_name, "trained_model"),
    )
    ###########################
    #</save and register model>
    ###########################
    mlflow.end_run()

if __name__ == '__main__':
    main()

[İsteğe bağlı] Intel® donanımında daha fazla performans için Scikit-Learn iyileştirmeleri için Intel Uzantısını etkinleştirme

Scikit-Learn için Intel® Uzantısı'nı yüklediyseniz (önceki bölümde gösterildiği gibi), aşağıda gösterildiği gibi betik dosyasının en üstüne iki kod satırı ekleyerek performans iyileştirmelerini etkinleştirebilirsiniz.

Scikit-Learn için Intel® Uzantısı hakkında daha fazla bilgi edinmek için paketin belgelerini ziyaret edin.

%%writefile {src_dir}/train_iris.py
# Modified from https://www.geeksforgeeks.org/multiclass-classification-using-scikit-learn/

import argparse
import os

# Import and enable Intel Extension for Scikit-learn optimizations
# where possible

from sklearnex import patch_sklearn
patch_sklearn()

# importing necessary libraries
import numpy as np


from sklearn import datasets
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split

import joblib

import mlflow
import mlflow.sklearn

def main():
    parser = argparse.ArgumentParser()

    parser.add_argument('--kernel', type=str, default='linear',
                        help='Kernel type to be used in the algorithm')
    parser.add_argument('--penalty', type=float, default=1.0,
                        help='Penalty parameter of the error term')

    # Start Logging
    mlflow.start_run()

    # enable autologging
    mlflow.sklearn.autolog()

    args = parser.parse_args()
    mlflow.log_param('Kernel type', str(args.kernel))
    mlflow.log_metric('Penalty', float(args.penalty))

    # loading the iris dataset
    iris = datasets.load_iris()

    # X -> features, y -> label
    X = iris.data
    y = iris.target

    # dividing X, y into train and test data
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

    # training a linear SVM classifier
    from sklearn.svm import SVC
    svm_model_linear = SVC(kernel=args.kernel, C=args.penalty)
    svm_model_linear = svm_model_linear.fit(X_train, y_train)
    svm_predictions = svm_model_linear.predict(X_test)

    # model accuracy for X_test
    accuracy = svm_model_linear.score(X_test, y_test)
    print('Accuracy of SVM classifier on test set: {:.2f}'.format(accuracy))
    mlflow.log_metric('Accuracy', float(accuracy))
    # creating a confusion matrix
    cm = confusion_matrix(y_test, svm_predictions)
    print(cm)

    registered_model_name="sklearn-iris-flower-classify-model"

    ##########################
    #<save and register model>
    ##########################
    # Registering the model to the workspace
    print("Registering the model via MLFlow")
    mlflow.sklearn.log_model(
        sk_model=svm_model_linear,
        registered_model_name=registered_model_name,
        artifact_path=registered_model_name
    )

    # # Saving the model to a file
    print("Saving the model via MLFlow")
    mlflow.sklearn.save_model(
        sk_model=svm_model_linear,
        path=os.path.join(registered_model_name, "trained_model"),
    )
    ###########################
    #</save and register model>
    ###########################
    mlflow.end_run()

if __name__ == '__main__':
    main()

Eğitim işini oluşturma

İşinizi çalıştırmak için gereken tüm varlıklara sahip olduğunuz için artık Azure Machine Learning Python SDK v2'yi kullanarak derlemenin zamanı geldi. İşi çalıştırmak için bir commandoluştururuz.

Azure Machine Learning command , eğitim kodunuzu bulutta yürütmek için gereken tüm ayrıntıları belirten bir kaynaktır. Bu ayrıntılar giriş ve çıkışları, kullanılacak donanım türünü, yüklenecek yazılımları ve kodunuzu çalıştırmayı içerir. , command tek bir komut yürütmeye ilişkin bilgileri içerir.

Komutu yapılandırma

Eğitim betiğini çalıştırmak ve istediğiniz görevleri gerçekleştirmek için genel amacı command kullanırsınız. Eğitim işinizin yapılandırma ayrıntılarını belirtmek için bir Command nesne oluşturun.

  • Bu komutun girişleri dönem sayısını, öğrenme hızını, momentum'ı ve çıkış dizinini içerir.
  • Parametre değerleri için:
    • bu komutu çalıştırmak için oluşturduğunuz işlem kümesini cpu_compute_target = "cpu-cluster" sağlayın;
    • Azure Machine Learning işini çalıştırmak için oluşturduğunuz özel ortamı sklearn-env sağlayın;
    • komut satırı eylemini yapılandırın; bu durumda, komut şeklindedir python train_iris.py. Komuttaki girişlere ve çıkışlara gösterimi aracılığıyla ${{ ... }} erişebilirsiniz; ve
    • görünen ad ve deneme adı gibi meta verileri yapılandırın; burada bir deneme, belirli bir projede yapılan tüm yinelemeler için bir kapsayıcıdır. Aynı deneme adı altında gönderilen tüm işler Azure Machine Learning stüdyosu'da yan yana listelenir.
from azure.ai.ml import command
from azure.ai.ml import Input

job = command(
    inputs=dict(kernel="linear", penalty=1.0),
    compute=cpu_compute_target,
    environment=f"{job_env.name}:{job_env.version}",
    code="./src/",
    command="python train_iris.py --kernel ${{inputs.kernel}} --penalty ${{inputs.penalty}}",
    experiment_name="sklearn-iris-flowers",
    display_name="sklearn-classify-iris-flower-images",
)

İşi gönderme

Şimdi Azure Machine Learning'de çalıştırılacak işi gönderme zamanı geldi. Bu kez üzerinde ml_client.jobskullanırsınızcreate_or_update.

ml_client.jobs.create_or_update(job)

İşlem tamamlandıktan sonra, iş çalışma alanınıza bir model kaydeder (eğitimin bir sonucu olarak) ve işi Azure Machine Learning stüdyosu görüntülemek için bir bağlantı oluşturur.

Uyarı

Azure Machine Learning, kaynak dizinin tamamını kopyalayarak eğitim betikleri çalıştırır. Karşıya yüklemek istemediğiniz hassas verileriniz varsa bir .ignore dosyası kullanın veya kaynak dizine eklemeyin.

İş yürütme sırasında ne olur?

İş yürütülürken aşağıdaki aşamalardan geçer:

  • Hazırlanıyor: Tanımlanan ortama göre bir docker görüntüsü oluşturulur. Görüntü çalışma alanının kapsayıcı kayıt defterine yüklenir ve sonraki çalıştırmalar için önbelleğe alınır. Günlükler de çalıştırma geçmişine akışla aktarılır ve ilerleme durumunu izlemek için görüntülenebilir. Seçilen bir ortam belirtilirse, seçilen ortamı destekleyen önbelleğe alınmış görüntü kullanılır.

  • Ölçeklendirme: Küme çalıştırmayı yürütmek için şu anda kullanılabilir olandan daha fazla düğüm gerektiriyorsa küme ölçeği artırmayı dener.

  • Çalışıyor: src betik klasöründeki tüm betikler işlem hedefine yüklenir, veri depoları bağlanır veya kopyalanır ve betik yürütülür. stdout ve ./logs klasöründen alınan çıkışlar çalıştırma geçmişine akışla aktarılır ve çalıştırmayı izlemek için kullanılabilir.

Model hiper parametreleri ayarlama

SDK'yı kullanarak basit bir Scikit-learn eğitim çalıştırmasının nasıl yapıldığını gördüğünüze göre, modelinizin doğruluğunu daha da geliştirip geliştirebileceğinize bakalım. Azure Machine Learning'in sweep özelliklerini kullanarak modelimizin hiper parametrelerini ayarlayabilir ve iyileştirebilirsiniz.

Modelin hiper parametrelerini ayarlamak için eğitim sırasında aranacak parametre alanını tanımlayın. Bunu, eğitim işine geçirilen bazı parametreleri (kernel ve penalty) paketten azure.ml.sweep özel girişlerle değiştirerek yaparsınız.

from azure.ai.ml.sweep import Choice

# we will reuse the command_job created before. we call it as a function so that we can apply inputs
# we do not apply the 'iris_csv' input again -- we will just use what was already defined earlier
job_for_sweep = job(
    kernel=Choice(values=["linear", "rbf", "poly", "sigmoid"]),
    penalty=Choice(values=[0.5, 1, 1.5]),
)

Ardından, izleyebileceğiniz birincil ölçüm ve kullanılacak örnekleme algoritması gibi süpürmeye özgü bazı parametreleri kullanarak komut işi üzerinde süpürme yapılandırabilirsiniz.

Aşağıdaki kodda, birincil ölçümümüzü Accuracyen üst düzeye çıkarmak amacıyla farklı hiper parametre yapılandırma kümelerini denemek için rastgele örnekleme kullanıyoruz.

sweep_job = job_for_sweep.sweep(
    compute="cpu-cluster",
    sampling_algorithm="random",
    primary_metric="Accuracy",
    goal="Maximize",
    max_total_trials=12,
    max_concurrent_trials=4,
)

Şimdi, bu işi daha önce olduğu gibi gönderebilirsiniz. Bu kez, tren işinizi süpüren bir süpürme işi çalıştıracaksınız.

returned_sweep_job = ml_client.create_or_update(sweep_job)

# stream the output and wait until the job is finished
ml_client.jobs.stream(returned_sweep_job.name)

# refresh the latest status of the job after streaming
returned_sweep_job = ml_client.jobs.get(name=returned_sweep_job.name)

İş çalıştırması sırasında sunulan studio kullanıcı arabirimi bağlantısını kullanarak işi izleyebilirsiniz.

En iyi modeli bulma ve kaydetme

Tüm çalıştırmalar tamamlandıktan sonra modeli en yüksek doğrulukla üreten çalıştırmayı bulabilirsiniz.

from azure.ai.ml.entities import Model

if returned_sweep_job.status == "Completed":

    # First let us get the run which gave us the best result
    best_run = returned_sweep_job.properties["best_child_run_id"]

    # lets get the model from this run
    model = Model(
        # the script stores the model as "sklearn-iris-flower-classify-model"
        path="azureml://jobs/{}/outputs/artifacts/paths/sklearn-iris-flower-classify-model/".format(
            best_run
        ),
        name="run-model-example",
        description="Model created from run.",
        type="custom_model",
    )

else:
    print(
        "Sweep job status: {}. Please wait until it completes".format(
            returned_sweep_job.status
        )
    )

Daha sonra bu modeli kaydedebilirsiniz.

registered_model = ml_client.models.create_or_update(model=model)

Modeli dağıtma

Modelinizi kaydettikten sonra Azure Machine Learning'deki diğer kayıtlı modellerde olduğu gibi dağıtabilirsiniz. Dağıtım hakkında daha fazla bilgi için bkz . Python SDK v2 kullanarak yönetilen çevrimiçi uç nokta ile makine öğrenmesi modelini dağıtma ve puanlandırma.

Sonraki adımlar

Bu makalede bir scikit-learn modeli eğitip kaydettiniz ve dağıtım seçenekleri hakkında bilgi edindiniz. Azure Machine Learning hakkında daha fazla bilgi edinmek için bu diğer makalelere bakın.