多維縮放

把多維的數(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容