Java 다항식 회귀 분석과 추세선 그리기- 2차 다항식

데이터 분석에서 특정한 경향성을 찾고 예측하는 것은 매우 중요합니다. 특히, 데이터를 단순한 직선이 아니라 곡선으로 적합시키는 다항식 회귀(Polynomial Regression)는 다양한 분야에서 활용됩니다. 이번 글에서는 Java를 활용하여 다항식 회귀 추세선을 구현하는 방법을 살펴보겠습니다.

다항식 회귀란?

다항식 회귀(Polynomial Regression)는 선형 회귀의 확장 버전으로, 데이터의 패턴이 직선이 아닌 곡선 형태일 때 사용됩니다. 일반적으로 다음과 같은 형태의 방정식을 사용합니다.

이 방정식을 기반으로 데이터를 가장 잘 설명할 수 있는 계수를 찾아내는 것이 다항식 회귀의 목표입니다.

Java를 활용한 다항식 회귀 구현

Java에서는 다항식 회귀를 구현하기 위해 매트릭스 연산을 활용할 수 있습니다. 아래는 PolynomialFitter 클래스를 사용하여 데이터를 기반으로 다항식 회귀 모델을 만들고, 최적의 다항식을 찾는 코드입니다.

1. PolynomialFitter 클래스 개요

이 클래스는 다항식 회귀 모델을 생성하고, 주어진 데이터 포인트를 추가한 후, 최소제곱법(Least Squares Method)을 이용하여 최적의 회귀 방정식을 찾습니다.

public class PolynomialFitter {
    private final int p, rs;
    private long n = 0;
    private final double[][] m;
    private final double[] mpc;

    public PolynomialFitter(final int degree) {
        assert degree > 0;
        p = degree + 1;
        rs = 2 * p - 1;
        m = new double[p][p + 1];
        mpc = new double[rs];
    }

    public void addPoint(final double x, final double y) {
        n++;
        for (int r = 1; r < rs; r++) {
            mpc[r] += Math.pow(x, r);
        }
        m[0][p] += y;
        for (int r = 1; r < p; r++) {
            m[r][p] += Math.pow(x, r) * y;
        }
    }

    public Polynomial getBestFit() {
        final double[] mpcClone = mpc.clone();
        final double[][] mClone = new double[m.length][];
        for (int x = 0; x < mClone.length; x++) {
            mClone[x] = m[x].clone();
        }
        mpcClone[0] += n;

        for (int r = 0; r < p; r++) {
            for (int c = 0; c < p; c++) {
                mClone[r][c] = mpcClone[r + c];
            }
        }
        
        gj_echelonize(mClone);
        final Polynomial result = new Polynomial(p);
        for (int j = 0; j < p; j++) {
            result.add(j, mClone[j][p]);
        }
        return result;
    }
}

2. 다항식 모델의 적용

아래는 PolynomialFitter 클래스를 활용하여 데이터를 추가하고, 최적의 다항식을 찾는 코드입니다.

public class Test {
    public static void main(String args[]) {
        PolynomialFitter va = new PolynomialFitter(2);
        
        va.addPoint(22.6, 5.8);
        va.addPoint(40.9, 11.7);
        va.addPoint(61.3, 15.6);
        va.addPoint(81.1, 16.2);
        va.addPoint(129.7, 19);
        va.addPoint(84.2, 17.7);
        va.addPoint(110, 18.4);
        va.addPoint(99.3, 18.3);
        
        System.out.println(va.getBestFit().toString());
    }
}

이 코드는 여러 개의 데이터 포인트를 추가한 후, 2차 다항식(이차 함수)으로 최적화하여 결과를 출력합니다.

다항식 회귀의 활용

다항식 회귀는 다양한 분야에서 활용될 수 있습니다.

  • 금융 분야: 주가 예측, 금융 데이터 분석
  • 공학 및 물리학: 실험 데이터 모델링, 물리적 현상의 예측
  • 경제학: 소비 패턴 분석
  • 기계 학습: 비선형 관계를 가지는 데이터 분석

결론

다항식 회귀는 선형 회귀보다 더욱 복잡한 관계를 설명하는 데 유용한 도구입니다. Java를 활용하여 다항식 회귀를 구현하고, 실제 데이터를 모델링할 수 있으며, 이를 통해 보다 정밀한 예측을 수행할 수 있습니다. 본 글에서 소개한 코드와 원리를 이해하면, 다양한 데이터 분석 작업에 이를 적용할 수 있을 것입니다.