Merhaba elimde 2 faklı x,y,z 'si olan veri seti var. Bu 2 veri setini ayrı ayrı k-means clustering kullanıp sınıflandırarak orta noktalarını buldurdum ve ardından da bu orta noktaları çizdirdim. Amacım bu iki veri seti arasındaki noktalar arasındaki en küçük mesafeyi hesaplatmak.(linkteki resimde x ile en yakın o arasındaki mesafeyi euclid yontemi ile hesaplatmak istiyorum) Şimdiye kadar yazdığım kod aşağıdaki gibidir. Matlabda yeni oldugum için içinden çıkamadım bu mesafeleri nasıl hesaplatabilirim. Birde hesaplattığım noktalar arasına ok koyabilmem mümkün mü? Teşekkürler.
https://resmim.net/f/GUEOsM.jpg
x=xlsread('ucd1.xlsx', 'A:A');
y=xlsread('ucd1.xlsx', 'B:B');
z=xlsread('ucd1.xlsx', 'C:C');
a=xlsread('ucd2.xlsx', 'A:A');
b=xlsread('ucd2.xlsx', 'B:B');
c=xlsread('ucd2.xlsx', 'C:C');
xyz=[x y z];
abc=[a b c];
rng(14,'twister');
[idx1,C1] = kmeans(xyz,150,'MaxIter',3,'Start',C1);
[idx2,C2] = kmeans(abc,150,'MaxIter',3,'Start',C2);
plot3(C1(:,1),C1(:,2),C1(:,3),'kx','color','b')
hold on
plot3(C2(:,1),C2(:,2),C2(:,3),'ko','Color','r')
Her x'e en yakın o'yu bulmak için mesafeler matrisinin her satırındaki minimum değer kullanılabilir. Tüm x lere mesafeleri toplamı en kucuk olan I yu bulmak için de, mesafeler matrisinin tum sutunlari toplanıp, en kucuk toplami olan seçilebilir?
Yazmak anlatmaktan daha pratik geldi, net olmayan yer varsa yazarsiniz:
vektorler_1=rand([10 3]);
vektorler_2=rand([10 3]);
mesafeler=pdist2(vektorler_1,vektorler_2); %10x10luk matris olusturacak.
%Orn. mesafeler(5,3) ilk kumenin 5. elemani ile ikinci kumenin 3. elemani arasindaki mesafeyi verecek
en_kisa_mesafe=min(min(mesafeler)); %en kucuk mesafe degerini bul
[indis_1,indis_2]=find(mesafeler==en_kisa_mesafe); %en kucuk mesafe degerinin matriste yerini bul
fprintf('İlk matristen %d ve ikinci matristen %d numarali eleman alinirsa, \n %d ile en kisa mesafe elde edilir.', …
indis_1, indis_2, en_kisa_mesafe)
Cikti:
İlk matristen 6 ve ikinci matristen 4 numarali eleman alinirsa,
1.570025e-01 ile en kisa mesafe elde edilir.
verdiğiniz yanıt için teşekkürler ancak demek istediğim, tüm data seti içerisindeki en kısa mesafe değil. Şekildeki her "x" ile gosterilen noktaya en yakın "o" noktasını bulup hesaplatmak
Merhaba tekrar,
yanıtınız için teşekkürler. Son yazdığınızın yanıtın ilk cümlesi esas aradığımdı. Bu konunun devamı niteliğinde bir soru daha sormak istiyorum;
en başta belirttiğim gibi Kmeans ile oluşturulmuş C1 ve C2 veri setlerim var. C1 veri setinde her noktaya C2'de karşılık gelen en yakın noktaya olan uzaklığı da buldurdum. Ancak bu mesafelerin hangi C1 ve C2 noktaları arasındaki uzaklıklar olduğu bulunabilir mi? en azından hangi mesafenin hangi C1'deki hangi noktaya karşılık geldiğini bulabilirmiyiz?
Teşekkürler..
Tam anlamayadım sanırım, mesafeler matirisi zaten hangi noktadan mesafe hesaplandigina gore dolduruluyor.
mesafeler(7,2) yazdığınızda, C1'deki 7. eleman ve C2'deki 2. eleman arasindaki mesafeyi gormus olacaksiniz.
Her satirin en kucuk elemani, C2'deki en yakin noktadan hesaplanan mesafe olacak. O en kucuk elemanin hangi sutunda oldugunu kaydedince de hangi elemanin hangisiyle eslestigini kaydetmis olacaksınız.
Mesela C1 3, C2 4 elemanli olsaydı:
https://resmim.net/f/x4kBjB.png
Kısaca ben şunu yapmak istiyorum her C1'in (x,y,z) değerini yazdırıp yanına en kısa mesafedeki C2 değerini (x,y,z) yazdırıp, yanına da aralarındaki mesafeyi yazdırmak istiyorum.
Yani çıktı olarak en son
(C1 (x,y,z),C2 (x,y,z),distance) şeklinde çıktı almak istiyorum.
Teşekkürler..
günaydın,
anladığım kadarıyla bunun için tüm hesaplamaları yaptık?
C1 ve C2'nin xyz olarak değerlerini tutan C1 ve C2 matrisleri var, her C1 için en kısa mesafedeki C2'nin hangi eleman oldugunu belirten c2_den_secilen dizisi var, yine aynı eşleşme için mesafe değerini veren en_kisa_mesafeler dizisi var. (Bir önceki cevabımdaki resim görünüyor değil mi?)
Hepsini bir anda tek çıktı olarak nasıl alırız mı demek istiyorsunuz?
Merhaba,
Evet aradığım hepsini gormek.. C1(x,y,z olarak) ve C1'e karşılık gelen C2(x,y,z olarak) ve bunların arasındaki mesafe
Teşekkürler