본 문서의 가장 정확하고 최신 버전은 영어(원본) 버전을 참조하십시오. IBM은 자동으로 기계 번역된 컨텐츠를 사용하여 발생하는 피해 또는 손실에 대해 책임을 지지 않습니다.
UI용 연합 학습 XGBoost 튜토리얼
마지막 업데이트 날짜: 2024년 11월 28일
UI용 연합 학습 XGBoost 튜토리얼
이 튜토리얼에서는 사용자가 데이터를 공유하지 않고 다른 사용자의 데이터로 머신러닝 모델을 학습하는 것을 목표로 연합 학습을 사용하는 방법을 보여줍니다. UI 및 XGBoost 프레임워크로 하위 코드 환경에서 해당 단계가 완료됩니다. UCI: 성인 - 소득 예측 데이터 집합을 사용하여 학습된 모델은 인구조사 데이터를 기반으로 소득이 $50K/yr를 초과하는지 예측합니다. 이 데이터 세트는 '인구조사 소득' 데이터 세트라고도 합니다.
이는 UI 기반 연합 학습 실험을 실행하기 위한 단계별 학습서입니다. API 기반 접근 방식에 대한 코드 샘플을 보려면 연합 학습 XGBoost 샘플로 이동하십시오.
이 학습서에서 admin 은 연합 학습 실험을 시작하는 사용자를 나타내고 party 는 관리자가 실험을 시작한 후 모델 결과를 전송하는 하나 이상의 사용자를 나타냅니다. 학습서를 관리자 및 여러 당사자가 수행할 수 있지만 단일 사용자가 관리자 및 당사자 모두로 전체 실행을 완료할 수도 있습니다. 보다 간단한 데모를 위해 다음 튜토리얼에서는 하나의 당사자가
하나의 데이터 세트만 제출합니다. 관리 및 당사자에 대한 자세한 정보는 용어를 참조하십시오.
전제조건
Copy link to section
확인 Python 버전
Copy link to section
관리자와 동일한 Python 버전을 사용 중인지 확인하십시오. 다른 Python 버전을 사용하면 호환성 문제가 발생할 수 있습니다. 다른 프레임워크와 호환 가능한 Python 버전을 보려면 프레임워크 및 Python 버전 호환성을 참조하십시오.
프로젝트 열기
Copy link to section
기존 프로젝트 를 사용하거나 새 프로젝트를 작성하십시오. 최소한 관리 권한이 있어야 합니다.
watsonx.ai 런타임 서비스를 프로젝트에 연결합니다.
프로젝트에서 관리 > 서비스 및 통합을 클릭하십시오.
서비스 연관을 클릭하십시오.
목록에서 watsonx.ai 런타임 인스턴스를 선택하고 연결을 클릭하거나, 인스턴스가 없는 경우 새 서비스를 클릭하여 인스턴스를 설정합니다.
작업 1: 연합 학습 시작
Copy link to section
이 섹션에서는 연합 학습 실험을 생성, 구성 및 시작합니다.
일 1a: 제휴 학습 실험 자산 만들기
Copy link to section
프로젝트에서 자산 프로젝트의 탭.
딸깍 하는 소리 새 자산 > 분산 데이터에 대한 모델 학습 연합 학습 실험 자산을 생성합니다.
실험의 이름 을 입력하고 선택적으로 설명을 입력하십시오.
머신 러닝 인스턴스 선택에서 연결된 watsonx.ai 런타임 인스턴스를 확인합니다. 연결된 watsonx.ai 런타임 인스턴스가 보이지 않는 경우 다음 단계를 따르세요:
Machine Learning 서비스 인스턴스 연관을 클릭하십시오.
기존 인스턴스를 선택하고 연관을 클릭하거나 새 서비스를 작성하십시오.
연관된 서비스를 보려면 다시 로드를 클릭하십시오.
다음 을 클릭하십시오.
일 1b: 실험 구성
Copy link to section
구성 페이지에서 하드웨어 스펙을 선택하십시오.
기계 학습 프레임워크 드롭 다운에서 scikit-learn을 선택하십시오.
모델 유형에 대해 XGBoost를 선택하십시오.
통합 방법에 대해 XGBoost classification fusion을 선택하십시오.
다음 을 클릭하십시오.
일 1c: 하이퍼파라미터 정의
Copy link to section
라운드 필드의 값을 5로 설정하십시오.
나머지 필드에 대해서는 기본값을 승인하십시오.
다음 을 클릭하십시오.
일 1d: 원격 훈련 시스템 선택
Copy link to section
새 시스템 추가를 클릭하십시오.
원격 교육 시스템의 이름을 입력하세요.
허용된 ID에서 실험에 참여할 사용자를 선택한 후 추가를 클릭하십시오. 이 연합 실험 훈련 인스턴스에 참가자로 허용되는 ID를 추가할 수 있습니다. 이 튜토리얼에서는 본인만 선택하세요. 허용되는 모든 ID는 프로젝트의 협력자여야 하며 최소한 관리자 허가. 사용하려는 각 원격 당사자에 대해 이 단계를 반복하여 시스템을 더 추가하십시오.
완료되면 시스템 추가를 클릭하십시오.
원격 훈련 시스템 선택 페이지로 돌아가서 시스템이 선택되었는지 확인한 후 다음을 클릭하십시오.
일 1e: 설정 검토
Copy link to section
설정을 검토한 후 작성을 클릭하십시오.
상태를 감시하십시오. Federated Learning 실험 상태는 시작 시 보류 중입니다. 사용자의 실험이 연결할 준비가 되면 상태가 설치 - 원격시스템 대기 중으로 변경됩니다. 몇 분이 소요될 수 있습니다.
딸깍 하는 소리 설정 정보 보기 원격 파티에서 실행할 수 있는 파티 구성 및 파티 커넥터 스크립트를 다운로드합니다.
생성한 각 원격 교육 시스템 옆에 있는 구성 다운로드 아이콘 을 클릭합니다. 파티 커넥터 스크립트를 다음 이름으로 컴퓨터의 디렉터리에 저장합니다.
remote-test-system-configuration.py
Copy to clipboard클립보드에 복사됨
완료를 클릭하십시오.
진행 상황 확인
Copy link to section
다음 이미지는 '원격 시스템 대기 중' 상태의 실험을 보여줍니다.
작업 2: 파티로 모델 훈련
Copy link to section
모델을 훈련하려면 데이터 세트를 다운로드한 다음 Python 스크립트를 편집하고 실행해야 합니다. 모델을 파티로 훈련하려면 다음 단계를 따르세요.
일 2a: 데이터 세트 및 스크립트 다운로드
Copy link to section
새 로컬 디렉터리를 만들고 작업에서 다운로드한 파티 커넥터 스크립트를 이동합니다. 1e 새 디렉터리로 이동합니다.
파일 이름을 마우스 오른쪽 버튼으로 클릭한 후 다음 파일을 다운로드합니다. 다른 이름으로 링크 저장. 당사자 커넥터 스크립트와 동일한 디렉토리에 저장하십시오.
info: 로컬 데이터 세트의 파일 유형 또는 데이터 세트의 경로에 대한 키 값 쌍을 작성합니다.
파티 커넥터 스크립트를 저장합니다.
다음 중 하나를 사용하여 파티 커넥터 스크립트를 실행합니다.python 또는python3 당신이 설치한 것에 따라.
python remote-test-system-configuration.py
Copy to clipboard클립보드에 복사됨
UI에서 연합 학습 실험의 상태를 모니터할 수 있습니다. 모든 참여 당사자가 집계자에 연결하면 집계자가 로컬 모델 훈련 및 글로벌 모델 업데이트를 용이하게 합니다. 상태는 훈련입니다. 사용자 인터페이스에서 연합 학습 실험의 상태를 모니터할 수 있습니다. 훈련이 완료되면 파티는Received STOP message 파티에. 이제 훈련된 모델을 저장하고 이를 영역에 배치할 수 있습니다.
진행 상황을 확인하세요
Copy link to section
다음 이미지는 완료된 실험을 보여줍니다.
작업 3: 온라인으로 모델 저장 및 배포
Copy link to section
이 절에서는 훈련된 모델을 저장하고 배치하는 방법을 학습합니다.
일 3a: 모델 저장
Copy link to section
완료된 연합 학습 실험에서 다음을 클릭하세요. 집계 저장.
에 집계된 모델을 프로젝트에 저장 화면에서 모델 이름을 입력하세요. 그리고 클릭 만들다.
모델이 생성되었다는 알림이 표시되면 프로젝트에서 보기. 알림을 놓친 경우 프로젝트 이름을 클릭하여 자산 탭으로 돌아가고, 모델 이름을 클릭하여 확인하세요.
일 3b: 모델을 스페이스로 승격
Copy link to section
모델 섹션에서 모델을 클릭하여 세부사항 페이지를 보십시오.
배포 공간 로 승격을 클릭합니다.
선택하세요 대상 공간 목록에서 선택하거나 새로운 배포 공간을 생성하세요.
선택하다 새로운 배포 공간 생성.
배포 공간의 이름을 입력합니다.
보관 서비스를 선택하세요.
머신러닝 서비스를 선택하세요.
작성을 클릭하십시오.
배포 공간이 생성되면 창을 닫습니다.
승격 후 공간의 모델로 이동 옵션을 선택하십시오.
승격을 클릭하십시오.
일 3c: 온라인 배포 생성 및 보기
Copy link to section
배치 공간 내에 모델이 표시되면 새 배치를 클릭하십시오.
배치 유형으로 온라인을 선택하십시오.
배치의 이름을 지정하십시오.
작성을 클릭하십시오.
배포 상태가 다음으로 변경될 때까지 기다립니다. 배포됨 을 클릭한 다음 배포 이름을 클릭합니다.
애플리케이션에서 이 배포를 사용하려면 엔드포인트와 코드 조각을 확인하세요.
진행 상황을 확인하세요
Copy link to section
다음 이미지는 온라인 배포를 보여줍니다.
작업 4: 모델 점수 매기기
Copy link to section
이 섹션에서는 채점 데이터를 처리하여 교육 중에 사용한 것과 동일한 형식이 되도록 하는 Python 함수를 만드는 방법을 배웁니다. 비교를 위해 생성한 Python 함수를 호출하여 원시 데이터 세트의 점수를 매길 수도 있습니다.
Python 스크립트를 만들어 로컬에서 스크립트를 실행하거나, Jupyter 노트북을 만들어 노트북에서 코드를 실행할 수 있습니다.
환경
설정
Copy link to section
이 코드는 필요한 라이브러리와 패키지를 가져오고 머신러닝 API 클라이언트에 액세스하기 위한 자격 증명을 설정합니다.
# import the library and package and set the credentialsfrom ibm_watsonx_ai import APIClient
wml_credentials = {
"url": "https://us-south.ml.cloud.ibm.com",
"apikey": "<insert-api-key-here>"
}
client = APIClient(wml_credentials)
client.set.default_space('<insert-deployment-space-id-here>')
software_spec_id = client.software_specifications.get_id_by_name('default_py3.10')
자세한 내용은 카미란, F. 및 칼더스, T. 차별 없는 분류를 위한 데이터 전처리 기법에서 확인하세요
값에 따라 '연령' 및 '교육' 열을 여러 열로 분할합니다
# define the preprocess function to prepare the data for scoringdefpreprocess(training_data):
iflen(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 columnsfor i inrange(8):
if i != 0:
training_dataset['age' + str(i)] = 0for index, row in training_dataset.iterrows():
if row['age'] < 20:
training_dataset.loc[index, 'age1'] = 1elif ((row['age'] < 30) & (row['age'] >= 20)):
training_dataset.loc[index, 'age2'] = 1elif ((row['age'] < 40) & (row['age'] >= 30)):
training_dataset.loc[index, 'age3'] = 1elif ((row['age'] < 50) & (row['age'] >= 40)):
training_dataset.loc[index, 'age4'] = 1elif ((row['age'] < 60) & (row['age'] >= 50)):
training_dataset.loc[index, 'age5'] = 1elif ((row['age'] < 70) & (row['age'] >= 60)):
training_dataset.loc[index, 'age6'] = 1elif row['age'] >= 70:
training_dataset.loc[index, 'age7'] = 1# split age column into multiple columns
training_dataset['ed6less'] = 0for i inrange(13):
if i >= 6:
training_dataset['ed' + str(i)] = 0
training_dataset['ed12more'] = 0for index, row in training_dataset.iterrows():
if row['education-num'] < 6:
training_dataset.loc[index, 'ed6less'] = 1elif row['education-num'] == 6:
training_dataset.loc[index, 'ed6'] = 1elif row['education-num'] == 7:
training_dataset.loc[index, 'ed7'] = 1elif row['education-num'] == 8:
training_dataset.loc[index, 'ed8'] = 1elif row['education-num'] == 9:
training_dataset.loc[index, 'ed9'] = 1elif row['education-num'] == 10:
training_dataset.loc[index, 'ed10'] = 1elif row['education-num'] == 11:
training_dataset.loc[index, 'ed11'] = 1elif row['education-num'] == 12:
training_dataset.loc[index, 'ed12'] = 1elif 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
Copy to clipboard클립보드에 복사됨Show more
학습 데이터 처리
Copy link to section
이 코드는 전처리 함수를 사용하여 데이터를 준비합니다.
# use the preprocess function to prepare the data
processed_dataset = preprocess(training_data)
# drop class column
processed_dataset.drop('class', inplace=True, axis='columns')
processed_dataset.head(10)