Soru sorAtlayarak Değer Elde Etme Döngüsü
matlab.m tarafından 1 yıl önce soruldu

Elimde 3 sütundan oluşan bir matrisim bulunmaktadır. Cross Validetion(Çapraz Sorgulama) diye adlandırılan bir yöntemle verilerimin güvenirliğini test etmek istiyorum. 1. ve 2. sütundaki verileri kullanıp 3. sütundaki değere yakınlık derecesini test ediyoruz. Bunun için formülden kısaca bahsedecek olursam 1. ve 2. sütunun ilk satırını almayıp diğer satırları kullanıp bir değer elde ediyoruz bu değeri 3. sütunda bulunan ilk değerle uyumlu mu değil mi ona bakıyoruz. Benim sıkıntı yaşadığım nokta ise bir sonraki aşamada 1. ve ve 2. sütunun ikinci satırını almayıp 1,3,4,5,6…. diye devam eden satırlarını kullanıp tekrar bir değer elde ediyoruz ve bu değeri 3. sütunun 2. değeri ile uyumuna bakıyoruz. Yani ilk aşama 2,3,4,5,6,7…. kullanıp birinci değer elde etme sonra 1,3,4,5,6,7… kullanıp ikinci değer elde etme sonra 1,2,4,5,6,7…. kullanıp üçüncü değer elde etme bu böylece matrisimin boyutu kadar devam edecek bunu matlab de nasıl yapabilirim. Yardımcı olursanız sevinirim. 

1 Cevap
Caglar Yönetici tarafından 1 yıl önce cevaplandı

Merhaba,

Bahsettiğiniz işlemin adı leave-one-out cross validation. Eğer matlab machine learning fonksiyonları ile bir iş yapıyorsanız, bu istediğinizi matris satırları ile tek uğraşmadan parametre olarak iletmeniz de mümkün olabilir. İlgili fonksiyonların dokümantasyonuna bakarsınız.

Bahsettiğiniz ayrımı cvpartition objeleri oluşturarak da yapabilirsiniz.

data = rand([1000,10]);
cv_obj = cvpartition(height(data),"LeaveOut");

Örneğimde 1000 satır olduğu için 1000 adet training-test ayrımı oluşacaktır.
cv_obj içinde veri değil, hangi satırların dahil olduğunu belirten logical değerler yer alıyor. Örneğin 36 numaralı ayrımdaki verileri elde etmek için:

training = data(cv_obj.training(36),:)
test= data(cv_obj.test(36),:)

Tek amacınız bu işlem ise, cross validationla ilgili daha fazla işiniz yoksa veya öğrenmek istemiyorsanız, bahsettiğiniz işlemi temel komutlarla yapmak da mümkün:

satirlar = 1:height(data);
for satir = 1:height(data)
training_index = satirlar ~= satir;
test_index = satirlar == satir;
training = data(training_index,:);
test = data(test_index,:)
%kendi denklem işlemleriniz ve hesaplamalarınız
end