把多維的數(shù)據(jù)降到低維空間但是仍然盡可能的保持原來數(shù)據(jù)之間的距離關(guān)系(就是在原來維度下離的遠(yuǎn)的點(diǎn)仍然離得遠(yuǎn),接近的點(diǎn)仍然接近) 。最常見的應(yīng)該就是降到2維以方便打印和屏幕輸出。
算法的輸入是所有數(shù)據(jù)在高維情況下兩兩之間的距離(記i與j的距離為Dij)?,F(xiàn)在以降到2維為例說明這個算法。
首先我們把所有數(shù)據(jù)點(diǎn)隨機(jī)繪制在一張二維圖像上,然后計算它們兩兩之間的距離dij,然后我們計算出它與高維距離Dij的誤差,根據(jù)這些誤差,我們將每對數(shù)據(jù)點(diǎn)按比例移近或移遠(yuǎn),然后重新計算所有dij,不斷重復(fù)到我們沒法減少誤差為止。
還是來具體說明一下吧,假設(shè)有n個點(diǎn)
輸入每一對點(diǎn)之間的距離Dij。
隨機(jī)在2維平面生成n個點(diǎn),點(diǎn)i坐標(biāo)記為x[i]、y[i],計算它們兩之間的距離,記為dij.
對所有i 和j計算:eij=(dij-Dij) / Dij,每個點(diǎn)用一個二維的值grad[k]來表示它要移動的距離的比例因子(初始為0,0)。在計算出每個eij后,計算 ((x[i] - x[j]) / dij)* eij,然后把它加到grad[i][x]上,同樣把((y[i] - y[j]) / dij)* eij加到grad[i][y]上。
把所有eij的絕對值相加,為總誤差,與前一次的總誤差比較(初始化為無窮大),大于前一次的話就停止。否則把它作為上一次總誤差,繼續(xù)。
對每個點(diǎn),新的坐標(biāo)為x[i] - = rate * grad[i][x]? y[i] - = rate*grad[i][y],其中rate是開始時自己定義的一個常數(shù)參數(shù),該參數(shù)影響了點(diǎn)的移動速度。重新計算各個dij,回到3。
http://www.cnblogs.com/douza/p/5882065.html
http://www.cnblogs.com/luosha/archive/2009/09/21/2571545.html
https://en.wikipedia.org/wiki/Multidimensional_scaling