不知道这个效果满不满足你的要求?
#卡尔曼滤波 damping提供了预测的偏差,预测偏差越大,则卡尔曼滤波的修正功能越强,曲线就越平滑
#卡尔曼滤波器的transition_covariance提供了转换矩阵的协方差,这个越大曲线就越接近于真实值
from pykalman import KalmanFilter
def kalman_filter(observations,damping=1):
observation_covariance = damping
initial_value_guess = observations[0]
transition_matrix = 1
transition_covariance = 10
kf = KalmanFilter(
initial_state_mean=initial_value_guess,
initial_state_covariance=observation_covariance,
transition_matrices=transition_matrix,
observation_covariance=observation_covariance,
transition_covariance=transition_covariance,
transition_offsets=None)
pre, cov = kf.smooth(observations)
return pre
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
legend('原始','滤波后')
data = attribute_history(stock, N, '1d', ['close'])
dr = np.log(data.close/data.close[0]) #对收盘价做一个标准化处理,并求其log,series
newdr = kalman_filter(dr,10) # FFT低通滤波
plt.plot(dr.tolist())
plt.plot(newdr.tolist())

2021-11-15