Python에서 단계 함수 맞추기

단계 함수는 일련의 단계처럼 보이는 그래프가 있는 방법입니다. 사이에 간격이 있는 일련의 수평선 세그먼트로 구성되며 계단 함수라고도 합니다.
주어진 간격에서 계단 함수는 일정한 값을 가지며 그래프에 수평선을 만듭니다. 간격은 각 선분 사이를 점프합니다.
단계 함수는 불연속 플롯을 생성할 때 유용하며 Python의 벡터화된 플로팅에 널리 사용됩니다. numpy
를 사용하여 Python에서 구현할 수 있습니다.
이 문서에서는 단계 함수의 간단한 데모를 제공합니다.
Python에서 단계 함수 맞추기
이 예제에서는 Python 버전 3.10.6을 사용합니다. 또한 필요한 라이브러리를 설치해야 합니다. 우리의 경우 numpy입니다.
다음 명령을 실행하여 Numpy를 설치할 수 있습니다.
pip install numpy
이제 데이터를 최적화하고 그래프에 맞추려면 scipy
가 필요합니다. 아래 명령어로 설치할 수 있습니다.
pip install scipy
이 예제에서는 데이터 세트를 사용하여 간단한 단계 함수를 생성합니다. 시작하고 다음 명령문을 사용하여 numpy
및 scipy
를 환경으로 가져옵니다.
import numpy as np
import scipy
이 예제에서는 numpy linspace
메서드를 사용하여 작은 데이터 세트를 생성합니다. 다음 코드 스니펫은 이 데이터세트를 생성할 수 있습니다.
x = np.linspace(0, 10, 101)
계단 플로팅을 보여주기 위해 heaviside
기능을 생성해야 합니다. 사용 사례 요구 사항에 따라 numpy 또는 사용자 지정 메서드를 사용하여 생성할 수 있습니다.
함수를 생성하기 위해 이 예제에서는 numpy 메서드 heaviside
를 사용합니다.
y = np.heaviside((x - 5), 0.0)
이 방법은 다음 플롯에 따라 heaviside
값을 생성합니다.
0 if x1 < 0
heaviside(x1, x2) = x2 if x1 == 0
1 if x1 > 0
scipy 라이브러리의 curve_fit
을 사용하여 최적의 데이터 포인트로 args
를 생성합니다.
curve_fit(sigmoid, x, y)
이제 흐름을 정리하고 이해했으므로 최종 스크립트는 다음과 같습니다.
import numpy as np
from scipy.special import expit
from scipy.optimize import curve_fit
x = np.linspace(0, 10, 101)
y = np.heaviside((x - 5), 0.0)
def sigmoid(x, x0, b):
return expit((x - x0) * b)
args, cov = curve_fit(sigmoid, x, y)
print(args)
matplotlib
를 사용하여 이 플로팅 결과를 모니터링할 수 있습니다. 플로팅 스니펫과 최종 코드를 추가하면 아래와 같습니다.
import matplotlib.pyplot as plt
import numpy as np
from scipy.special import expit
from scipy.optimize import curve_fit
x = np.linspace(0, 10, 101)
y = np.heaviside((x - 5), 0.0)
def sigmoid(x, x0, b):
return expit((x - x0) * b)
args, cov = curve_fit(sigmoid, x, y)
plt.scatter(x, y)
plt.plot(x, sigmoid(x, *args))
plt.show()
print(args)
출력:
I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.
LinkedIn