我有一些数据,我想拟合一个高斯模型
我使用一个内核密度估计来实现这一点,我想为它选择最佳带宽
我通过使用带有交叉验证的GridSearch来实现这一点:
from sklearn.neighbors import KernelDensity
from sklearn.model_selection import GridSearchCV
# kde function
def kde_sklearn(x, x_grid, bandwidth):
kde = KernelDensity(bandwidth=bandwidth).fit(x)
log_pdf = kde.score_samples(x_grid[:, np.newaxis])
return np.exp(log_pdf)
# optimal bandwidth selection
grid = GridSearchCV(KernelDensity(kernel='gaussian'), {'bandwidth': np.logspace(-3, 1, 20)}, cv=10)
grid.fit(data.reshape(-1, 1))
bw = grid.best_params_
对于一组特定的500 ish数据,网格搜索建议带宽为0.001。此处,结果高斯拟合叠加到数据直方图上:
这有什么意义?0.001怎么可能比我得到的0.01带宽更好?
我的代码中有错误吗
注意:对于cv集的大小,结果实际上是不合理的
目前没有回答
相关问题 更多 >
编程相关推荐