Python에서 다항식 회귀 구현

Muhammad Husnain 2024년2월15일
  1. 회귀의 정의
  2. 회귀 유형
  3. Python에서 다항식 회귀 구현
Python에서 다항식 회귀 구현

이 기사에서는 다항식 회귀와 Python을 사용하여 이를 실제 데이터에 적용하는 방법에 대해 설명합니다.

먼저 회귀가 무엇이며 다항식 회귀와 어떻게 다른지 이해합니다. 그런 다음 다항식 회귀가 특별히 필요한 경우를 살펴보겠습니다.

개념을 더 잘 이해하기 위해 여러 프로그래밍 예제를 함께 볼 것입니다.

회귀의 정의

회귀는 독립 변수 또는 특성과 종속 변수 또는 결과 사이의 관계를 결정하기 위한 통계적 방법입니다. 기계 학습에서는 알고리즘을 사용하여 지속적인 결과를 예상하는 예측 모델링 방법으로 사용됩니다.

감독 기계 학습에서 회귀 문제의 솔루션은 기계 학습 모델 중에서 가장 일반적인 응용 프로그램 중 하나입니다.

보이지 않는 일부 입력 데이터 세트를 기반으로 일부 결과를 예측하기 위해 종속 변수와 독립 변수 사이의 관계를 찾도록 알고리즘을 훈련합니다.

회귀 모델은 응용 프로그램이 일부 입력 데이터 또는 기록 데이터를 기반으로 미래 데이터를 예측해야 하는 예측 분석 모델에서 주로 사용됩니다. 예를 들어 조직은 회귀 분석을 사용하여 현재 판매 데이터를 기반으로 다음 달 판매를 예측할 수 있습니다.

의료 회사는 회귀 모델을 사용하여 특정 기간 동안 대중의 건강 추세를 예측할 수 있습니다. 회귀 기술의 일반적인 용도는 다음과 같습니다.

  1. 재산 가치, 주가 또는 판매와 같은 지속적인 결과 예측
  2. 미래의 소매 판매 또는 마케팅 활동의 성과를 예측하여 자원 사용을 극대화합니다.
  3. 스트리밍 서비스, 쇼핑 웹사이트 등 고객 또는 사용자 패턴 예측
  4. 데이터 세트를 분석하여 변수와 출력이 어떻게 관련되어 있는지 파악합니다.
  5. 다양한 요인에 따른 금리 및 주가 예측
  6. 시계열 시각화 생성.

회귀 유형

많은 회귀 기법이 있지만 주로 세 가지 주요 범주로 그룹화됩니다.

  1. 단순 선형 회귀
  2. 로지스틱 회귀
  3. 다중 선형 회귀

단순 선형 회귀

단순 선형 회귀는 선과 데이터 포인트 사이의 오류를 최소화하기 위해 데이터 포인트 내에 직선을 그리는 선형 회귀 접근 방식입니다. 이것은 기계 학습 회귀의 가장 기본적이고 간단한 형태 중 하나입니다.

이 시나리오에서 독립 변수와 종속 변수는 선형 관계를 갖는 것으로 간주됩니다.

로지스틱 회귀

종속 변수가 true 또는 false 또는 yes 또는 no의 두 값만 가질 수 있는 경우 로지스틱 회귀가 사용됩니다. 종속 변수가 발생할 확률은 로지스틱 회귀 모델을 사용하여 예측할 수 있습니다.

대부분의 경우 출력 값은 이진수여야 합니다. 종속 변수와 독립 변수 간의 관계는 시그모이드 곡선을 사용하여 매핑할 수 있습니다.

다중 선형 회귀

다중 선형 회귀는 둘 이상의 독립 변수가 사용될 때 사용됩니다. 다중 선형 회귀 기술에는 다항식 회귀가 포함됩니다.

독립 변수가 많으면 다중 선형 회귀입니다. 수많은 독립 변수가 존재할 때 기본 선형 회귀보다 더 나은 적합도를 달성합니다.

2차원으로 표시될 때 결과는 데이터 포인트에 맞는 곡선입니다.

단순 회귀에서는 독립 값을 사용하여 종속 변수의 값을 찾기 위해 다음 공식을 사용했습니다.

$$
y = a+bx+c
$$

어디:

  • y는 종속 변수입니다.
  • a는 y 절편입니다.
  • b는 기울기입니다.
  • c는 오류율입니다.

많은 경우에 선형 회귀는 둘 이상의 독립 변수가 있는 경우 완벽한 결과를 제공하지 않습니다. 다항식 회귀가 필요하기 때문입니다.

$$
y = a_0 + a_1x_1 + a_2x_2^2 + …..+ a_nx_n^n
$$

보시다시피 yx의 종속 변수입니다.

이 다항식의 차수는 높은 차수가 데이터에 과적합되므로 최적의 값을 가져야 합니다. 차수 값이 낮을수록 모형이 결과에 과소 적합합니다.

Python에서 다항식 회귀 구현

Python에는 데이터 포인트 간의 연결을 결정하고 다항식 회귀선을 그리는 기능이 포함되어 있습니다. 수학 공식을 살펴보는 대신 이러한 전략을 사용하는 방법을 보여드리겠습니다.

아래 예에서는 18대의 자동차가 요금소를 통과하면서 등록되었습니다. 우리는 차가 우리를 지나쳤을 때 자동차의 속도와 시간(시간)을 기록했습니다.

시간은 xAxis에 표시되고 속도는 yAxis에 표시됩니다.

import matplotlib.pyplot as plot

xAxis = [
    10,
    20,
    30,
    50,
    60,
    70,
    80,
    90,
    100,
    120,
    130,
    140,
    150,
    160,
    180,
    190,
    210,
    220,
]
yAxis = [96, 95, 84, 65, 60, 59, 65, 55, 71, 75, 78, 86, 88, 79, 95, 98, 99, 100]

plot.scatter(xAxis, yAxis)
plot.show()

출력:

다항식 회귀 - 산점도

이제 NumPy와 Matplotlib를 사용하여 다항식 회귀를 그릴 것입니다.

import numpy
import matplotlib.pyplot as plot

xAxis = [
    10,
    20,
    30,
    50,
    60,
    70,
    80,
    90,
    100,
    120,
    130,
    140,
    150,
    160,
    180,
    190,
    210,
    220,
]
yAxis = [96, 95, 84, 65, 60, 59, 65, 55, 71, 75, 78, 86, 88, 79, 95, 98, 99, 100]

model = numpy.poly1d(numpy.polyfit(xAxis, yAxis, 3))

linesp = numpy.linspace(10, 220, 100)

plot.scatter(xAxis, yAxis)
plot.plot(linesp, model(linesp))
plot.show()

출력:

다항식 회귀 - 그래프

위의 예에서 import 문을 사용하여 다항식 회귀를 그리기 위해 NumPy 및 Matplotlib 라이브러리를 사용했습니다. 그런 다음 다음과 같이 x축 및 y축에 대한 배열을 만들었습니다.

xAxis = [
    10,
    20,
    30,
    50,
    60,
    70,
    80,
    90,
    100,
    120,
    130,
    140,
    150,
    160,
    180,
    190,
    210,
    220,
]
yAxis = [96, 95, 84, 65, 60, 59, 65, 55, 71, 75, 78, 86, 88, 79, 95, 98, 99, 100]

이제 다항식 모델을 만들기 위해 NumPy 라이브러리의 방법을 다음과 같이 사용했습니다.

model = numpy.poly1d(numpy.polyfit(xAxis, yAxis, 3))

이제 선을 표시하는 방법을 지정합니다. 우리의 경우 10에서 220까지 시작했습니다.

linesp = numpy.linspace(10, 220, 100)

코드의 마지막 세 줄은 플롯을 그린 다음 회귀선을 그린 다음 플롯을 표시하는 데 사용됩니다.

plot.scatter(xAxis, yAxis)
plot.plot(linesp, model(linesp))
plot.show()

x축과 y축의 관계

축(xy) 사이의 관계를 아는 것은 필수적입니다. 두 축 사이에 관계가 없으면 미래 값이나 회귀 결과를 예측할 수 없기 때문입니다.

관계를 측정하기 위해 R-제곱이라는 값을 계산합니다. 범위는 0에서 1까지이며, 여기서 0은 관계가 없음을 나타내고 1은 100% 관련됨을 나타냅니다.

import numpy
import matplotlib.pyplot as plot
from sklearn.metrics import r2_score

xAxis = [
    10,
    20,
    30,
    50,
    60,
    70,
    80,
    90,
    100,
    120,
    130,
    140,
    150,
    160,
    180,
    190,
    210,
    220,
]
yAxis = [96, 95, 84, 65, 60, 59, 65, 55, 71, 75, 78, 86, 88, 79, 95, 98, 99, 100]

model = numpy.poly1d(numpy.polyfit(xAxis, yAxis, 3))

print(r2_score(yAxis, model(xAxis)))

출력:

0.9047652736246418

0.9의 값은 xy 사이의 강력한 관계를 나타냅니다.

값이 매우 낮으면 매우 약한 관계를 나타냅니다. 또한 이 데이터 세트가 다항식 회귀에 적합하지 않음을 나타냅니다.

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

관련 문장 - Python Math