我试图将内核密度与S&的时间序列相匹配;P返回。然而,产生的密度基本上是一个常数。我首先使用统计数据。并与scikit的内核密度进行比较。
代码如下:
temp_data = mc_data.iloc[idx_r]['SPX Returns'].dropna().values
X_plot = np.linspace(temp_data.min(),temp_data.max(),100)
kernel = stats.gaussian_kde(temp_data, bw_method='scott')
pdf = kernel.evaluate(X_plot)
fig, ax = plt.subplots()
ax.plot(X_plot, pdf, linewidth=3, alpha=0.5)
ax.hist(temp_data, fc='gray', histtype='stepfilled', alpha=0.3, density=False)
plt.show()
这将产生以下结果
使用scikit的第二个版本是:
k_data = temp_data.reshape(-1,1)
kde = KernelDensity(kernel='gaussian', bandwidth=1).fit(k_data)
x_plot = X_plot.reshape(-1,1)
pre_pdf2 = kde.score_samples(x_plot)
pdf2 = np.exp(pre_pdf2)
fig, ax = plt.subplots()
ax.plot(X_plot, pdf2 , linewidth=3, alpha=0.5)
ax.hist(temp_data, fc='gray', histtype='stepfilled', alpha=0.3, density=False)
plt.show()
顺从的:
在检查了pdf2的值之后,我可以看到,这是一个值数组,它与数组中的以下位置的差值为10e-8,因此几乎是一个常量值数组。
为什么内核密度没有返回一个合适的密度?