>

입력 및 출력 샘플을 기반으로 숫자를 출력하는 매우 기본적인 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

    또 다른 옵션은 스플라인을 사용하는 것입니다 (예 : scipy.interpolate.UnivariateSpline, 기본 모델 (예 : 선형, 입방체 등) 및 과적 합에 신경 쓰지 않는 경우

    그럼 할 수 있습니다 :

    from scipy.interpolate import UnivariateSpline
    x  = [1, 2, 3, 4, 5]
    y = [2, 5, 10, 17, 26]
    spl = UnivariateSpline(x, y)
    
    

    x=7 에서 견적을 얻으려면 , 이제 간단하게 할 수 있습니다 :

    spl(7)
    
    

    예상 한 값을 반환합니다 :

    array(49.99999999999993)
    
    

    이 접근법은 모델의 정의를 피합니다.

  • 답변 # 2

    I tried reading about 와이즈 비즈  그러나 내가 알 수있는 한, 이것은 내가 사용하지 않는 미리 정의 된 기능을 사용하기 때문에 사용해야하는 것이 아닙니다.

    실제로 pyzwyz에 대한 그 기능  맞는 모델입니다. 선형 회귀를 원한다고 가정하면 다음을 사용합니다.

    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

  • 이전 c# - 엔티티 프레임 워크를 사용하여 저장 프로 시저를 호출 할 때 결과로 JSON을 가져올 때 반환 유형 오류
  • 다음 Vuejs를 타이프 ​​스크립트 파일로 가져 오는 가장 쉬운 방법은 무엇입니까?