Python 给出正弦拟合的预测值

Python 给出正弦拟合的预测值,python,numpy,scipy,time-series,regression,Python,Numpy,Scipy,Time Series,Regression,我正在使用Python拟合带有正弦函数的时间序列。我发现了一个很好的匹配,现在我想能够预测未来的价值。。我在这里迷路了 以下是我得到的: timeSeries = [0.01146, 0.00724, 0.00460, 0.00192, 0.00145, 0.01559, 0.02585, 0.04118, 0.05073, 0.01966, 0.01486, 0.02784] import numpy as np from scipy.optimize import curve_fit d

我正在使用Python拟合带有正弦函数的时间序列。我发现了一个很好的匹配,现在我想能够预测未来的价值。。我在这里迷路了

以下是我得到的:

timeSeries = [0.01146, 0.00724, 0.00460, 0.00192, 0.00145, 0.01559, 0.02585, 0.04118, 0.05073, 0.01966, 0.01486, 0.02784]

import numpy as np
from scipy.optimize import curve_fit

def createSinFromFit(x, freq, amplitude, phase, offset):
    return np.sin(x * freq + phase) * amplitude + offset

def sinRegr(series):
    t = np.linspace(0, 4*np.pi, len(series))
    guess_freq = 1
    guess_amplitude = 3*np.std(series)/(2**0.5)
    guess_phase = 0
    guess_offset = np.mean(series)
    p0=[guess_freq, guess_amplitude, guess_phase, guess_offset]
    fit = curve_fit(createSinFromFit, t, series, p0=p0)
    results = createSinFromFit(t,*fit[0])
    return results

plotThis = sinRegr(timeSeries)
此代码生成您在此图片中看到的配件:


如何扩展sin函数,使其预测序列的未来点?i、 e.如何使正弦曲线图跨度位于右侧,超出“已知”数据点所覆盖的区域?

您需要区分数据时间线(输入)和拟合时间线(输出)。一旦你这样做了,方法就相当清楚了。下面我把它们叫做
tdata
tfit

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

tdata = np.linspace(0, 10)
timeSeries = np.sin(tdata) + .4*np.random.random(tdata.shape)

def createSinFromFit(x, freq, amplitude, phase, offset):
    return np.sin(x * freq + phase) * amplitude + offset

def sinRegr(tdata, series):
    tfit = np.linspace(0, 6*np.pi, len(series))
    guess_freq = .2
    guess_amplitude = 3*np.std(series)/(2**0.5)
    guess_phase = 0
    guess_offset = np.mean(series)
    p0=[guess_freq, guess_amplitude, guess_phase, guess_offset]
    fit = curve_fit(createSinFromFit, tdata, series, p0=p0)   # use tdata to create the fit
    results = createSinFromFit(tfit,*fit[0])                  # use tfit to generate a new curve 
    return tfit, results

tfit, plotThis = sinRegr(tdata, timeSeries)

plt.plot(tfit, plotThis)
plt.plot(tdata, timeSeries, "ro")
plt.show()


你的实际问题是什么?您可以计算参数,您可以使用函数
createSinFromFit
为任何
x
计算
y
。这就是你所需要的。