將新點投影到 MDS 空間中
我正在嘗試將一個新點投影
A(x, y, z)
到R
. 這是我到目前為止所擁有的:set.seed(1) x <- matrix(rnorm(3*10), ncol = 3) DM <- dist(x) MDS <- cmdscale(DM) # New data point to be projected A <- c(1, 2, 3)
我不
A
直接包括x
然後擬合 MDS,因為它會影響空間坐標。有切實可行的解決方案嗎?
編輯
我相信我通過估計 beta 來預測 MDS 軸找到了解決方案:
x1 <- cbind(1, x) # add intercept B <- solve(t(x1) %*% x1) %*% t(x1) %*% MDS # Betas > MDS [,1] [,2] [1,] -1.80789362 0.06801597 [2,] -0.64418055 -0.21163109 [3,] 0.04694820 -1.27040928 [4,] 3.39617277 -0.21657115 [5,] -0.96981358 0.46269025 [6,] -0.24716695 -0.79861234 [7,] 0.33620625 0.02618564 [8,] 0.62473570 1.35544267 [9,] 0.01895042 0.80023822 [10,] -0.75395865 -0.21534889 > x1 %*% B # same as MDS [,1] [,2] [1,] -1.80789362 0.06801597 [2,] -0.64418055 -0.21163109 [3,] 0.04694820 -1.27040928 [4,] 3.39617277 -0.21657115 [5,] -0.96981358 0.46269025 [6,] -0.24716695 -0.79861234 [7,] 0.33620625 0.02618564 [8,] 0.62473570 1.35544267 [9,] 0.01895042 0.80023822 [10,] -0.75395865 -0.21534889 A <- c(1, 2, 3) A <- c(1, A) # add intercept > A %*% B # coordinates of A in the MDS plane [,1] [,2] [1,] -2.759456 0.5927178
我的程序正確嗎?
如果您使用歐幾里得距離,那麼經典 MDS 等價於 PCA,它很容易定義到低維空間的映射,正如變形蟲所提到的。該站點上應該有各種線程來描述如何執行此操作。否則,De Silva 和 Tenenbaum (2004) 描述瞭如何為具有任意距離的經典 MDS 執行此映射(請注意,它不適用於 MDS 的非經典變體,例如非度量 MDS,最小化應力標準的變體,等等。)。他們將此過程稱為“基於距離的三角測量”。雖然最初不是這樣表述的,但事實證明它是通過使用 Nyström 近似來工作的,這是一種使用較小的子矩陣來近似大矩陣的特徵值/特徵向量的方法(參見 Platt 2005)。
假設我們有 $ n $ 訓練點。點之間的平方距離 $ i $ 和 $ j $ 存儲在 $ (i,j) $ 矩陣的第 $ \Delta_n $ . 我們使用這些距離和經典 MDS 來計算 $ k $ 維嵌入。讓每一列 $ k \times n $ 矩陣 $ L_k $ 包含訓練點的低維嵌入坐標。讓 $ L_k^# $ 表示的偽逆的轉置 $ L_k $ . 這可以使用最初用於計算的組件來計算,而不是從頭開始 $ L_k $ (詳見論文)。讓 $ \vec{\delta}i $ 表示 $ i $ 第 列 $ \Delta_n $ (包含距點的平方距離 $ i $ 到所有其他點),並讓 $ \vec{\delta}\mu = \frac{1}{n} \sum_{i=1}^n \vec{\delta}_i $ 表示列的平均值。
現在,假設我們要映射一個新點 $ a $ 進入低維空間。計算向量 $ \vec{\delta}_a $ , 包含距離的平方 $ a $ 到每個訓練點。的低維嵌入坐標 $ a $ 然後由下式給出:
$$ \vec{x}_a = -\frac{1}{2} L_k^# (\vec{\delta}a - \vec{\delta}\mu) $$
參考:
德席爾瓦和特南鮑姆(2004 年)。使用地標點的稀疏多維縮放。
普拉特(2005 年)。FastMap、MetricMap 和 Landmark MDS 都是 Nystrom 算法。