Genetic Programing은 미리 처리해야 합니까?

개시하다


이번에는 GP(Genetic Programing)가 사전 처리가 필요한지 확인합니다.
GP가 무엇인지이전 기사가 설명하고 있다.
또한 여기서 말한 예처리는 귀일화 또는 표준화를 가리키며 결손치 충전과 분포 변형을 포함하지 않는다.

어떻게 된 거야?


기계 학습에서 함수가 비슷할 때는 일반적으로 정규화, 표준화 등 예처리를 끼워 넣는다.
이것은 일반적으로 머신러닝에서 입력한 정의 영역이 일정한 범위로 가정되기 때문입니다. 예를 들어 Neural Network에서 최소 처리 단위의 활성화 함수는 다음과 같은 형식입니다. (그림 그림 그림)

0을 입력할 때 수치가 큰 변화가 있을 뿐만 아니라 -3~3 사이 이외에 큰 변화가 없을 것을 감안하여 예처리의 한 목적은 이 은밀한 정의 구역에서 입력 데이터의 분포(예처리를 하지 않으면bias항은 지나치게 중요한 매개 변수가 될 수 있다).

즉, 예처리는 기계 학습을 위한 것이다. 다른 한편, 유전 프로그래밍은 예처리(이론적)가 필요하지 않다. 유전 프로그래밍에서 가장 작은 처리 단위의 노드 함수는 통용 수학 함수이기 때문에 정의역이 없다. 예를 들어사칙 연산과 삼각 함수에는 정의 영역이 존재하지 않습니다(log 제외).

반면 삼각함수와 Exp 함수에서 입력한 정의 영역이 [0.0, 1.0]이면 선형 연산에 가깝기 때문에 연산자 자체를 구성하지 않는다는 뜻이다. 또한 표준화에 따라 0을 평균값으로 설정하면 제법 함수에 발산점이 존재하기 때문에 함수가 거의 고장날 수 있다.

실제로 옛 GP의 문헌을 봤는데 예처리 기술이 없다. 최근에는 기계학습과 공정한 경쟁을 위해 예처리를 한다는 인상을 준다.

실험


의 목적


나는 GP에 예처리가 필요한지 조사했지만 GP에서 기계학습 전에 처리한 문헌만 찾을 수 있기 때문에 실제 실험을 통해 확인해야 한다.

실험 내용


boston과 diabbetes의 회귀 문제에 대해 다음과 같은 결과를 얻었다.
  • 사전 처리 GP로 통합(MinMaxSccaller)
  • 표준화(StandardScaller)를 사전 처리 GP
  • 로 사용
  • 사전 처리되지 않은 GP
  • 이때 미리 처리된 GP를 사용하여 함수가 근사한 후에 이 함수의 출력을 역변환하여 원시 데이터의 비율에서 출력할 수 있다.

    이번 GP의 매개 변수는 다음과 같다.
  • Max Generation : 200
  • Population Size : 500
  • Crossover : subtree swap
  • Crossover rate : 0.8
  • Mutation : subtree recreate
  • Mutation rate : 0.2
  • Selection : Batch Tournament Selection
  • Batch Size : 8
  • Tournament Size : 64
  • Depth Limit : 6
  • Function Nodes : [+,-,×,÷,sin, cos, exp, log]
  • Terminal Nodes : [$x_i$, ERC]
  • ERC range : [0.0, 1.0]
  • 또 실험에서 GP별로 10차례 시험해 평균치로 비교한 결과 데이터가 7:3로 분류됐다.

    실험 결과


    다음은 학습 데이터와 테스트 데이터 중의 MAE 오차를 비교한다.

    Boston Dataset


    training
    test
    귀일화 GP
    22.310
    22.250
    표준화 GP
    22.236
    22.563
    GP
    20.560
    22.145
    생각보다 차이가 없어서 예처리가 있고 결과가 없으면 큰 변화가 있을 줄 알았어요...
    결과는 GP를 미리 처리하지 않은 것이 가장 좋은 결과였지만 테스트의 MAE는 거의 변화가 없었다.

    Diabetes Dataset


    training
    test
    귀일화 GP
    155.389
    152.868
    표준화 GP
    147.185
    144.136
    GP
    150.205
    150.049
    이곳의 비례자는 비교적 크고 차이가 매우 뚜렷하다. GP를 표준화하는 것이 가장 좋은 결과이다. 솔직히 나는 0을 평균 표준화하는 것이 GP에 좋지 않은 영향을 미칠 것이라고 생각한다...

    끝말


    결론적으로 문제에 의존하기 때문에 모든 방법을 시도해야 한다는 것을 깨달았다. 실험을 하기 전에 미리 처리하지 않는 것이 좋다고 생각했다...
    앞으로 나는 문제의 수를 늘려 일반성을 시험해 보고 싶다. 또한 이번 결과는 10차례의 시험 평균치로 무작위 수의 영향을 볼 수 있다. 100회나 1000차례의 시험 평균을 해야 하기 때문에 다음 과제로 삼아야 한다.
    그리고 이번 결과에 차이가 거의 없다는 점을 고려하면 머신러닝에서 예처리가 필수적이지만 GP에서도 꼭 필요한 것은 아니라고 할 수 있어 흥미로운 결과다.

    좋은 웹페이지 즐겨찾기