タイトルがあいまいなことをお詫びしますが、これをどのように表現するか完全にはわかりません。だから私に耐えなさい。
データのマトリックスがあります。各列と行は特定のベクトル(列1 =行1、列2 =行2など)を表し、すべてのセル値は対応するベクトル間の余弦の類似性です。したがって、行列のすべての値はコサインです。
これでやりたいことがいくつかあります。まず、その上のすべてのベクトルを示す図を作成したいと思います。私はすべてのベクトル間の角度の正弦を知っており、各ベクトルの大きさを知っていますが、それが私が持っている唯一の情報です-さまざまなペアワイズ角度のすべてを実行して表示する実装できるアルゴリズムがありますグラフィカルに?つまり、すべてのベクトルが相互に関連している場所がわかりません。また、データポイントが多すぎて、手作業でこれを行うことはできません(たとえば、ベクトルが3つしかなく、それらの間の角度がすべて45、12だった場合)。 、および72度それは些細なことです)。では、どうすればこれを実行できますか?これを行うためにどのような数学関数が必要になるのか、私には少しもわかりません。(私は83個のベクトルを持っているので、それは何千もの正弦値です)。
私がやりたいもう一つのことはもっと簡単ですが、私はそれを理解するのに苦労しています。正弦値をデカルト座標に変換して、散布図に表示できます。散布図の各点をプロット上の(0,0)に接続する方法はありますか?
最後に、上記のいくつかを自分で行う方法を理解しようとすると、いくつかの矛盾に遭遇しました。83個のベクトルのそれぞれの平均角度とデカルト座標を計算しました。このための計算は簡単で、私はそれをチェックして再チェックしました。しかし、私がそれをプロットしようとすると、異なるプロット方法は私に根本的に異なるものを与えます。したがって、デカルト座標を散布図としてプロットすると、次のようになります。
コンパスプロットで平均角度をプロットすると、次のようになります。
そして、矢筒プロットを使用すると、次のようになります(原点を上下にシフトして、見やすくするために、これを少し変換しました):
私は何か間違ったことをしていますか、それとも私が使用しているプロット関数を誤解していますか?これらの結果はすべてかなり一貫性がないように見えるためです。コンパスプロットの平均角度はすべて<30度程度ですが、矢筒プロットでは90度を超えるものもあり、散布図では30度を超えています。何が起きてる?
(これが私のコードです:)
cosine = load('LSA.txt');
[rows,columns]=size(cosine);
p = cosine.^2;
pp = bsxfun(@minus, 1, p);
sine = sqrt(pp);
tangent = sine./cosine;
Xx = zeros(rows,1);
Yy = zeros(rows,1);
for i = 1:columns
x = cosine(:,i);
y = sine(:,i);
Xx(i,1) = sum(x) * (1/columns);
Yy(i,1) = sum(y) * (1/columns);
end
scatter(Xx,Yy);
Rr = zeros(rows,1);
Uu = zeros(rows,1);
for j = 1:rows
Rr(j,1) = sqrt(Xx(j,1).^2 + Yy(j,1).^2);
Uu(j,1) = atan2(Xx(j,1),Yy(j,2));
end
%COMPASS PLOT
[theta,rho] = pol2cart(Uu,1);
compass(theta,rho);
%QUIVER PLOT
r = 7;
sx = ones(size(cosine))*2; sy = ones(size(cosine))*2;
pu = r * cosine;
pv = r * sine;
h = quiver(sx,sy,pu,pv);
set(gca, 'XLim', [1 10], 'YLim', [1 10]);