0 / 0
Go back to the English version of the documentation
UI için Birleşik Öğrenim XGBoost eğitmeni
Last updated: 06 Tem 2023
UI için Birleşik Öğrenim XGBoost eğitmeni

Bu öğretici program, kullanıcıların verilerini paylaşmasına gerek kalmadan, farklı kullanıcılardan gelen verilerle bir makine öğrenimi modelini eğitme hedefiyle Birleşik Öğrenme olanağının kullanımını gösterir. Bu adımlar, UI ve XGBoost çerçevesiyle düşük bir kod ortamında yapılır.

Bu öğretici programda aşağıdakileri yapmayı öğrendiniz:

Notlar:

  • Bu, kullanıcı arabirimi yönlendirilen Birleşik Öğrenim deneyinin çalıştırılmasına ilişkin aşamalı bir eğitmendir. API odaklı bir yaklaşıma ilişkin bir kod örneğini görmek için Federated Learning XGBoost örnekleri' ne gidin.
  • Bu eğitmende admin , Birleşik Öğrenim deneyini başlatan kullanıcıyı ifade eder ve taraf , deneme başlatıldıktan sonra model sonuçlarını gönderen bir ya da daha fazla kullanıcıyı belirtir. Eğitmen yönetici ve birden çok kişi tarafından gerçekleştirilebilse de, tek bir kullanıcı hem yönetici hem de parti olarak tam bir çalıştırma işlemini tamamlayabilir. Daha basit bir demonstratif amaçla, aşağıdaki öğretici programda tek bir kişi tarafından yalnızca bir veri kümesi gönderilir. Yönetim ve parti hakkında daha fazla bilgi için Terminologybaşlıklı konuya bakın.

Adım 1: Birleşik Öğrenmeyi Başlat

Bu bölümde, Birleşik Eğitim deneyini başlatmayı öğrendiniz.

Başlamadan önce

  1. IBM Cloud' da oturum açın. Hesabınız yoksa, herhangi bir e-postayla bir hesabınız oluşturursun.

  2. Bir Watson Machine Learning hizmeti eşgörünümü yaratır if you do not have it set up in your environment.

  3. watsonxiçinde oturum açın.

  4. Var olan bir projeyi kullanın ya da yeni bir proje yaratın. En azından yönetici iznine sahip olmanız gerekir.

  5. Associate the Watson Machine Learning service with your project.

    1. Projenizde Manage > Service & tümleştirmeler' i tıklatın.
    2. Hizmeti İlişkilendirseçeneğini tıklatın.
    3. Listeden Watson Machine Learning (Watson Machine Learning) eşgörünümünüzü seçin ve Door(İlişkilendir) seçeneğini tıklatın; ya da bir yönetim ortamı ayarlamaya gerek yoksa Yeni hizmet öğesini tıklatın.

    Hizmetin ilişkilendirilmesi için ekran görüntüsü

Toplayıcıya başlat

  1. Birleşik öğrenim deneme varlığını yaratın:

    1. Projenizdeki Varlıklar sekmesini tıklatın.

    2. Yeni görev > Dağıtımlı verilerde tren modelleriöğelerini tıklatın.

    3. Deneyiniz için bir Ad ve isteğe bağlı olarak bir tanım yazın.

    4. Verify the associated Watson Machine Learning instance under Bir makine öğrenimi eşgörünümü seçin. İlişkili bir Watson Machine Learning örneği görmüyorsanız, aşağıdaki adımları izleyin:

      1. Bir Machine Learning Hizmet Eşgörünümünü İlişkilendiröğesini tıklatın.

      2. Var olan bir örneği seçin ve İlişkilendir' i tıklatın ya da bir Yeni hizmetoluşturun.

      3. İlişkili hizmeti görmek için Yeniden Yükle ' yi tıklatın.

        Hizmetin ilişkilendirilmesi için ekran görüntüsü

      4. İleri'yi tıklatın.

  2. Deneyi yapılandırın.

    1. Configure (Yapılandır) sayfasında bir Hardware specification(Donanım belirtimi) seçin.

    2. Makine öğrenme çerçevesi açılan listesinde scikit-öğrenseçeneğini belirleyin.

    3. Model tipiiçin XGBoostöğesini seçin.

    4. Fusion yöntemiiçin XGBoost sınıflandırma füzyonuseçeneğini belirleyin.

      XGBoost sınıflandırmasının seçilmesine ilişkin ekran görüntüsü

  3. Hiperparametreleri tanımlayın.

    1. Rounds alanının değerini 5olarak ayarlayın.

    2. Alanların geri kalanına ilişkin varsayılan değerleri kabul edin.

      Hyperparameters seçmenin ekran görüntüsü

    3. İleri'yi tıklatın.

  4. Uzaktan eğitim sistemlerini seçin.

    1. Yeni sistemler ekleöğesini tıklatın.

    RTS Kullanıcı Arabiriminin Ekran Görüntüsü

    1. Uzak Eğitim Sistemi için bir ad verin.

    2. İzin verilen kimlikler'in altında, deneyde yer alacak kullanıcıyı seçin ve Ekle' yi tıklatın. Bu Birleşik Deneyin eğitim örneğine katılımcı olarak izin verilen sayıda kimlik ekleyebilirsiniz. Bu öğretici program için, yalnızca kendiniz seçin.
      İzin verilen kimlikler projenin bir parçası olmalıdır ve en azYönetici iznine sahip olmalıdır.

    3. İşiniz bittiğinde Sistem ekledüğmesini tıklatın.

      RTS yaratmanın ekran görüntüsü

    4. Uzak eğitim sistemleri seç sayfasına dönün, sisteminizin seçildiğini doğrulayın ve daha sonra, İleridüğmesini tıklatın.

      RTS ' nin seçilmesine ilişkin ekran görüntüsü

  5. Ayarlarınızı gözden geçirin ve daha sonra, Oluşturseçeneğini tıklatın.

  6. Duruma dikkat et. Birleşik Öğrenim deneme durumunuz başlatıldığında Bekliyor olur. Deneyiniz taraflara bağlanmaya hazır olduğunda, durum Setup-Waiting for remote systems(Ayar-Uzak sistemler için bekleniyor) olarak değişir. Bu işlem birkaç dakika sürebilir.

Adım 2: Parti olarak tren modeli

  1. Yönetici olarak aynı Python sürümünü kullandığınızdan emin olun. Farklı bir Python sürümü kullanılması uyumluluk sorunlarına neden olabilir. Farklı çerçevelerle uyumlu Python sürümlerini görmek için bkz. Frameworks ve Python sürüm uyumluluğu.

  2. Yeni bir yerel dizin yaratır.

  3. Download the Yetişkin data set into the directory with this command: wget https://api.dataplatform.cloud.ibm.com/v2/gallery-assets/entries/5fcc01b02d8f0e50af8972dc8963f98e/data -O adult.csv.

  4. Download the data handler by running wget https://raw.githubusercontent.com/IBMDataScience/sample-notebooks/master/Files/adult_sklearn_data_handler.py -O adult_sklearn_data_handler.py.

  5. Watson Machine Learningürününü kurun.

    • Linuxkullanıyorsanız, pip install 'ibm-watson-machine-learning[fl-rt22.2-py3.10]'komutunu çalıştırın.
    • M-series CPU ve Conda ile Mac OS kullanıyorsanız, kuruluş komut dosyasını yükleyin ve ./install_fl_rt22.2_macos.sh <name for new conda environment>dosyasını çalıştırın.
      Taraf bağlayıcı komut dosyası, mnist_keras_data_handler.py, mnist-keras-test.pkl ve mnist-keras-train.pkl, aynı dizinde bulunan veri işleyicisine sahip olur.
  6. Toplayıcı 'nın çalışmakta olduğu Birleşik Öğrenim deneme sayfasına dönün. Kuruluş Bilgilerini Görüntüleöğesini tıklatın.

  7. Uzaktan eğitim sisteminin yanındaki karşıdan yükle simgesini tıklatın ve Taraf bağlayıcısı komut dosyasıseçeneğini belirleyin.

  8. Taraf bağlayıcı komut dosyası, Adult veri kümesi ve aynı dizindeki veri işleyiciye sahip olduğundan emin olun. ls -lkomutunu çalıştırırsanız, şunları görürsünüz:

    adult.csv
    adult_sklearn_data_handler.py
    rts_<RTS Name>_<RTS ID>.py
    
  9. Taraf bağlayıcısı komut dosyasında:

    1. Herhangi bir yöntemi kullanarak kimlik doğrulayın.

    2. "data" bölümü için şu parametreleri girin:

      "data": {
              "name": "AdultSklearnDataHandler",
              "path": "./adult_sklearn_data_handler.py",
              "info": {
                      "txt_file": "./adult.csv"
              },
      },
      

      Burada:

      • name: Veri işleyici için tanımlanan sınıf adı.
      • path: Veri işleyicisinin bulunduğu yerin yolu.
      • info: Yerel veri kümesinin dosya tipi ya da veri küğünüzün yolu için bir anahtar değeri çifti yaratın.
  10. Taraf bağlayıcı komut dosyasını çalıştırın: python3 rts_<RTS Name>_<RTS ID>.py.

  11. Katılan tüm taraflar toplayıcıya bağlandığında, toplayıcı yerel model eğitimi ve genel model güncellemesini kolaylaştırır. Durumu Eğitim' dir. Kullanıcı arabiriminden Federated Learning deneyinizin durumunu izleyebilirsiniz.

  12. Eğitim tamamlandığında, taraf bir Received STOP message ' a bir parti için birreceivesalır.

  13. Şimdi, eğitimli modeli saklayabilir ve bir alana yerleştirebilirsiniz.

Adım 3: Modemi çevrimiçi olarak kaydedin ve devreye alın

Bu bölümde, eğitildiğiniz modelin nasıl kaydedileceğini ve konuşlandırıldığını öğrenirdiniz.

  1. Modelinizi kaydedin.

    1. Tamamlanan Birleşik Öğrenim deneyinizde, Modeli projeye kaydet' i tıklatın.
    2. Modelinize bir ad verin ve Kaydetdüğmesini tıklatın.
    3. Projen evine git.
  2. Bir konuşlandırma alanı yaratın, yoksa bir konuşlandırma alanı yaratın.

    1. Gezinme menüsünden Gezinme menüsü, Konuşlandırmalar' ı tıklatın.

    2. Yeni konuşlandırma alanı' yı tıklatın.

    3. Alanları doldurun ve Oluşturseçeneğini tıklatın.

      Bir devreye alma oluşturmanın ekran görüntüsü

  3. Modeli bir boşluğa yükselt.

    1. Projeniz için geri dönün ve Varlıklar sekmesini tıklatın.
    2. Modeller bölümünde, ayrıntı sayfasını görüntülemek için modeli tıklatın.
    3. Alanı yükselt' i tıklatın.
    4. Eğitimli modeliniz için bir konuşlandırma alanı seçin.
    5. Bu modele yükselttikten sonra alana model git seçeneğini belirleyin.
    6. Yükselt' i tıklatın.
  4. Model, konuşlandırma alanının içinde görüntülendiğinde, Yeni konuşlandırmaseçeneğini tıklatın.

    1. Konuşlandırma tipiolarak Çevrimiçi seçeneğini belirleyin.
    2. Devreye alma için bir ad belirtin.
    3. Oluştur'u tıklatın.

Adım 4: Modele dikkat edin

Bu bölümde, eğitim sırasında kullanılan aynı biçimde olduğundan emin olmak için puanlama verilerini işlemek için bir Python işlevi oluşturmayı öğrenmeniz gerekir. Karşılaştırma için, oluşturduğumuz Python işlevini çağırarak, işlenmemiş veri kümesini de puanlayacaksınız.

  1. Python işlevini aşağıdaki gibi tanımlayın. İşlev, puanlama verilerini ham biçimiyle yükler ve verileri, eğitim sırasında yapıldığı gibi işler. Sonra, işlenen verileri not edin.

    def adult_scoring_function():
    
    import pandas as pd
    
    from ibm_watson_machine_learning import APIClient
    
    wml_credentials = {
    "url": "https://us-south.ml.cloud.ibm.com",
    "apikey": "<API KEY>"
    }
    client = APIClient(wml_credentials)
    client.set.default_space('<SPACE ID>')
    
    # converts scoring input data format to pandas dataframe
    def create_dataframe(raw_dataset):
    
    fields = raw_dataset.get("input_data")[0].get("fields")
    values = raw_dataset.get("input_data")[0].get("values")
    
    raw_dataframe = pd.DataFrame(
    columns = fields,
    data = values
    )
    
    return raw_dataframe
    
    # reuse preprocess definition from training data handler
    def preprocess(training_data):
    
    """
    Performs the following preprocessing on adult training and testing data:
    * Drop following features: 'workclass', 'fnlwgt', 'education', 'marital-status', 'occupation',
    'relationship', 'capital-gain', 'capital-loss', 'hours-per-week', 'native-country'
    * Map 'race', 'sex' and 'class' values to 0/1
            * ' White': 1, ' Amer-Indian-Eskimo': 0, ' Asian-Pac-Islander': 0, ' Black': 0, ' Other': 0
            * ' Male': 1, ' Female': 0
            * Further details in Kamiran, F. and Calders, T. Data preprocessing techniques for classification without discrimination
    * Split 'age' and 'education' columns into multiple columns based on value
    
    :param training_data: Raw training data
    :type training_data: `pandas.core.frame.DataFrame
    :return: Preprocessed training data
    :rtype: `pandas.core.frame.DataFrame`
    """
    if len(training_data.columns)==15:
    # drop 'fnlwgt' column
    training_data = training_data.drop(training_data.columns[2], axis='columns')
    
    training_data.columns = ['age',
                            'workclass',
                            'education',
                            'education-num',
                            'marital-status',
                            'occupation',
                            'relationship',
                            'race',
                            'sex',
                            'capital-gain',
                            'capital-loss',
                            'hours-per-week',
                            'native-country',
                            'class']
    
    # filter out columns unused in training, and reorder columns
    training_dataset = training_data[['race', 'sex', 'age', 'education-num', 'class']]
    
    # map 'sex' and 'race' feature values based on sensitive attribute privileged/unpriveleged groups
    training_dataset['sex'] = training_dataset['sex'].map({' Female': 0,
                                                            ' Male': 1})
    
    training_dataset['race'] = training_dataset['race'].map({' Asian-Pac-Islander': 0,
                                                            ' Amer-Indian-Eskimo': 0,
                                                            ' Other': 0,
                                                            ' Black': 0,
                                                            ' White': 1})
    
    # map 'class' values to 0/1 based on positive and negative classification
    training_dataset['class'] = training_dataset['class'].map({' <=50K': 0, ' >50K': 1})
    
    training_dataset['age'] = training_dataset['age'].astype(int)
    training_dataset['education-num'] = training_dataset['education-num'].astype(int)
    
    # split age column into category columns
    for i in range(8):
            if i != 0:
            training_dataset['age' + str(i)] = 0
    
    for index, row in training_dataset.iterrows():
            if row['age'] < 20:
            training_dataset.loc[index, 'age1'] = 1
            elif ((row['age'] < 30) & (row['age'] >= 20)):
            training_dataset.loc[index, 'age2'] = 1
            elif ((row['age'] < 40) & (row['age'] >= 30)):
            training_dataset.loc[index, 'age3'] = 1
            elif ((row['age'] < 50) & (row['age'] >= 40)):
            training_dataset.loc[index, 'age4'] = 1
            elif ((row['age'] < 60) & (row['age'] >= 50)):
            training_dataset.loc[index, 'age5'] = 1
            elif ((row['age'] < 70) & (row['age'] >= 60)):
            training_dataset.loc[index, 'age6'] = 1
            elif row['age'] >= 70:
            training_dataset.loc[index, 'age7'] = 1
    
    # split age column into multiple columns
    training_dataset['ed6less'] = 0
    for i in range(13):
            if i >= 6:
            training_dataset['ed' + str(i)] = 0
    training_dataset['ed12more'] = 0
    
    for index, row in training_dataset.iterrows():
            if row['education-num'] < 6:
            training_dataset.loc[index, 'ed6less'] = 1
            elif row['education-num'] == 6:
            training_dataset.loc[index, 'ed6'] = 1
            elif row['education-num'] == 7:
            training_dataset.loc[index, 'ed7'] = 1
            elif row['education-num'] == 8:
            training_dataset.loc[index, 'ed8'] = 1
            elif row['education-num'] == 9:
            training_dataset.loc[index, 'ed9'] = 1
            elif row['education-num'] == 10:
            training_dataset.loc[index, 'ed10'] = 1
            elif row['education-num'] == 11:
            training_dataset.loc[index, 'ed11'] = 1
            elif row['education-num'] == 12:
            training_dataset.loc[index, 'ed12'] = 1
            elif row['education-num'] > 12:
            training_dataset.loc[index, 'ed12more'] = 1
    
    training_dataset.drop(['age', 'education-num'], axis=1, inplace=True)
    
    # move class column to be last column
    label = training_dataset['class']
    training_dataset.drop('class', axis=1, inplace=True)
    training_dataset['class'] = label
    
    return training_dataset
    
    def score(raw_dataset):
    try:
    
    # create pandas dataframe from input
    raw_dataframe = create_dataframe(raw_dataset)
    
    # reuse preprocess from training data handler
    processed_dataset = preprocess(raw_dataframe)
    
    # drop class column
    processed_dataset.drop('class', inplace=True, axis='columns')
    
    # create data payload for scoring
    fields = processed_dataset.columns.values.tolist()
    values = processed_dataset.values.tolist()
    scoring_dataset = {client.deployments.ScoringMetaNames.INPUT_DATA: [{'fields': fields, 'values': values}]}
    print(scoring_dataset)
    
    # score data
    prediction = client.deployments.score('<MODEL DEPLOYMENT ID>', scoring_dataset)
    return prediction
    
    except Exception as e:
    return {'error': repr(e)}
    
    return score
    
  2. Önceki Python işlevindeki değişkenleri değiştirin:

    • API KEY: IAM API anahtarınız. Yeni bir API anahtarı oluşturmak için IBM Cloud web sitesi' e gidin ve Yönet > Erişim (IAM) > API anahtarlarıaltındaki Bir IBM Cloud API anahtarı oluşturun seçeneğini tıklatın.
    • SPACE ID: Yetişkin gelir dağıtımın çalışmakta olduğu konuşlandırma alanının tanıtıcısı. Alan kimliğinizi görmek için Konuşlandırma alanları > YOUR SPACE NAME > Yönetöğelerini seçin. Alan GUID' i kopyalayın.
    • MODEL DEPLOYMENT ID: Yetişkin gelir modeline ilişkin çevrimiçi konuşlandırma tanıtıcısı. Model kimliğinizi görmek için projenizdeki modeli tıklatarak bu tanıtıcıyı görebilirsiniz. Hem adres çubuğunda, hem de bilgi bölmesinde yer alıyor.
  3. Python 3.9için Yazılım Belirtimi Tanıtıcısı 'nı alın. Diğer ortamların listesi için client.software_specifications.list() komutunu çalıştırın. software_spec_id = client.software_specifications.get_id_by_name('default_py3.9')

  4. Python işlevini Watson Studio alanınıza saklayın.

    # stores python function in space
    meta_props = {
            client.repository.FunctionMetaNames.NAME: 'Adult Income Scoring Function',
            client.repository.FunctionMetaNames.SOFTWARE_SPEC_ID: software_spec_id
    }
    stored_function = client.repository.store_function(meta_props=meta_props, function=adult_scoring_function)
    function_id = stored_function['metadata']['id']
    
  5. Python işlevini kullanarak çevrimiçi bir konuşlandırma yaratın.

    # create online deployment for fucntion
    meta_props = {
        client.deployments.ConfigurationMetaNames.NAME: "Adult Income Online Scoring Function",
        client.deployments.ConfigurationMetaNames.ONLINE: {}
    }
    online_deployment = client.deployments.create(function_id, meta_props=meta_props)
    function_deployment_id = online_deployment['metadata']['id']
    
  6. Yetişkin Geliri veri kümesini karşıdan yükleyin. Bu, puanlama verilerimiz olarak yeniden kullanılır.

    import pandas as pd
    
    # read adult csv dataset
    adult_csv = pd.read_csv('./adult.csv', dtype='category')
    
    # use 10 random rows for scoring
    sample_dataset = adult_csv.sample(n=10)
    
    fields = sample_dataset.columns.values.tolist()
    values = sample_dataset.values.tolist()
    
  7. Oluşturulan Python işlevini kullanarak yetişkin gelir verilerini elde edin.

    raw_dataset = {client.deployments.ScoringMetaNames.INPUT_DATA: [{'fields': fields, 'values': values}]}
    
    prediction = client.deployments.score(function_deployment_id, raw_dataset)
    print(prediction)
    

Sonraki adımlar

Birleşik Öğrenim deneyinizi oluşturma.

Üst konu: Birleşik Öğrenim eğitmeni ve örnekleri

Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more