KNeighborsRegressor 作为去噪算法

KNeighborsRegressor as denoising algorithm

在 Kaggle 上,我找到了用于信号去噪的算法。例如 Golay 过滤器、样条函数、自回归建模或 KNeighborsRegressor 本身。

Link: https://www.kaggle.com/residentmario/denoising-algorithms

它究竟是如何工作的,因为我找不到任何解释它用于信号降噪的文章?它是什么样的算法?我想了解它是如何工作的

这是一种监督学习算法 - 这是最佳答案,

通常,算法首先使用已知数据进行训练,然后尝试解释最能代表该数据的函数,以便可以为之前未见过的输入生成新点。

简单地说,它会根据之前看到的 k 个最近点的平均值来确定以前看不见的值的点,可以在下面找到更好、更详细的答案: https://towardsdatascience.com/the-basics-knn-for-classification-and-regression-c1e8a6c955

在kaggle代码中:

时间向量为:

df.index.values[:, np.newaxis]

信号向量为:

df.iloc[:, 0]

看来 kaggle 的人正在使用数据首先训练网络 - 见下文:

## define the KNN network
clf = KNeighborsRegressor(n_neighbors=100, weights='uniform')
## train the network 
clf.fit(df.index.values[:, np.newaxis], 
        df.iloc[:, 0])

给他一个表示时间和信号值之间关系的函数。有了这个,他然后将时间向量传回网络,让它重现信号。

y_pred = clf.predict(df.index.values[:, np.newaxis])

这个新信号将代表模型对信号的最佳解释,正如您从我上面发布的 link 中看到的那样,您可以调整某些参数,这将导致 'cleaner'信号但也可能降低原始信号

需要注意的一件事是,以与 kaggle 中那个人相同的方式使用此方法意味着它只适用于那个信号,因为输入是 time 它不能用于解释未来值:

y_pred = clf.predict(df.index.values[:, np.newaxis] + 400000)
ax = pd.Series(df.iloc[:, 0]).plot(color='lightgray')
pd.Series(y_pred).plot(color='black', ax=ax, figsize=(12, 8))