主成分分析PCA是面向模式分类的特征提取最典型的工具,是满足上述映射准则的一种数据压缩的方法。作为经典的特征提取方法,是在不减少原始数据所包含的内在信息前提下,将原始数据集转化为由维数较少的“有效”特征成分来表示,使其在统计均方意义下达到方差最优的目的。许多学者对算法进行深入研究,已经在经典算法的基础上形成了很多改进算法,被广泛应用于不同领域。
PCA是一种基于统计意义下最小均方误差的特征提取方法,其所提取出的新特征能维持原模式类中的大部分本质信息,去除掉的维数很大可能是由噪声带来的结果,在多数情况下把这些维数剔除,可以达到降噪的目的,改善数据的表示。据此我们可以把主成分分析看作是数据降噪的一个过程。利用PCA及其改进算法对图像进行降噪处理是模式识别中特征提取的一个典型应用,对图像的降噪可以看作是一种识别,学习识别出无噪图像的主要特征,利用这些主要特征对有噪图像进行去噪。现如今存在的各种去噪方法中,PCA算法凭借其优良的特征提取性能被广泛应用。利用及其改进算法能够提取数据的有效特征,舍弃由噪声引起的成分,达到降噪的效果。鉴于此,采用PCA对一维时间序列进行降噪,运行环境为Python。
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
from scipy.linalg import svd
from scipy.linalg import hankel
n_elements = 5
fname='example_wave.csv'
#open file
myFile = np.genfromtxt(fname, delimiter=',')
#define matrix
A = np.array(myFile)
nt=len(myFile)
#get hankel matrix and trim
B = hankel(A)
C = B[0:int(nt/2)]
D = C[:,0:int(nt/2)]
#SVD
U, s, VT = svd(D)
# create m x n Sigma matrix
Sigma = np.zeros((D.shape[0], D.shape[1]))
# populate Sigma with n x n diagonal matrix
Sigma[:D.shape[0], :D.shape[0]] = np.diag(s)
# select
Sigma = Sigma[:, :n_elements]
VT = VT[:n_elements, :]
# reconstruct
Q = U.dot(Sigma.dot(VT))
aa = Q[:,0]
bb = Q[:,499]
AA = np.concatenate([ aa, bb])
f, axarr = plt.subplots(2, sharex=True)
axarr[0].set_title('Original Signal')
axarr[0].plot(A)
axarr[1].set_title('De-Noised Signal')
axarr[1].plot(AA)
axarr[1].set_xlabel('Time')
np.savetxt(fname+'_denoised',AA, delimiter=',')
plt.show()
-
知乎学术咨询: https://www.zhihu.com/consult/people/792359672131756032?isMe=1
擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。