模式識別 (Pattern Recognition)是近年來比較流行的字眼酪我,通俗地講,就是通過計算機用數(shù)學技術方法來研究模式的自動處理和判讀泊业,而模式是環(huán)境與客體的總稱把沼。模式識別過程中,關鍵的一步是特征提取吁伺,即抽取一組特征饮睬,將輸入模式從對象空間映射到特征空間,這樣篮奄,模式就可以用特征空間中的一個點或一個特征矢量表示捆愁。模型的構建過程和模式識別有相似的地方,即通過一個特征矢量唯一確定一個模式窟却。在構建模型的過程中就存在這樣一個問題:應該用幾個維度的特征矢量去唯一表征一個模型昼丑?在本文中,以三角波為例夸赫,探究幾個維度的特征矢量能夠唯一表征三角波模型菩帝。
基礎準備
一維特征矢量
在我們的印象里,三角波只要知道頻率或周期就可以確定了,這便是標準的三角波呼奢。
def triangle_wave(x,p):
T = p
y = np.where(np.mod(x,T)<T/2, -4/T*(np.mod(x,T))+1, 0)
y = np.where(np.mod(x,T)>=T/2, 4/T*(np.mod(x,T))-3, y)
return y
一維特征矢量: [0.2] 描述的三角波
二維特征矢量
很多時候宜雀,會發(fā)現(xiàn),在橫坐標為0時控妻,并不對應最大值或最小值州袒,而是對應某一個中間值,這個時候標準的三角波就不能表征這種情況弓候,我們需要加入水平平移特征變量郎哭,修正后的模型如下:
def triangle_wave(x,p):
b, T = p
y = np.where(np.mod(x-b,T)<T/2, -4/T*(np.mod(x-b,T))+1, 0)
y = np.where(np.mod(x-b,T)>=T/2, 4/T*(np.mod(x-b,T))-3, y)
return y
二維特征矢量: [0.08,0.2] 描述的三角波
三維特征矢量
有時,也存在這種情況菇存,三角波的幅值并不總是等于1夸研,因此我們需要加入縱向伸縮特征變量,修正后的模型如下:
def triangle_wave(x,p):
a,b,T = p
y = np.where(np.mod(x-b,T)<T/2, -4/T*(np.mod(x-b,T))+1, 0)
y = np.where(np.mod(x-b,T)>=T/2, 4/T*(np.mod(x-b,T))-3, y)
return a*y
三維特征矢量: [0.5,0,0.2]描述的三角波
四維特征矢量
有時依鸥,還存在波形并不關于y軸對稱的情況亥至,針對這種情況,我們需要加入縱向平移特征變量贱迟,修正后的模型如下:
def triangle_wave(x,p):
a,b,c,T = p
y = np.where(np.mod(x-b,T)<T/2, -4/T*(np.mod(x-b,T))+1+c/a, 0)
y = np.where(np.mod(x-b,T)>=T/2, 4/T*(np.mod(x-b,T))-3+c/a, y)
return a*y
四維特征向量: [0.5,0.08,0.1,0.2] 描述的三角波
五維特征矢量
有時姐扮,還會發(fā)現(xiàn)三角波的三角波每個峰的高度并不完全相等,這是因為信號中存在噪聲衣吠,這時茶敏,就需要加入噪聲特征變量,這里我們以標準高斯白噪聲為例缚俏,修正后的模型如下:
def triangle_wave(x,p):
a,b,c,d,T = p
y = np.where(np.mod(x-b,T)<T/2, -4/T*(np.mod(x-b,T))+1+c/a, 0)
y = np.where(np.mod(x-b,T)>=T/2, 4/T*(np.mod(x-b,T))-3+c/a, y)
return a*y+d*np.random.randn(len(x))
五維特征矢量: [0.5,0.08,0.1,0.015,0.2] 描述的三角波
注:周期 T 表征圖形在橫向伸縮特征惊搏,幅值 a 表征圖形在縱向伸縮特征,時延 b 表征圖像在橫向平移特征忧换,c 表征圖形在縱向平移特征恬惯,噪聲 d 為圖形添加了隨機性特征,同時也表征了幅值參差不齊的特征亚茬。(僅供參考)
Stay hungry, Stay foolish. -- Steve Jobs