把多維的數(shù)據(jù)降到低維空間但是仍然盡可能的保持原來數(shù)據(jù)之間的距離關(guān)系(就是在原來維度下離的遠(yuǎn)的點(diǎn)仍然離得遠(yuǎn)博其,接近的點(diǎn)仍然接近) 。最常見的應(yīng)該就是降到2維以方便打印和屏幕輸出贺奠。
算法的輸入是所有數(shù)據(jù)在高維情況下兩兩之間的距離(記i與j的距離為Dij)。現(xiàn)在以降到2維為例說明這個(gè)算法。
首先我們把所有數(shù)據(jù)點(diǎn)隨機(jī)繪制在一張二維圖像上儿普,然后計(jì)算它們兩兩之間的距離dij掷倔,然后我們計(jì)算出它與高維距離Dij的誤差,根據(jù)這些誤差,我們將每對數(shù)據(jù)點(diǎn)按比例移近或移遠(yuǎn)巴柿,然后重新計(jì)算所有dij死遭,不斷重復(fù)到我們沒法減少誤差為止。
還是來具體說明一下吧钉迷,假設(shè)有n個(gè)點(diǎn)
輸入每一對點(diǎn)之間的距離Dij钠署。
隨機(jī)在2維平面生成n個(gè)點(diǎn),點(diǎn)i坐標(biāo)記為x[i]舰蟆、y[i]狸棍,計(jì)算它們兩之間的距離,記為dij.
對所有i 和j計(jì)算:eij=(dij-Dij) / Dij隔缀,每個(gè)點(diǎn)用一個(gè)二維的值grad[k]來表示它要移動的距離的比例因子(初始為0猾瘸,0)。在計(jì)算出每個(gè)eij后牵触,計(jì)算 ((x[i] - x[j]) / dij)* eij,然后把它加到grad[i][x]上袜腥,同樣把((y[i] - y[j]) / dij)* eij加到grad[i][y]上钉汗。
把所有eij的絕對值相加,為總誤差福侈,與前一次的總誤差比較(初始化為無窮大)卢未,大于前一次的話就停止堰汉。否則把它作為上一次總誤差翘鸭,繼續(xù)戳葵。
對每個(gè)點(diǎn),新的坐標(biāo)為x[i] - = rate * grad[i][x]? y[i] - = rate*grad[i][y]譬淳,其中rate是開始時(shí)自己定義的一個(gè)常數(shù)參數(shù)邻梆,該參數(shù)影響了點(diǎn)的移動速度。重新計(jì)算各個(gè)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