이 프로젝트는 **유전 알고리즘(Genetic Algorithm)**을 사용하여 **기호 회귀(Symbolic Regression)**를 수행하는 모델을 구현한 것입니다. 주어진
Pandas DataFrame을 사용하여 데이터셋을 불러오고, 지정된 인덱스에 따라
방정식(개체)은 전위 순회(Pre-order Traversal) 형태의 트리로 표현되며, 유전 알고리즘 라이브러리가 정수 형태의 유전자를 요구하기 때문에 피연산자와 연산자를 정수형으로 변환하여 사용합니다.
- 예:
"x": 10, "-": 11, "/": 12, "*": 13, "+": 14, "**": 15, "END": 16 - 모든 개체는 동일한 개수의 유전자를 가지도록 남는 공간은
16 (END)으로 채워집니다.
최대 깊이(Max Depth)를 지정하여 오버플로우(예:
개체의 적합도를 평가하기 위해 다음의 변환 과정을 거칩니다:
- 전위 순회 형태의 정수 리스트를 문자열 리스트로 변환
- 전위 순회(Pre-order) 문자열을 중위 순회(In-order) 문자열로 재배열
-
$x$ 값을 대입하여 평가(Evaluation) 수행. 이때 잘못된 수식(예: 0으로 나누기)은 필터링하여 처리합니다.
적합도 함수는 **평균 제곱 오차(MSE, Mean Squared Error)**와 수식의 복잡도의 가중합으로 계산됩니다.
-
$\alpha, \beta$ 파라미터를 사용하여 정확도와 수식의 길이(단순함) 사이의 비중을 조절할 수 있습니다. -
$\beta = 0$ 으로 설정하면 정확도에만 초점을 맞추지만 불필요하게 긴 수식이 나올 수 있으며,$\beta$ 값을 높이면 간결한 수식을 찾는 데 집중합니다.
- 변이 (Mutation): 임의의 연산자나 피연산자를 선택하여 다른 무작위 연산자/피연산자로 교체하여 변이를 수행합니다.
- 교차 (Crossover): 선택된 부모 개체들의 유전자를 교환하여 새로운 자손(Offspring)을 생성합니다.
pygad라이브러리를 사용하여 유전 알고리즘을 실행합니다.- 다양한 돌연변이 확률(Mutation rate), 교차 확률(Crossover probability), 부모 선택 방식(Parent selection)을 적용하여 모델을 실험합니다.
- Matplotlib을 활용해 각 파라미터 조합에 따른 적합도(Fitness) 변화를 3D 그래프 등으로 시각화하여 결과를 분석합니다.
- Python
- PyGAD (Genetic Algorithm 구현)
- SymPy (기호 연산)
- Pandas, NumPy (데이터 처리)
- Matplotlib, Seaborn (데이터 시각화)