主成分分析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 hankeln_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等。
?