KNIME

[KNIME] Loop 실습(3)

슈퍼짱짱 2024. 8. 29. 17:12
반응형

지난 포스팅에 이어 Window Loop StartGeneric Loop Start 노드에 대해 알아보겠다.

 

1. 활용할 데이터에 대한 설명 및 첨부파일과

2. Loop 노드에 대한 기본적인 설명

3. Counting Loop Start 노드에 대한 설명

4. Flow Varaibles에 대한 설명은 아래 링크에 있으며

2024.08.28 - [KNIME] - [KNIME] Loop 실습(1)

 

[KNIME] Loop 실습(1)

KNIME 노드에 loop를 검색하면 다양한 노드들이 나온다.  오늘은 이 Loop 노드들에 대해서 알아보고 실습해보겠다.  Loop 노드는 이름에서 알 수 있듯이 뭔가를 반복적으로 수행하는 노드이다.Loop S

leedakyeong.tistory.com

 

Group Loop Start 노드와 Column List Loop Start 노드에 대한 설명은 아래 링크에 있다.

2024.08.28 - [KNIME] - [KNIME] Loop 실습(2)

 

[KNIME] Loop 실습(2)

이전 포스팅에서 KNIME에서 Loop 노드가 어떤 역할을 하는지와 Counting Loop Start 노드 및 Flow variable에 대해 알아보았다.2024.08.28 - [KNIME] - [KNIME] Loop 실습(1) [KNIME] Loop 실습(1)KNIME 노드에 loop를 검색하면

leedakyeong.tistory.com

 


 

4. Window Loop Start

이번에는 Window Loop Start 노드에 대해 알아보겠다.

행을 기준으로 지정해준 window size만큼, step size씩 밀면서 데이터를 가져오거나 

혹은 시간 컬럼을 기준으로 정해준 시간만큼, 정해준 step size씩 밀면서 데이터를 가져오는 노드이다.

 

모델 학습 기법 중 시계열 데이터에 적용하는 Sliding Window 기법을 사용할 때 활용 할 수 있는 노드이다.

 

 

 

Window Loop Start 노드를 가져와 연결해준다.

Window Loop Start 노드 연결

 

 

옵션창을 들어가면 다음과 같이 행을 기준(Row based)으로 할지, 시간을 기준(Time based)으로 할지 선택할 수 있다.

 

Window Loop Start 옵션창

 

먼저 행을 기준으로 Window size를 2로, Step size를 1로 설정해보겠다.

 

Window Loop Start 옵션 설정

 

 

실행 시 첫 번째 loop에 대한 결과를 확인할 수 있다.

Window size를 2로 설정했기 때문에 위에서부터 2개 행만 불러와진 걸 확인할 수 있다.

 

Window Loop Start 실행 결과

 

Loop End 노드를 붙이고 실행한다.  

 

Loop End 노드 추가

 

실행 시 모든 loop의 결과가 합쳐진 결과가 나온다.

맨 오른쪽에 Iteration 컬럼이 생성되어 해당 row가 몇 번째 loop의 결과인지 알 수 있다.

맨 왼쪽에 RowID를 보면 원래 데이터 RowID 옆에 #과 몇 번째 Iteration인지도 붙어서 나온다.

 

Step size를 1로 설정해줬기 때문에 한 칸 씩 밀면서 데이터를 가져온다.

첫 번재 loop의 결과가 Row0, Row1이고

두 번째 loop의 결과가 Row1, Row2,

세 번째 loop의 결과가 Row2, Row3,

...

이다. 

 

Loop End 실행 결과

 

참고로 가장 마지막 행이 ? 인 이유는 Iteration 9에서 loop가 종료되는게 아니라 Iteration 10에서 loop가 종료되었기 때문이다.

즉, 가장 마지막 데이터가 window의 마지막이 아니라, 시작이 될 때까지 loop가 반복된다. 

 

Iteration 10

 

Iteration 9에서 loop가 종료되게 하려면 Window Loop Start 노드의 옵션창에서 위에 Advanced로 들어가 Limit window to tabled을 활성화시켜주면 된다.

 

Window Loop Start 옵션 설정

 

그럼 Loop End 노드 실행 시 window가 마지막 행에 도달했을 때 더이상 loop가 진행되지 않고 잘 끝나는걸 확인할 수 있다.

 

Loop End 실행 결과

 


 

Window Loop Start에서 Window size를 3으로, Step size를 2로 하면 Loop End의 결과는 다음과 같다.

 

Loop End 실행 결과

 

위에서부터 세건의 데이터씩 불러오며, Step size가 2이므로 두칸씩 이동한다.

즉, RowID 기준으로

첫 번째 loop는 0,1,2

두 번째 loop는 2,3,4

세 번째 loop는 4,5,6

...

이다.

 


 

이번에는 행이 아니라 시간을 기준으로 실습해보겠다.

 

birth 컬럼과 Window Loop Start 노드를 활용하여 각 멤버가 몇년대에 태어난 사람인지에 대한 컬럼을 생성해보겠다.(1960년대, 1970년대, ...)

 

단, birth 컬럼이 순서대로 정렬되어있지 않은 상태에서 바로 Window Loop Start 노드를 사용하면 에러가 난다.

 

Window Loop Size 에러메세지

 

따라서 Sorter 노드를 활용하여 정렬을 먼저 해주어야 한다.

 

Sorter 노드 추가

 

옵션창으로 들어가 birth 컬럼에 대해 오름차순 정렬을 해준다.

(Ascending : 오름차순, Descending : 내림차순)

 

Sorter 옵션창

 

 

그리고 나서 Window Loop Start 노드를 연결하고 Time based로 옵션을 설정한다.

birth 컬럼으로 설정하고 

Window size는 10년, Step size도 10년으로 설정한다.

 

단, Start at을 따로 1960-01-01 로 지정해주지 않으면

가장 먼저 태어난 지석진씨의 birth(1966-02-10)을 기준으로 10년씩 짤리기때문에

1960~1969, 1970~1979, ... 이 아니라

1966~1975, 1976~1985, ... 로 기준이 나뉘게 된다.

 

Window Loop Start 옵션창

 

Loop End 실행 시 다음과 같이 각 세대별로 Iteration이 나뉜것을 볼 수 있다.

 

Loop End 실행 결과

 

 

Iteration 컬럼을 Math Formula 노드에 활용하여 generation 컬럼을 생성할 수 있다.

 

Math Formula 노드 추가

 

Iteration 컬럼에 10을 곱하고 1960을 더해준다.

그리고 generation 이라는 이름으로 새로운 컬럼을 생성해주도록 설정한다.

 

Math Formula 옵션창

 

 

그러면 가장 오른쪽에 generation 컬럼이 생성되며, 몇년대에 태어난 사람인지 확인할 수 있다.

 

Math Formula 실행 결과

 


 

5. Generic Loop Start

 

마지막으로 Generic Loop Start 노드에 대해 알아보겠다.

다른 언어에서 while문과 동일한 역할을 하는 노드로, 그냥 무한 반복을 하는 노드이다.

 

따라서 그냥 Loop End 노드가 아니라 Variable Condition Loop End 노드를 사용하여 loop 종료 조건을 따로 전달해주어야한다.

 

Generic Loop Start, Variable Condition Loop End 노드 추가

 

 

이번에는 모델 학습 기법 중 시계열 데이터에 적용하는 Expanding Window 기법을 실습해 보겠다.

 

Generic Loop Start 노드 옆에 Row Filter 노드를 연결한다.

 

Row Filter 노드 연결

 

 

옵션창 켜서 Include rows by number 로 선택한다.

 

Include는 포함, Exclude는 제외를 의미하며

rows by attribute value는 입력한 값과 매칭되는 행을 포함하거나 제외하는 옵션이고

rows by number는 행의 범위를 기준으로 포함하거나 제외하는 옵션이며

rows by RowID는 RowID를 기준으로 포함하거나 제외하는 옵션이다.

 

Row Filter 옵션창

 

가장 첫 번째 데이터부터 가져오되, loop가 돌면서 한 건씩 늘어나는 방식이므로 Include rows by number로 선택해주고

First row number는 1로 해준다.

그리고 Last row number를 현재 몇 번째 loop인지에 대한 값(currentIteration)을 Flow Variables로 넘겨주어 매 loop마다 하나씩 늘어나도록 설정해준다.

 

Row Filter - Flow Variables

 

 

이렇게 설정하고 다시 Filter Criteria로 돌아오면 맨 아래에 The "RowRangeEnd" parameter is controlled by a variable. 이라는 문구가 뜬다.

 

즉, Last row number가 1,000 으로 설정되어있는것 처럼 보여도 사실은 Flow Variables로 설정해준 값으로 적용된다는 뜻이다.

 

Row Filter 옵션창

 

 

참고로 이전 노드에서 넘겨준 Flow Variables를 본 노드에 적용하고 싶을 때는 왼쪽에 옵션을 설정해주면되고

해당 노드에서 사용한 값을 다른 노드로 넘겨주고 싶을 땐 오른쪽에 variable이름을 설정해주면 된다.

 

 

Flow Variables 설정

 

 

 

Row Filter 노드 실행 시 가장 첫 번째 loop에 대한 결과를 볼 수 있다.

 

Flow Variables 확인해보면 첫 번째 loop이므로 currentIteration이 0이다.

즉, Row Filter에 Last row number를 1로 설정한것과 동일한 결과가 나온다. (RowRangeEnd에 1을 더한값이 Last row number에 적용된다.)

 

Row Filter 실행 결과

 

 

이제 Variable Condition Loop End 노드에 종료 조건을 입력한다.

전체 데이터가 10건이므로 currentIteration = 10일때 loop를 종료하도록 한다.

 

Variable Condition Loop End 옵션창

 

 

실행 시 다음과 같이 매 loop 마다 데이터가 한 건 씩 추가되는 결과를 볼 수 있다.

 

Variable Condition Loop End 실행 결과

 

 

Expanding Window 방식으로 학습 할 때 이런식으로 Generic Loop StartVariable Condition Loop End 노드를 활용하여 매 loop마다 train/test set 하나씩 늘어나는 데이터를 가져오고, Partitioning 노드를 활용하여 train/test set을 분리하여 학습하면 된다.

반응형