입력 및 출력 샘플을 기반으로 숫자를 출력하는 매우 기본적인 Python 코드를 작성하려고합니다. 예를 들면 다음과 같습니다.
x = [1, 2, 3, 4, 5]
y = [2, 5, 10, 17, 26]
z = np.interp(7, xp, yp)
print(z) ##expected 50, actual was 26
다른 x 값을 전달하고 y 값의 대략적인 근사값을 얻을 수 있도록 이러한 값을 함께 매핑하는 가장 적합한 함수를 찾는 방법을 원합니다.
scipy.optimize.curve_fit
그러나 내가 알 수있는 한, 이것은 내가 사용하지 않는 미리 정의 된 기능을 사용하기 때문에 사용해야하는 것이 아닙니다.
참고로, 값이 다를 수 있기 때문에 함수가 선형 /주기/이차 식이어야하는지에 대한 제한은 없지만 대부분의 함수는 선형이어야한다고 가정합니다.
numpy.interp
도 시도했습니다.
그러나
y
에서 마지막 값을 얻습니다.
어떤
x
에 대한 배열
입력했습니다.
수정 :Cleb의 답변을 엉망으로 만든 다음 kennytm의 원래 접근 방식과 비교 한 결과는 다음과 같습니다. 여기서 가장 정확한 기술은 빨간색 선에 가장 가까운 함수 여야합니다. 녹색 선은 kennyTM의 접근 방식을 나타냅니다 (이차 회귀 분석은 내가 시도한 가장 정확한 방법 임). 검은 선은 Cleb의 기법 (UnivariateSpline)을 나타냅니다. UnivariateSpline은 기본 모델에 대한 사전 지식이 없기 때문에 다소 정확한 함수 값에 적응하는 것이 약간 더 좋습니다.
- 답변 # 1
- 답변 # 2
I tried reading about 와이즈 비즈 그러나 내가 알 수있는 한, 이것은 내가 사용하지 않는 미리 정의 된 기능을 사용하기 때문에 사용해야하는 것이 아닙니다.
scipy.optimize.curve_fit
2 차 회귀 등의 유사 :
scipy.optimize.curve_fit
(
<시간>def linear(x, a, b): return a*x + b fit_params, _ = scipy.optimize.curve_fit(linear, xp, yp) print(linear(7, *fit_params)) # 36.0
의 두 번째 반환 값 출력의 공변량 행렬로, 적합도를 대략적으로 보여줍니다.최소 제곱을 다항식에 맞추고 싶다면
def quadratic(x, a, b, c): return a*x*x + b*x + c fit_params, _ = scipy.optimize.curve_fit(quadratic, xp, yp) print(quadratic(7, *fit_params)) # 50.000000000004555
를 사용하면됩니다. .curve_fit
numpy.polyfit
- python : Joblib 병렬 쓰기 "공유"numpy 희소 행렬
- python : 정규 분포를 numpy 및 scipy와 통합하는 방법은 무엇입니까?
- python : PyTorch에서 backwards () 함수 실행 오류
- python : 파이썬의 for-in 루프에 두 개의 변수를 넣는 것은 무엇을 의미합니까?
- python : 2D numpy 배열을 비교하고 유사하지 않은 행 삭제
- python : 현재 글꼴에서 Glyph 23130 누락
- 오류 : 인덱스 범위를 벗어남-Python
- python : numpy einsum은 첫 번째 차원을 제외한 모든 것을 축소합니다.
- python : where 절에 따라 추가 차원으로 numpy 배열을 만드는 방법은 무엇입니까? [파이썬]
- python : 액세스 위반 (0xC0000005) NumPy 배열
또 다른 옵션은 스플라인을 사용하는 것입니다 (예 : scipy.interpolate.UnivariateSpline, 기본 모델 (예 : 선형, 입방체 등) 및 과적 합에 신경 쓰지 않는 경우
그럼 할 수 있습니다 :
x=7
에서 견적을 얻으려면 , 이제 간단하게 할 수 있습니다 :예상 한 값을 반환합니다 :
이 접근법은 모델의 정의를 피합니다.