Vector Quantization在為訊號處理中的一種量化法,利用原始資料(樣本)來估算機率密度函數(Probability Density Function, PDF), 並藉由此函數推估最有效的量化方案。VQ常常應用於資料壓縮,透過分割原始資料,將數據歸類為各個群集,將各群集中心做為該群集之代表,此代表稱為編碼簿(CodeBook),之後將各數據根據編碼簿量化資料,以達到壓縮的效果。
但因為使用量化手段,因此為一種破壞性資料壓縮,對於高機率出現(較為密集)之資料誤差較小,而對於低機率(較為稀疏)資料誤差較大,因此較適用於大量且為度較高之資料。
因此其意義與聚類(Clustering)差異不大,其差別為Clustering只是單純將相似資料歸為同一群集,而VQ是將將資料分群後,再將各群集量化,因此會多產生一個量化向量編碼簿(CodeBook),用以將量化後的資料還原。
1D Vector Quantization
向量量化就是將區間中擇一代表,從而簡化資料量,如下圖:
在-1到1之間的數值皆會近似0,[1, 3]區間近似為2,而這些數值可以再用二位元之二進制數值表示,從而壓縮資料。但數值區間不一定為等間距資料分布,為了將資料失真率達到最低,因此需要計算出失真量最小之代表向量,這組向量稱為編碼簿(CodeBook)
LBG演算法
LBG演算法是由Linde,Buzo,Gray三人在1980年提出的。其算法與K-means雷同,根據當前劃分之群集計算誤差量,不斷調整映射區間(Mapping Region)及量化向量之量化點:
- 給定訓練樣本以及誤差閾值
- 訂定初始碼向量
- 將疊代計數器歸零
- 計算總誤差值,若不為第一次,則檢查與前一次誤差值差距是否小於閾值。
- 根據每一個訓練樣本與碼向量的距離d,找其最小值,定義為映射函數Q
- 更新碼向量:將對應到同一個碼向量的全數訓練樣本做平均以更新碼向量。
i為疊代計數器,C為該群集之代表,x為資料點,Q(x)為x量化後之群集代表C
7. 疊代計數器加一
8. 會到步驟四,直至誤差值小於閥值
LBG演算法十分依賴起始編碼簿,產生起始編碼簿的方法有以下幾種:
亂碼
隨機挑選要求數量的碼向量作為起始編碼簿
分裂法
1. 先算出所有樣本向量的重心(平均值)
2. 將目前的重心分裂成二倍個向量,並前後挪動一點距離使其分隔
3. 將新的向量作為叢聚的分類準則,重新分出二群樣本向量
4. 再次將樣本的分群中心算出
5. 回到步驟二,直至有足夠數量個碼向量。
最近相臨集結法
1. 先將樣本向量中每一個向量視為一個叢聚
2. 計算每個叢聚之間距離,取最小距離的二個叢聚合併之
3. 重複步驟二直至叢聚數量等於要求的編碼簿大小。