Translation not up to date
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
IBM Cloud' da oturum açın. Hesabınız yoksa, herhangi bir e-postayla bir hesabınız oluşturursun.
Bir Watson Machine Learning hizmeti eşgörünümü yaratır if you do not have it set up in your environment.
watsonxiçinde oturum açın.
Var olan bir projeyi kullanın ya da yeni bir proje yaratın. En azından yönetici iznine sahip olmanız gerekir.
Associate the Watson Machine Learning service with your project.
- Projenizde Manage > Service & tümleştirmeler' i tıklatın.
- Hizmeti İlişkilendirseçeneğini tıklatın.
- 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.
Toplayıcıya başlat
Birleşik öğrenim deneme varlığını yaratın:
Projenizdeki Varlıklar sekmesini tıklatın.
Yeni görev > Dağıtımlı verilerde tren modelleriöğelerini tıklatın.
Deneyiniz için bir Ad ve isteğe bağlı olarak bir tanım yazın.
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:
Bir Machine Learning Hizmet Eşgörünümünü İlişkilendiröğesini tıklatın.
Var olan bir örneği seçin ve İlişkilendir' i tıklatın ya da bir Yeni hizmetoluşturun.
İlişkili hizmeti görmek için Yeniden Yükle ' yi tıklatın.
İleri'yi tıklatın.
Deneyi yapılandırın.
Configure (Yapılandır) sayfasında bir Hardware specification(Donanım belirtimi) seçin.
Makine öğrenme çerçevesi açılan listesinde scikit-öğrenseçeneğini belirleyin.
Model tipiiçin XGBoostöğesini seçin.
Fusion yöntemiiçin XGBoost sınıflandırma füzyonuseçeneğini belirleyin.
Hiperparametreleri tanımlayın.
Rounds alanının değerini
5
olarak ayarlayın.Alanların geri kalanına ilişkin varsayılan değerleri kabul edin.
İleri'yi tıklatın.
Uzaktan eğitim sistemlerini seçin.
- Yeni sistemler ekleöğesini tıklatın.
Uzak Eğitim Sistemi için bir ad verin.
İ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.İşiniz bittiğinde Sistem ekledüğmesini tıklatın.
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.
Ayarlarınızı gözden geçirin ve daha sonra, Oluşturseçeneğini tıklatın.
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
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.
Yeni bir yerel dizin yaratır.
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
.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
.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
vemnist-keras-train.pkl
, aynı dizinde bulunan veri işleyicisine sahip olur.
- Linuxkullanıyorsanız,
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.
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.
Taraf bağlayıcı komut dosyası, Adult veri kümesi ve aynı dizindeki veri işleyiciye sahip olduğundan emin olun.
ls -l
komutunu çalıştırırsanız, şunları görürsünüz:adult.csv adult_sklearn_data_handler.py rts_<RTS Name>_<RTS ID>.py
Taraf bağlayıcısı komut dosyasında:
Herhangi bir yöntemi kullanarak kimlik doğrulayın.
"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.
Taraf bağlayıcı komut dosyasını çalıştırın:
python3 rts_<RTS Name>_<RTS ID>.py
.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.
Eğitim tamamlandığında, taraf bir
Received STOP message
' a bir parti için birreceivesalır.Ş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.
Modelinizi kaydedin.
- Tamamlanan Birleşik Öğrenim deneyinizde, Modeli projeye kaydet' i tıklatın.
- Modelinize bir ad verin ve Kaydetdüğmesini tıklatın.
- Projen evine git.
Bir konuşlandırma alanı yaratın, yoksa bir konuşlandırma alanı yaratın.
Gezinme menüsünden , Konuşlandırmalar' ı tıklatın.
Yeni konuşlandırma alanı' yı tıklatın.
Alanları doldurun ve Oluşturseçeneğini tıklatın.
Modeli bir boşluğa yükselt.
- Projeniz için geri dönün ve Varlıklar sekmesini tıklatın.
- Modeller bölümünde, ayrıntı sayfasını görüntülemek için modeli tıklatın.
- Alanı yükselt' i tıklatın.
- Eğitimli modeliniz için bir konuşlandırma alanı seçin.
- Bu modele yükselttikten sonra alana model git seçeneğini belirleyin.
- Yükselt' i tıklatın.
Model, konuşlandırma alanının içinde görüntülendiğinde, Yeni konuşlandırmaseçeneğini tıklatın.
- Konuşlandırma tipiolarak Çevrimiçi seçeneğini belirleyin.
- Devreye alma için bir ad belirtin.
- 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.
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
Ö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.
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')
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']
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']
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()
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