在Kaggle上,我发现了用于信号去噪的算法。例如Golay滤波器、样条函数、 autoregressive建模或KNeighborsRegressor本身。
链接: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上的那个人是先用数据来训练网络 – 见下文:
## 定义KNN网络clf = KNeighborsRegressor(n_neighbors=100, weights='uniform')## 训练网络 clf.fit(df.index.values[:, np.newaxis], df.iloc[:, 0])
这给了他一个表示时间与信号值之间关系的函数。有了这个,他然后将时间向量重新输入网络以使其重现信号。
y_pred = clf.predict(df.index.values[:, np.newaxis])
这个新信号将代表模型对信号的最佳解释,正如你从我上面发布的链接中看到的,你可以调整某些参数,这将导致一个“更干净”的信号,但也可能降低原始信号的质量
需要注意的一点是,使用这种方法与Kaggle上的那个人相同的方式意味着它只能用于那个信号,因为输入是时间,它不能用于解释未来的值:
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))