:::: MENU ::::
MATLAB

TSPLIB verisini MATLAB ile işlenebilecek hale nasıl getirebiliriz?

Sayın Mustafa Servet KIRAN hocamın aşağıdaki yorumu sonucu yazı içeriği değişmiştir.

EDGE_WEIGHT_TYPE: GEO
alanı oldukça önemli, GEO ise farkı denklem ile, EUC ise öklit denklemi ile uzaklık hesaplanmalıdır. GEO’yu EUC şeklinde hesaplarsanız “optimumdan daha optimum” (!) sonuç elde edebilirsiniz.
Cevahir her zamanki gibi detaylara önem vermeden ana mantık faydalı olmaktır prensibiyle yukarıdaki paylaşımı yaptığı için böyle bir hatanın oluşması kaçınılmazdı.

Bu arada pdist fonksiyonu matlabda çiftler arasındaki öklit mesafesini hesaplar, yukarıdaki hesaplama dolayısıyla yanlıştır.

Gezgin satıcı problemine çözüm ararken, literatürde bulunan bir çok kıyas problemi üzerinde test yapılmaktadır. TSPLIB tarafından sağlanan formatın kendi çözümlerimde kullanmak üzere aşağıdaki şekilde hazırlıyorum.

Öncelikle verilen koordinatların hangi tipte olduğuna dikkat etmemiz gerekiyor. Ben genelde öklid uzayında verilmiş verilerle çalıştığımdan, yukarıdaki uyarı yorumunu o yüzden aldım. Şimdi hem öklid hem de geo nasıl hesaplanır birlikte inceleyelim.

Aşağıdaki problem (ulysses22.tsp), EDGE_WEIGHT_TYPE: GEO olduğu için, verilen koordinatlar enlem ve boylam bilgisini içermektedir.

TSPLIB kendi sayfasında bu problem için optimum değeri 7013 olarak vermiş, yani bizim hesaplamamız optimum tur değerini aldığı zaman bu değeri vermelidir.

kodunu çalıştırdığımız zaman 6971 değerini vermektedir.

Öncelikle yukarıdaki hesaplamayı TSPLIB’ın kendi sayfasından aldım.

Farklı olan derecenin radyana dönüşümü. O dönüşümden dolayı bir fark olabilir mi diye ilgili sayfadaki derece radyan dönüşümünü yaptım.

Bu dönüşüm ile yaptığım hesaplamada ise 7132 buldum.

Dikkat ederseniz RRR = 6378.388 şeklinde bir sabit, farklı kaynaklarda bu sayının farklı alındığını gördüm. O yüzden bir hesaplama farklılığı olabilir.

Şimdi gelelim öklid uzayında verilmiş bir problemin dönüştürülmesine:

eil51 problemi aşağıdaki gibidir:

Yukarıdaki koordinat bilgilerini Matlab içerisine aktarıyoruz.
a=[51×2 boyutunda koordinatların bulunduğu matris];
b=pdist(a); / Koordinatların birbirine göre uzaklıkları hesaplanıyor.
c=squareform(b); / Uzaklıkları 51×51’lik kare matris haline çeviriyoruz.

optimum 426 iken benim hesabımda 429.9833 bulunuyor. Sebebi ondalıklı sayılardan kaynaklı hassasiyettir.

Bu arada pdist fonksiyonu matlabda çiftler arasındaki öklit mesafesini hesaplar, yukarıdaki hesaplama dolayısıyla yanlıştır.

pdist komutu 2 sütun şeklinde verilen verileri de hesaplıyor.



Matlab ile Friedman rank testi nasıl yapılır?

Elimizde 3 farklı algoritmanın 30 farklı durumda ürettikleri sonuçlar olsun. Bu sonuçları kullanarak Friedman rank testini nasıl yaparız. Öncelikle A, B ve C algoritmalarımızın her birinin her durumdaki ortalamalarının kayıtlı oldukları vektörlerin elimizde olduğunu varsayıyorum. Yani A=[30×1]’lik bir vektördür. Aynı şekilde B ve C’de bu şekildedir. Kıyaslama optimum değerlere göre yapılacağından kendi kıyaslamımızda ilgili fonksiyonun optimum değerini kullanmamız gerekir.

Kolaylık olması açısından A hep 1, B hep 2, C hep 3 üretmiş olsun ve optimum değerimiz 2 olsun. Direk görüleceği üzere B algoritmasının birinci, A ve C’nin ikinciliği paylaşması gerekmektedir. Bakalım öyle mi olacak?

Not: Değerlerin negatif olmaması için mutlak değer işlemi uyguladık. Negatif değerli sonuçlarda sıkıntı çıkmaktadır.

Yukarıdaki kodu Matlab ortamında çalıştırdığınız zaman meanranks: [2.5000 1 2.5000] gibi bir çıktı veriyor. Görüleceği üzere A B C sıralamasında verdiğimiz için A’ya 2,5,B’ye 1, C’ye ise 2,5 değerlerini verdi. Tam da beklediğimiz gibi değil mi?

Diyelim ki, optimum değer 0 olsun. O zaman A 1., B, 2. C ise 3. olması gerekir. Hemen deneyelim.

opt değerini 0 yapıp yeniden çalıştırdığımızda meanranks: [1 2 3] değerini elde ediyoruz.

Siz de kıyaslayacağınız parametreleri bu şekilde vererek, Friedman rank testini yapabilirsiniz. Gerçi bu testin normal derecelendirmeden ne farkı var, bilmiyorum. Bilen istatistikçi varsa yorum yazsın, halkımızla paylaşalım.

Umarım faydalı olur.


MATLAB ile Derin Öğrenmeye Giriş (Introducing Deep Learning with MATLAB)

Mathwork firması tarafından hazırlanan “Introducing Deep Learning with MATLAB” tanıtımını okurken aldığım notlar aşağıdadır. Dokümanı incelemek için tıklayınız.

Derin öğrenme, makine öğrenmesinin bir parçası olup bir sınıflandırma modelinin direk resim, müzik ve metinlerden öğrenmesini amaçlamaktadır. Genellikle sinir ağları mimarisi üzerine uygulanan derin öğrenme, birkaç katmanlı sinir ağının yüzlerce katmanlı hale gelmiş hali gibi düşünülebilir.

Bazı derin öğrenme uygulamaları:

-Otonom bir aracın yaya şeridi gördüğü anda daha dikkatli olması.
-ATM’nin sahte parayı reddetmesi.
-Görüntüden anlık çeviri yapmak.

Son yıllarda sınıflandırma başarısı giderek artmakta, böylece Derin Öğrenme popülerliğini artırmaktadır.

ImageNet ve PASCAL VoC gibi çok büyük veri kümelerine erişim imkanı sağlanması, GPU ile çok uzun süren hesaplamaların çok kısa sürelerde yapılabilmesi, ön tanımlı eğitim ile büyük veri kümelerinin daha küçük boyutlu verilerle temsilinin sağlanması Derin Öğrenme’nin popülerliğini artırmıştır.

Derin Sinir Ağı (Deep Neural Network):

Bir Derin Sinir Ağı Nasıl Öğrenir?

Başlangıçta ham girdi resmi verilir, daha sonraki katmanlarda ise modelin kendi oluşturduğu RELU (rectified linear units) bilgisi aktarılır ve sonuç olarak resim içerisindeki objeler tahmin edilmeye çalışılır.

Ham Girdi -> Convolution -> RELU (rectified linear units) -> Pooling -> aşamaları sürekli tekrar eder.

Dönüşümlü Sinir Ağları (Convolutional Neural Networks)

CNN veya ConvNet olarak kısaltılan Dönüşümlü Sinir Ağları, resim ve videolardan öğrenen en etkili derin öğrenme yaklaşımlarındandır.

Veriye convolution, pooling, rectified linear unit (ReLU) işlemleri onlarca veya yüzlerce katmanda tekrar edilerek veriden farklı öznitelik çıkarıp öğrenilmeye çalışılmaktadır.

Konvolüsyon(convolution), girdi görüntülerini her biri görüntülerden bazı özellikleri aktive eden bir dönüşümlü filtre kümesine yerleştirir.

Havuzlama (pooling), doğrusal olmayan örneklem azaltmayı gerçekleştirerek çıktıyı basitleştirerek ağın öğrenmesi gereken parametre sayısını azaltır.

Doğrultulmuş doğrusal birim (rectified linear unit (ReLU)), negatif değerleri sıfıra eşleyerek ve pozitif değerleri koruyarak daha hızlı ve daha etkili bir eğitim sağlar.

Özellik çıkarım aşamasından sonra sınıflandırma aşamasına geçilir:

Sonuncu katman, K’nın boyutlarının bir vektörünü çıkartan tamamen bağlı bir katmandır (K), burada, K, ağın tahmin edebileceği sınıfların sayısıdır. Bu vektör, sınıflandırılan herhangi bir görüntünün her sınıfının olasılıklarını içerir.

CNN mimarisinin son katmanı, sınıflandırma çıktısını sağlamak için bir softmax işlevi kullanır.

Derin Öğrenme ve Makine Öğrenmesi arasındaki farklar nedir?

Derin öğrenme, makine öğrenmesinin bir alt koludur. Makine öğrenmesi ile bir resimden özellikler çıkarılabilirken, derin öğrenme ile ham verilerden özellik çıkarımı yapılır. Derin öğrenme, yüzlerce, binlerce hatta milyonlarca veriye ihtiyaç duyar.

Makine Öğrenmesi Derin Öğrenme
Küçük veri setleriyle iyi sonuçlar Çok büyük veri setlerine ihtiyaç duyar
Eğitim hızlıdır Eğitim için yoğun hesaplama gerekir
İyi sonuçlar için farklı öznitelikler ve sınıflandırıcılara ihtiyaç duyar Öznitelikleri ve sınıflandırıcıları kendisi öğrenir
Doğruluk platoludur Doğruluk sınırsızdır

Yukarıdaki tablo aşağıdaki tablonun çevirisidir:

Derin Öğrenme Uygulaması

AlexNet, 2012 yılında yayınlanmış olan bir milyondan fazla resim ile eğitilmiş, yaklaşık 1000 kategoride sonuç veren bir önceden eğitilmiş resim sınıflandırma ağıdır.

Not: Mevcut MATLAB sürümün AlexNet entegrasyonunu desteklemediği için burada bırakıyorum. Siz kaynak dosyadaki uygulamayı inceleyebilirsiniz.


Sayfalar:1234567