Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

Genetic Programming for Symbolic Regression

이 프로젝트는 **유전 알고리즘(Genetic Algorithm)**을 사용하여 **기호 회귀(Symbolic Regression)**를 수행하는 모델을 구현한 것입니다. 주어진 $x$값과 $y$값 데이터셋을 바탕으로, 해당 $y$값을 도출해내는 원본 수학 방정식을 찾아내는 것을 목표로 합니다.

📌 주요 특징 및 구현 방법

1. 데이터 처리

Pandas DataFrame을 사용하여 데이터셋을 불러오고, 지정된 인덱스에 따라 $x$값, $y$값, 그리고 실제 방정식 데이터로 분할하여 사용합니다.

2. 유전자 표현 (Representation)

방정식(개체)은 전위 순회(Pre-order Traversal) 형태의 트리로 표현되며, 유전 알고리즘 라이브러리가 정수 형태의 유전자를 요구하기 때문에 피연산자와 연산자를 정수형으로 변환하여 사용합니다.

  • 예: "x": 10, "-": 11, "/": 12, "*": 13, "+": 14, "**": 15, "END": 16
  • 모든 개체는 동일한 개수의 유전자를 가지도록 남는 공간은 16 (END)으로 채워집니다.

3. 초기 모집단 생성 (Initialization)

최대 깊이(Max Depth)를 지정하여 오버플로우(예: $x^x$)를 방지하면서 무작위로 수식을 생성해 초기 모집단을 구성합니다.

4. 수식 평가 (Evaluation)

개체의 적합도를 평가하기 위해 다음의 변환 과정을 거칩니다:

  1. 전위 순회 형태의 정수 리스트를 문자열 리스트로 변환
  2. 전위 순회(Pre-order) 문자열을 중위 순회(In-order) 문자열로 재배열
  3. $x$값을 대입하여 평가(Evaluation) 수행. 이때 잘못된 수식(예: 0으로 나누기)은 필터링하여 처리합니다.

5. 적합도 함수 (Fitness Function)

적합도 함수는 **평균 제곱 오차(MSE, Mean Squared Error)**와 수식의 복잡도의 가중합으로 계산됩니다.

  • $\alpha, \beta$ 파라미터를 사용하여 정확도와 수식의 길이(단순함) 사이의 비중을 조절할 수 있습니다.
  • $\beta = 0$으로 설정하면 정확도에만 초점을 맞추지만 불필요하게 긴 수식이 나올 수 있으며, $\beta$ 값을 높이면 간결한 수식을 찾는 데 집중합니다.

6. 진화 연산 (Evolutionary Operations)

  • 변이 (Mutation): 임의의 연산자나 피연산자를 선택하여 다른 무작위 연산자/피연산자로 교체하여 변이를 수행합니다.
  • 교차 (Crossover): 선택된 부모 개체들의 유전자를 교환하여 새로운 자손(Offspring)을 생성합니다.

7. 실험 및 시각화 (Experiment & Visualization)

  • pygad 라이브러리를 사용하여 유전 알고리즘을 실행합니다.
  • 다양한 돌연변이 확률(Mutation rate), 교차 확률(Crossover probability), 부모 선택 방식(Parent selection)을 적용하여 모델을 실험합니다.
  • Matplotlib을 활용해 각 파라미터 조합에 따른 적합도(Fitness) 변화를 3D 그래프 등으로 시각화하여 결과를 분석합니다.

🛠️ 사용 기술 및 라이브러리

  • Python
  • PyGAD (Genetic Algorithm 구현)
  • SymPy (기호 연산)
  • Pandas, NumPy (데이터 처리)
  • Matplotlib, Seaborn (데이터 시각화)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages