Introduction to h2o

1. 개요

머신 러닝은 현대 소프트웨어 개발에 필수적입니다. 우리는 다양한 아키텍처로 모델을 구축하고, 서로 다른 알고리즘을 사용하여 훈련시키며, 신경망으로 시스템을 개선하여 놀라운 결과를 달성합니다.

이 자습서에서는 h2o 플랫폼을 탐구할 것입니다. 이 플랫폼은 모델 생성, 훈련 및 조정을 간단하게 도와줍니다.

2. 오픈 소스 h2o 플랫폼 설치

h2o는 웹사이트에서 다운로드할 수 있습니다. 다운로드한 폴더에서 다음 명령어로 h2o 플랫폼을 시작할 수 있습니다:

java -jar h2o.jar

애플리케이션이 시작된 후에는 http://localhost:54321에서 웹 콘솔에 접근할 수 있습니다:

메인 페이지에서는 H2O 플랫폼에서 사용할 수 있는 작업들의 목록을 볼 수 있습니다. 이 목록은 메뉴 바를 사용하여도 표시할 수 있습니다. 상단 메뉴로 이동하여 도움말 옵션 아래의 도로 나를 안내해줘를 선택해보세요.

3. 데이터셋 준비

플랫폼 작업을 시작하기 전에 모델 훈련을 위한 데이터셋을 준비해야 합니다.

우리는 머신 러닝에서의 표준 분류 문제 중 하나를 해결할 것입니다. 이 도전에 대한 인기 있는 데이터셋은 iris라고 불립니다.

이 데이터셋에는 다양한 꽃의 종류와 그 속성들이 있습니다. 여기에서 CSV 형식으로 다운로드해 보세요. 데이터셋 파일에서는 다음 정보를 확인할 수 있습니다:

"sepal.length","sepal.width","petal.length","petal.width","variety"
5.1,3.5,1.4,.2,"Setosa"
4.9,3,1.4,.2,"Setosa"
4.7,3.2,1.3,.2,"Setosa"
...
5.8,2.7,3.9,1.2,"Versicolor"
6,2.7,5.1,1.6,"Versicolor"
5.4,3,4.5,1.5,"Versicolor"
...
6.5,3,5.2,2,"Virginica"
6.2,3.4,5.4,2.3,"Virginica"
5.9,3,5.1,1.8,"Virginica"

여기서는 아이리스 꽃의 특성과 특정 특성과 일치하는 꽃의 이름이 포함되어 있습니다.

4. 모델 훈련

준비된 데이터셋을 사용하여 모델을 훈련시켜 봅시다.

4.1. 데이터셋 가져오기

웹 콘솔에서 준비된 데이터셋을 로드합니다. importFiles 옵션을 사용해야 합니다. 상단 메뉴에서 데이터 옵션 아래의 파일 가져오기를 선택한 후, 데이터셋이 있는 폴더를 선택하고 파일을 검색한 다음 가져오기 버튼을 누릅니다:

### 4.2. 훈련 및 테스트 데이터셋 준비

데이터셋이 업로드되면 getFrames 함수를 사용할 수 있습니다. 상단 메뉴에서 데이터 옵션 아래의 모든 프레임 목록을 선택한 후 구문 분석 버튼을 누릅니다:

이 작업의 출력에서 데이터셋 열 설명과 몇 개의 예제를 확인할 수 있습니다.

표준 머신 러닝 관행을 따르고 모델에 대한 데이터를 준비하려면 데이터셋을 훈련 및 테스트 부분으로 분할해야 합니다. splitFrame 함수를 사용할 것입니다. 상단 메뉴에서 데이터 옵션 아래의 프레임 분할을 선택합니다. 이제 훈련과 테스트를 위해 일반적인 80/20 비율을 적용하겠습니다:

### 4.3. 모델 구축

이제 모델을 구축해 보겠습니다. 상단 메뉴에서 모델 옵션을 선택합니다. 우리는 랜덤 포레스트 알고리즘을 사용할 것입니다. 이 알고리즘은 분류 문제에 잘 작동합니다:

모델 훈련 과정을 가능하게 하려면 trainingframe, validationframe, response_column을 지정해야 합니다. 선택한 알고리즘에 따라 더 나은 결과를 얻기 위해 수정할 수 있는 많은 다른 속성들이 있습니다. 모든 속성이 구성된 후 모델 빌드 버튼을 누릅니다:

### 4.4. 자동 ML 기능

h2o의 또 다른 훌륭한 기능은 AutoML입니다. 상단 메뉴에서 모델 옵션 아래의 자동 ML 실행을 선택합니다. 특정 알고리즘을 사용하고자 할 경우 이 기능을 선택할 수 있습니다. 여기에서 일반 빌드 과정과 동일한 매개변수를 지정해야 합니다. 또한 플랫폼이 모든 모델을 훈련하도록 원하는 maxruntimesecs 값을 설정합니다. 이 시간 동안 AutoML 메커니즘이 모델을 훈련합니다. 우리가 설정하는 값이 높을수록 최상의 모델이 더 정확하게 결정됩니다:

모델 훈련 과정이 완료되면 모든 모델의 리더보드를 확인할 수 있습니다.** 이 목록에서 사용하고자 하는 적합한 훈련된 모델을 선택할 수 있습니다**:

### 4.5. 모델 다운로드

모델을 구축하면 필요한 아티팩트를 다운로드할 수 있습니다. Download Gen Model 버튼을 사용하여 Java 애플리케이션에서 필요한 클래스를 포함하는 JAR 아카이브를 다운로드할 수 있습니다:

Download Model Deployment Package (MOJO) 버튼을 사용하여 모델 자체를 다운로드합니다:

## 5. Java 애플리케이션에서 모델 예측 사용하기

이제 Java 애플리케이션에서 우리의 모델을 사용해 보겠습니다.

5.1. h2o 아카이브 추가

h2o 콘솔에서 다운로드한 아카이브를 애플리케이션 프로젝트 내의 libs 폴더에 추가합니다. 이제 클래스 경로에 추가할 수 있습니다.

5.2. 종속성

모델 종속성을 추가합니다:

freestar
<dependency>
    <groupId>ai.h2o</groupId>
    <artifactId>h2o-genmodel</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/libs/h2o-genmodel.jar</systemPath>
</dependency>

모델 아카이브에 대한 경로를 지정합니다. groupIdartifactId는 h2o에 사전 정의되어 있습니다.

5.3. 수동으로 구축한 모델로 예측하기

이제 Java 코드에서 모델을 사용하는 방법을 살펴봅시다:

public¨NBSP;class H2OModelLiveTest {

    Logger logger = LoggerFactory.getLogger(H2OModelLiveTest.class);

    @Test
    public void givenH2OTrainedModel_whenPredictTheIrisByFeatures_thenExpectedFlowerShouldBeReturned() throws IOException, PredictException {
        String mojoFilePath = "libs/mojo.zip";

        MojoModel mojoModel = MojoModel.load(mojoFilePath);
        EasyPredictModelWrapper model = new EasyPredictModelWrapper(mojoModel);

        RowData row = new RowData();
        row.put("sepal.length", 5.1);
        row.put("sepal.width", 3.4);
        row.put("petal.length", 4.6);
        row.put("petal.width", 1.2);

        MultinomialModelPrediction prediction = model.predictMultinomial(row);

        Assertions.assertEquals("Versicolor", prediction.label);

        logger.info("Class probabilities: ");
        for (int i = 0; i < prediction.classProbabilities.length; i++) {
            logger.info("Class " + i + ": " + prediction.classProbabilities[i]);
        }
    }
}

우리는 MOJO 아카이브에서 MojoModel을 생성하고 이를 EasyPredictModelWrapper 클래스로 감쌉니다. 다음으로 우리가 분류하고자 하는 꽃 기준으로 행을 준비합니다. 그런 다음 predictMultinomial() 메서드를 사용하여 예측을 수행합니다. 이 속성 세트는 Versicolor로 분류됩니다. 추가로 출력 매개변수를 모두 인쇄합니다.

출력은 우리의 분류가 확률 0.9597로 정확하다는 것을 보여줍니다. 이는 우리에게 충분히 좋은 결과입니다:

19:33:48.648 [main] INFO  com.baeldung.h2o.H2OModelLiveTest - Class probabilities: 
19:33:48.653 [main] INFO  com.baeldung.h2o.H2OModelLiveTest - Class 0: 0.016846955011789237
19:33:48.653 [main] INFO  com.baeldung.h2o.H2OModelLiveTest - Class 1: 0.9597659357519948
19:33:48.653 [main] INFO  com.baeldung.h2o.H2OModelLiveTest - Class 2: 0.023387109236216036

5.4. AutoML 모델을 사용하여 예측하기

이제 AutoML h2o 함수에서 제안된 최상의 모델을 사용하여 예측을 실행해 보겠습니다:

@Test
public void givenH2OTrainedAutoMLModel_whenPredictTheIrisByFeatures_thenExpectedFlowerShouldBeReturned() throws IOException, PredictException {
    String mojoFilePath = "libs/automl_model.zip";

    MojoModel mojoModel = MojoModel.load(mojoFilePath);
    EasyPredictModelWrapper model = new EasyPredictModelWrapper(mojoModel);

    RowData row = new RowData();
    row.put("sepal.length", 5.1);
    row.put("sepal.width", 3.4);
    row.put("petal.length", 4.6);
    row.put("petal.width", 1.2);

    MultinomialModelPrediction prediction = model.predictMultinomial(row);

    Assertions.assertEquals("Versicolor", prediction.label);

    logger.info("Class probabilities: ");
    for (int i = 0; i < prediction.classProbabilities.length; i++) {
        logger.info("Class " + i + ": " + prediction.classProbabilities[i]);
    }
}

보시다시피, 이 모델도 같은 결과로 성공적으로 분류했지만, 이 경우 확률이 더 낮습니다:

20:28:06.440 [main] INFO  com.baeldung.h2o.H2OModelLiveTest - Class probabilities: 
20:28:06.443 [main] INFO  com.baeldung.h2o.H2OModelLiveTest - Class 0: 0.08536296008169375
20:28:06.443 [main] INFO  com.baeldung.h2o.H2OModelLiveTest - Class 1: 0.8451806663486182
20:28:06.443 [main] INFO  com.baeldung.h2o.H2OModelLiveTest - Class 2: 0.06945637356968806

6. 결론

이 글에서는 h2o 플랫폼을 탐구했습니다. 이 도구를 사용하면 신경망을 훈련하고 Java 애플리케이션을 위한 아티팩트를 준비할 수 있습니다. 이는 Python에 대한 지식과 추가 라이브러리가 필요한 주류 ML 스택에 깊이 들어가기 원하지 않을 때 유용합니다.

코드는 항상 GitHub에 있습니다.

원본 출처

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다