본 번역은 검증되지 않았습니다. AIP를 통해 영문원문으로부터 번역되었습니다.

그리드 서치 수행

기능 중단

아래의 문서는 더 이상 플랫폼에서 사용이 권장되지 않는 foundry_ml 라이브러리를 설명하고 있습니다. 대신 palantir_models 라이브러리를 사용하십시오.

foundry_ml 라이브러리는 Python 3.9의 예정된 폐기와 함께 2025년 10월 31일에 제거될 예정입니다.

모델을 개발할 때는 효과적인 값 조합을 찾을 때까지 하이퍼파라미터를 실험하고 싶을 수 있습니다. Foundry 내에서는 일반적인 라이브러리나 사용자 정의 코드를 사용하여 모델 훈련 중에 하이퍼파라미터 최적화를 수행하고 측정치와 메타데이터와 함께 하나 이상의 "우승" 모델을 저장할 수 있습니다.

이 예제는 Code Repositories 내에서 Python 변환을 통해 scikit-learn의 GridSearchCV를 사용하는 방법을 보여줍니다. 이 예제는 scikit-learn 호환 모델을 "적합 가능" 클래스로 감싸서 파라미터 세트에 대해 교차 검증을 수행하고 최적의 모델을 산출합니다.

이 구현은 단일, 큰 드라이버에서 그리드 서치를 수행합니다. 저장소에 프로파일을 활성화하는 방법을 확인하려면 Spark 프로파일 문서를 참고하십시오. 또한 Spark를 활용하여 분산 그리드서치를 구현하는 것도 가능합니다(예를 들어, pandas_udf와 훈련 함수를 사용하여), 비록 이것이 아래에서 구현되지 않았지만.

다중 결과물 형식은 한 변환에서 여러 모델을 훈련하는 데에도 유용할 수 있습니다.

아래의 예제는 최상위 모델을 추출하고 관련 평가 측정치를 저장합니다. 이 예제는 Modelling Objective 튜토리얼에서 주택 데이터를 사용합니다.

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 from transforms.api import transform, Input, Output, configure from sklearn.compose import make_column_transformer from sklearn.preprocessing import StandardScaler from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import GridSearchCV import pandas as pd from foundry_ml_sklearn.utils import extract_matrix from foundry_ml import Model, Stage from foundry_ml_metrics import MetricSet # 드라이버 코어와 메모리 오버헤드를 extra large로 설정 @configure(profile=['DRIVER_CORES_EXTRA_LARGE', 'DRIVER_MEMORY_OVERHEAD_EXTRA_LARGE']) @transform( # 학습 데이터와 모델, 메트릭스의 경로를 입력 training_data=Input('/Public/.../training_data'), out_model=Output('/Public/.../mo_model'), out_metrics=Output('/Public/.../mo_training_metrics'), ) def brown_hair_by_sex(training_data, out_model, out_metrics): # 데이터프레임을 pandas 형태로 변환 training = training_data.dataframe().toPandas() # passthrough 옵션은 숫자 열을 feature 벡터로 결합 column_transformer = make_column_transformer( (StandardScaler(), ['median_income', "housing_median_age", "total_rooms"]) ) # column transformer를 vectorizer로 적용 column_transformer.fit(training) # vectorizer를 Stage로 감싸서 이것이 Model에서 적용될 변환임을 나타냄 vectorizer = Stage(column_transformer) training_df = vectorizer.transform(training) # 벡터의 열을 NumPy 행렬로 변환하고 희소성을 처리하는 helper 함수 호출 X = extract_matrix(training_df, 'features') y = training_df['median_house_value'] # 옵션의 매개변수 그리드 생성 param_grid = [ {'n_estimators': [3, 10, 30], 'max_features': [2, 3]}, {'bootstrap': [False], 'n_estimators': [3, 10], 'max_features': [2, 3]}, ] # 알고리즘 선택 및 교차 검증에 사용할 메트릭 선택 forest_reg = RandomForestRegressor() grid_search = GridSearchCV(forest_reg, param_grid, cv=5, scoring='neg_mean_squared_error') grid_search.fit(X, y) # 내부 cv 결과 가져오기 - 최고 모델 cv_results = pd.DataFrame(grid_search.cv_results_).select_dtypes(include=['number']) # 메트릭 추출 및 딕셔너리로 변환 cv_results = cv_results[cv_results['rank_test_score'] == 1].to_dict('records')[0] # 이제 변환의 파이프라인을 포함하는 Model 객체 반환 model = Model(vectorizer, Stage(grid_search.best_estimator_, input_column_name='features')) # 최고 점수를 메트릭스로 저장 metric_set = MetricSet( model = model, input_data=training_data ) # 메트릭스를 metricset에 추가 for key, value in cv_results.items(): metric_set.add(name=key, value=value) model.save(out_model) metric_set.save(out_metrics)