我正在尋找一種解決方案,可以根據其中一些矩陣之間的估計距離矩陣輸出一組二維點。 問題是,這些點之間的距離不準確(近似值),並且所有對組合都沒有值。從距離矩陣散射2D座標
我正在尋找任何類型的解決方案,創建近似的座標,至多尊重提供的距離。
我正在尋找一種解決方案,可以根據其中一些矩陣之間的估計距離矩陣輸出一組二維點。 問題是,這些點之間的距離不準確(近似值),並且所有對組合都沒有值。從距離矩陣散射2D座標
我正在尋找任何類型的解決方案,創建近似的座標,至多尊重提供的距離。
您可以使用t-SNE,該算法可以根據元素的距離將潛在的高維數據嵌入到低維數據中。
您必須決定如何處理遺漏的距離,是否將它們設置爲高值或平均距離或其他。由於t-SNE將只保留本地鄰域,因此遠處簇的關係可能不太準確,但是您必須查看它是否對您的應用程序不利。
如果您下載從鏈接網站的香草MATLAB實現,把路徑上的文件夾,下面的自包含的例子應該運行。
%% Generate some random data
mu = [1 2];
Sigma = [1 0; 0 1];
R = chol(Sigma);
z1 = repmat(mu,100,1) + randn(100,2)*R;
mu = [5 1.5];
z2 = repmat(mu,100,1) + randn(100,2)*R;
mu = [3.5 6.5];
z3 = repmat(mu,100,1) + randn(100,2)*R;
%% Plot random data
figure(1);
clf
subplot(3, 1, 1)
scatter(z1(:,1), z1(:,2))
hold on
scatter(z2(:,1), z2(:,2))
scatter(z3(:,1), z3(:,2))
title('Original data')
%% Generate pw distance matrix and plot it
all_z = [z1; z2; z3];
% generate pw distance matrix
pwd = squareform(pdist(all_z));
subplot(3, 1, 2)
imagesc(pwd)
title('Distance matrix')
%% Perform tSNE
no_dims = 2;
perplexity = 150;
yd = tsne_d(pwd, [], no_dims, perplexity);
%% Plot results
subplot(3, 1, 3)
scatter(yd(1:100, 1), yd(1:100, 2))
hold on
scatter(yd((1:100) + 100, 1), yd((1:100) + 100, 2))
scatter(yd((1:100) + 200, 1), yd((1:100) + 200, 2))
title('tSNE embedding')
消毒的距離矩陣後(即分配失蹤者一定的價值),你會在%% Perform tSNE
開始。 perplexity
是一個參數,它應該近似匹配您在羣集中預期的點數。在我的例子中,我選擇了150個,因爲我還想考慮周圍的點。原文對算法的功能做了很好的描述。
謝謝。你介意解釋如何以這種方式使用它?這對我來說有點難,因爲我沒有數學背景,也從來沒有使用過這個庫。將不勝感激。 – PedroN
非常感謝。我仍然有幾個問題,如果你不介意的話: 1.'pwd'是否應該是零對角線的距離矩陣? 2.'yd'應該是一個矩陣,其中距離矩陣的最終點的x-y座標是?例如,如果我只有3個點和距離3 * 3的距離矩陣,那麼困惑度應該是3? – PedroN
1.是2.是3.這取決於您的數據。我假設你的觀點有一些結構,即你在看不同的羣體,或者有一個連續變量。如果你有兩組20分,那麼困惑= 25可能是一個不錯的選擇。你可以玩這個參數。此外,由於算法使用隨機起點進行底層優化,因此每次都會得到不同的結果,並且您可以選擇最好的結果。 – zeeMonkeez
http://www.math.le.ac.uk/people/ag153/homepage/KmeansKmedoids/Kmeans_Kmedoids.html – Mikhail