SAP HANA용 Python 기계 학습 클라이언트(hana-ml)는 다음 항목에 대한 액세스를 제공합니다.
- Predictive Analysis Library(PAL)의 모든 함수
- Python의 Automated Predictive Library(APL) 함수
이 함수는 SAP HANA DataFrame과 함께 입력 데이터로 사용할 수 있습니다.
입력 데이터세트 준비 중
이 알고리즘은 입력 데이터세트를 훈련, 테스트, 유효성 확인이라는 세 개의 분리된 하위 세트로 무작위로 분할합니다. 이러한 하위 세트는 기계 학습 워크플로우를 실행하는 데 중요합니다.
입력 데이터세트에는 분할 알고리즘 [1]에 따라 이러한 파티션을 생성하기 위한 'ID' 열이 포함되어야 합니다. 'ID' 열이 명시적으로 지정되지 않은 경우 알고리즘은 DataFrame의 첫 번째 열에 'ID'가 있다고 가정합니다. 자세한 내용은 [1]을(를) 참조하십시오.
데이터세트에 'ID' 열을 삽입하는 방법은 다음과 같습니다.
1hdf_input = hdf.add_id(id_col='ID') 1hdf_input.head(5).collect()| ID | MedInc | 가구 연령 | AveRooms | AveBedrms | 인구 | AveOccup | 위도 | 경도 | 대상 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 1.24 | 52.0 | 2.92 | 0.91 | 396.0 | 4.65 | 37.80 | -122.27 | 5.00 |
| 1 | 2 | 1.16 | 52.0 | 2.43 | 0.94 | 1349.0 | 5.39 | 37.87 | -122.25 | 5.00 |
| 2 | 3 | 7.85 | 52.0 | 7.79 | 1.05 | 517.0 | 2.41 | 37.86 | -122.24 | 5.00 |
| 3 | 4 | 9.39 | 52.0 | 7.51 | 0.95 | 1366.0 | 2.75 | 37.85 | -122.24 | 5.00 |
| 4 | 5 | 7.87 | 52.0 | 8.28 | 1.04 | 947.0 | 2.62 | 37.83 | -122.23 | 5.00 |
입력 데이터세트 분할
위의 각 하위 집합에 대해 최적 분할 백분율이 없습니다. 예측 프로젝트의 목표에 부합하는 분할 비율을 선택해야 합니다.
예를 들어, 공통 파티션 비율에는 다음이 포함됩니다.
- 교육: 80%/테스트: 20%
- 교육: 70%/테스트: 30%
- 교육: 60%/테스트: 40%
이 경우 모델 훈련을 위한 데이터 양을 최대화해야 하며 강력한 모델 평가를 위해 충분한 데이터 포인트를 남겨 두어야 합니다. 따라서 제안되는 데이터 분할은 다음과 같습니다.
교육: 70%/테스트: 30%
분할 알고리즘의 입력 매개변수는 다음과 같습니다.
12345678# Partitioning the input data into train, test, validation sub-sets
from hana_ml.algorithms.pal.partition import train_test_val_split
regressdata_hdf=hdf_input.select('ID', 'MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude', 'Target')
train_hdf, test_hdf, val_hdf = train_test_val_split(data=regressdata_hdf, id_column='ID', random_seed=2, partition_method='random', training_percentage = 0.7, testing_percentage = 0.3, validation_percentage = 0.0)
print(regressdata_hdf.select_statement)출력:
SELECT "ID", "MedInc", "HouseAge", "AveRooms", "AveBedrms", "Population", "AveOccup", "Latitude", "Longitude", "Target" FROM (SELECT CAST(ROW_NUMBER() OVER() AS INTEGER) + 0 AS "ID", * FROM (SELECT * FROM "ML_DEMO").california_housing") AS "DT_269"
HGBT(Hybrid Gradient Boosting Tree) 모델 훈련
PAL 하이브리드 그레이디언트 부스팅 트리(HGBT) 알고리즘 [1]은 혼합 기능 유형(연속 및 범주형)을 입력으로 지원하는 HANA 최적화 그레이디언트 부스팅 트리 구현입니다. 회귀와분류 시나리오를 지원합니다.
회귀에 대한 하이브리드 그레이디언트 부스팅 모델은 아래 표시된 훈련 하위 세트를 기반으로 훈련됩니다.
123456789101112HybridGradientBoostingRegressor
%%time
hgr = HybridGradientBoostingRegressor(
n_estimators = 20, split_threshold=0.75,
split_method = 'exact', learning_rate=0.3,
max_depth=2,
resampling_method = 'cv', fold_num=5,
evaluation_metric = 'rmse', ref_metric=['mae'] )
hgr.fit(train_hdf, features=['ID', 'MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'], label='Target')CPU 시간: 사용자 4.81ms, sys: 408 μs, 총계: 5.22 ms
벽 시간: 633 ms
출력:
<hana_ml.algorithms.pal.trees.HybridGradientBoostingRegressor at 0x7f3333e9510>
참조
[1] SAP algorithm hana_ml.algorithms.pal 패키지:HybridGradientBoostingRegressor
기능 중요도
기능 중요도는 응답 또는 종속 변수 [1]을(를) 예측할 때 기여도에 따라 입력 기능에 점수를 지정합니다.
기능에 대한 점수가 높을수록 대상 변수를 예측하기 위해 모델에 미치는 영향이 커집니다. 중요도 점수가 [0, 1] 범위 내에 있습니다.
모델의 기능 중요도를 확인하는 방법은 다음과 같습니다.
가장 영향력 있는 특징은 'MedInc'이며, 중요도 값은 '0.51'인 것으로 관측된다. 이 기능은 블록 그룹의 중간 소득을 나타냅니다. "블록 그룹은 미국이 사용하는 가장 작은 지리적 단위입니다. Census Bureau publishes sample data" [2].
더욱이 3위와 5위에서는 각각 '위도'와 '경도'의 특징을 찾을 수 있다. 각각의 중요도 값은 '0.09'와 '0.05'입니다.
1hgr.feature_importances_.sort('IMPORTANCE', desc='TRUE').collect()| VARIABLE_NAME | IMPORTANCE | |
|---|---|---|
| 0 | MedInc | 0.513025 |
| 1 | ID | 0.230721 |
| 2 | 위도 | 0.097631 |
| 3 | AveOccup | 0.085743 |
| 4 | 경도 | 0.057718 |
| 5 | AveRooms | 0.011069 |
| 6 | 가구 연령 | 0.004093 |
| 7 | AveBedrms | 0.000000 |
| 8 | 인구 | 0.000000 |
참조
[1] SAP algorithm hana_ml.algorithms.pal 패키지: HybridGradientBoostingRegressor