tag:blogger.com,1999:blog-217148152024-03-13T06:05:48.591+03:00vs.blog :)sunar!Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.comBlogger20125tag:blogger.com,1999:blog-21714815.post-71647992115205758692018-03-26T19:22:00.001+03:002018-03-26T19:22:54.535+03:00First poem post...<div class="graf graf--p graf-after--h3" id="fa0f" name="fa0f" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 10px;">
<em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">As long as you try<br />to impress others,<br />you are not convinced<br />of your own strength.</em></div>
<div class="graf graf--p graf-after--p" id="d8d3" name="d8d3" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
<em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">As long as you strive<br />to be better than others,<br />you are doubting your<br />own worth.</em></div>
<div class="graf graf--p graf-after--p" id="2d65" name="2d65" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
<em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">As long as you try<br />to elevate yourself<br />by lowering others,<br />you are doubting your<br />own greatness.</em></div>
<div class="graf graf--p graf-after--p" id="fae1" name="fae1" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
<em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Who is in peace with oneself<br />doesn’t have to prove anything<br />to others.</em></div>
<div class="graf graf--p graf-after--p" id="f22f" name="f22f" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
<em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Who knows one’s own worth<br />doesn’t need validation.</em></div>
<div class="graf graf--p graf-after--p" id="6846" name="6846" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
<em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">Who knows about one’s own greatness<br />lets others keep theirs.</em></div>
<div class="graf graf--p graf-after--p graf--trailing" id="a0eb" name="a0eb" style="--baseline-multiplier: 0.17; background-color: white; color: rgba(0, 0, 0, 0.84); font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 21px; letter-spacing: -0.003em; line-height: 1.58; margin-top: 29px;">
<em class="markup--em markup--p-em" style="font-feature-settings: 'liga' 1, 'salt' 1;">-Gabriele Ebbighausen</em></div>
<div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com0tag:blogger.com,1999:blog-21714815.post-36811039802315735902016-12-14T17:35:00.000+03:002016-12-14T17:54:25.537+03:00İnsansız hava aracı görüntülerinde hareketli nesne tespiti. (Moving object detection on unmanned aerial vehicle videos)<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: large;"><span id="goog_1920243876"></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: large;"><span id="goog_1920243878"></span><a href="https://www.blogger.com/"></a><span id="goog_1920243879"></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: large;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: large;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: large;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: large;"><iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/vMnpD-6PtmE/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/vMnpD-6PtmE?feature=player_embedded" width="320"></iframe></span><span id="goog_1920243877"></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<a href="https://www.youtube.com/watch?v=vMnpD-6PtmE">Youtube video linki</a> </div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
Insansız hava araclarının çok yüksekten uçması, faydalı yükün hem hava aracı hareketi, hem de titreşime maruz kalması nedeniyle alınan görüntülerde yer yüzeyinde hareketli nesneler kolay fark edilememekte. Ayrıca, deniz, ormanlık veya karasal arazi yapısı da hareketli nesnelerin tespit edilmesini zorlaştırmakta.</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Bilindigi gibi IHA lar uzun saatler boyunca havada kalırlar. Faydalı yük operatörü uzun süreler boyunca görüntüyü izler. Uzun süreli benzer görüntülere bakan insanların sahnedeki değişimleri algılayamadıkları bilinmektedir. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Sevgili <a href="https://tr.linkedin.com/in/birol-kuyumcu-53798771">Birol Kuyumcu</a> ile 2,5 sene kadar önce bu konuda bir projeye basladık ve üzerinde epeyce emek verdik. Bu konuda, üzerinde çalışmak için video veriseti bulmak oldukça zor. İnternetten bulabildiğimiz videoların çoğu düşük çözünürlüklü ve sıkıştırılmıs videolar idi. Bilindiği gibi öznitelik çıkartma, arka plan ayırma gibi uygulamar için videonun kalitesi çok önemli. Tam olarak amaçladığımız sonuçlara ulaşamasakta ortaya güzel bir altyapı çıktı. Ancak veri seti sıkıntısından projeye devam edemedik. </div>
<div style="text-align: justify;">
Uygulanan yöntemın detaylarını Birol Bey blogunda <a href="http://derindelimavi.blogspot.com.tr/2013/08/hareketli-kameradan-hareketli-nesne.html">yayınladı</a>. Sonrasında bu konu ile alakalı gerek yurtiçinden gerekse yurtdışından çok sayıda e-maıl aldık. Bunun uzerine, başka projelere faydalı olur umuduyla kodları <a href="https://www.gnu.org/licenses/gpl-3.0.en.html">GNU GPLv3</a> lisansi ile açmaya karar verdik. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Asagidaki linkten projenin kaynak kodlarina ulasabilirsiniz.</div>
<div style="text-align: justify;">
<a href="https://github.com/birolkuyumcu/TargetDetection">Access source code on GitHub! </a> </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Proje OpenCV 2.4 windows ortaminda C++ ile gelistirildi. Kullanilan fonksiyonlar OpenCV 2.4.x ile uyumludur. Gelistirme ortami olarak QtCreator kullanildi.</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Faydali olmasi dilegi ile...</div>
<div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com1tag:blogger.com,1999:blog-21714815.post-35767736698555431602016-10-20T21:12:00.001+03:002016-10-20T21:24:04.394+03:00Emniyet kiritik sistemler icin model tabanli yazilim gelistirme (Model based software development for safety critical systems)<br />
<div style="text-align: justify;">
Merhabalar bugün ESA-Estec'te "10th ESA Workshop on Avionics, Data, Control and Software Systems" calistayina katilma firsati buldum. Ogleden sonranin konusu, uzun zamandir uzerine yazmak istedigim model tabanli otomatik kod uretimi idi. Avrupanin uzay konusunda onde gelen firmalari model tabanli olarak gelistirdikleri prolerini ve bu konudaki tecrubeleri paylastilar. Bu yazida sunum yapan firmalarin model tabanli gelistirmeye bakisini, teknoloji seviyesini ve konuyla alakali kendi tecrubelerimi paylasacagim.</div>
<ul style="text-align: justify;">
<li> 1990'li yillarda deneysel projelerde kullanilsada artik neredeyse karmasik kontrol algoritmasi iceren butun ciddi projelerde model tabanli gelistirme yoluna gidiliyor. Bunda etkili olan, kod uretme araclarinin son yillarda ciddi sekilde gelismesi ve model tabanli gelistirme yaklasiminin yazilim gelistirme/verifikasyon maliyetlerini ciddi sekilde dusurmesi. Sunum yapan Thales Alenia Space, OHB Sweden, ESTEC gibi firmalar bu gorusu destekliyorlar. Gunumuzde artan sayida projenin kodu otomatik olarak uretiliyor. Airbus ta bu sekilde gelistirme yapiyor. Hollanda'da calistigim iki sirkette de, universite de kontrol algoritmalari model tabanli olarak gelistiriyoruz. </li>
<li>Matlab/Simulink/Embedded Coder neredeyse piyasada tekel olmus durumda. Gecmiste cesitli farkli araclar kullanilirken giderek Mathworks un pazar payi artiyor. Sunum yapan firmalarin gorusu bu sekilde. Ben de sadece bunu kullandim. </li>
<li>Uzay sektoru benim gozlemime gore diger sektorlerden biraz daha geride otomatik kod uretimi konusunda. Havacilik, medikal ve otomotiv sektorlerinde kullanim cok daha yaygin. Ornegin, artan sayida kullanimla birlikte ESA bunyesinde ECSS yazilim gelistirme standardi uzerinde model tabanli gelistirmeyi duzenleyecek revizyon yapmali miyiz? konusu henuz tartisiliyor. Havacilikla DO-178C standardi seneler once DO-331 (model based) ekiyle birlikte gelmisti.</li>
<li>Calistayda ilgimi ceken bir baska konu ise bilgisayarla gorme tabanli navigasyon ve ucus kontrol sistemleri idi. Geleneksel kontrol algoritmalari iceren yazilimlarda model tabanli gelistirme yaklasimi artarken, bilgisayarla goru uygulamalarin elle kodlandigini ogrendim. Sanirim otomatik olarak uretilen kod performans konusunda elle yazilan kod ile henuz rekabet edemiyor. Performans degerlendirmesi icin simulink ile gelen demo uygulamalarinin birisinden C kodu uretmeyi planliyorum, Gerceklestirirsem sonuclarini burada paylasmak isterim. (Eger bu konuda tecrubeniz varsa, paylasirsaniz memnun olurum.)</li>
<li>Modeller metin tabanli olmadigi icin geleneksel sekilde "diff" alinamiyor. Birden cok gelistiricinin calistigi projelerde farkli gelistiricilerin gelistirdigi modullerin nasil birlestirilecegi belli degil. Bu nedenle modellerin konfigurasyon yonetimi biraz daha sikintili. Model dogrulama yontemleri(unit tests, test coverage vs.), geleneksel yontemlere gore farkli. Bu konularin proje basinda iyi bir sekilde planlanmasi gerekiyor. Bu konu aslinda blog yazisinda anlatilamayacak olcude detayli...</li>
<li>Hem karmasikligi yonetilebilir seviyede tutabilmek icin, hem de uretilen kodun dogrulugundan emin olabilmek icin, modelleme standarti cok onemli. Firmalarin genellikle kendi tecrubeleriyle olusturduklari modelleme standartlari var.</li>
</ul>
<div style="text-align: justify;">
Cok uzun zaman sonra yazdigim yazinin sonuna geldik. Birilerine faydali olmasi dilegiyle..</div>
<div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com0tag:blogger.com,1999:blog-21714815.post-85270865748362440182011-08-25T20:36:00.007+03:002011-08-25T21:14:13.447+03:00OpenCV 2.3 ile Optical Flow C++<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiee5QbAt1OO5IIWWWXGRkRHr_qUz6hqPdiPPFwC36AKA418uq1melSiOCm6uEh2sL1qVtXhHJiWJHgvf7352SepvtxY6qKOOs_c3gPdqmY7BuytR_DTUrkY0lvFnhz_jJMf6Xt7Q/s1600/penguin_flowBM2_128x141.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiee5QbAt1OO5IIWWWXGRkRHr_qUz6hqPdiPPFwC36AKA418uq1melSiOCm6uEh2sL1qVtXhHJiWJHgvf7352SepvtxY6qKOOs_c3gPdqmY7BuytR_DTUrkY0lvFnhz_jJMf6Xt7Q/s200/penguin_flowBM2_128x141.png" width="181" /></a></div>
<div style="text-align: justify;">
Optical flow yöntemi, hareket kestirimi, nesne takibi, video stabilizasyonu(titreşim,hareket giderme), imge mozaikleme, stereo vision ile derinlik bilgisi eldesi gibi operasyonlarda sıklıkla kullanılan temel bir araçtır.
Genel olarak Optical flow yöntemi bir resimdeki noktanın diğer bir resimde nereye gittiğini bulmaktadır.
<a href="http://dasl.mem.drexel.edu/~noahKuntz/openCVTut9.html">Burada</a> OpenCV nin sağladığı fonksiyonlarla Lucas Kanade optical flow örneği bulunmakta. OpenCV kütüphanesinin C dili arayüzlerini kullnıarak geliştirilen bu uygulamayı C++ a çevirdim.</div>
<br />
<a name='more'></a><br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;">
<div style="text-align: -webkit-auto;">
<br /></div>
<div style="text-align: -webkit-auto;">
<br /></div>
<b><a href="http://www.4shared.com/file/lNhjU1Jq/TargetDetection.html?"><span class="Apple-style-span" style="color: orange;">Download VS2010 OpenCV 2.3 Template (with precompiled libs)</span></a></b></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;">
<b><span class="Apple-style-span" style="color: orange;"><a href="http://www.4shared.com/file/lNhjU1Jq/TargetDetection.html?"><span class="Apple-style-span" style="color: orange;">and Lucas Kanade Optical Flow Sample with C++ interface </span></a> </span></b></div>
<br />
<div style="text-align: justify;">
<script src="https://gist.github.com/1170793.js">
</script>Yukarıdaki linkten tüm projeyi indirebilirsiniz. Proje VisualStudio 2010 C++ ile OpenCV 2.3 ü kullanmak için herşeyi içeriyor. Tüm libler, headerlar, dll ler proje içerisinde. Bu nedenle boyutu biraz büyük. İndirdikten sonra sln dosyasını açtığınızda doğrudan derleme yapabilirsiniz. OpenCV kütüphanesini uygulamanızda kullanma konusunda sıkıntı yaşıyorsanız bu projeyi taslak olarak kullanabilirsiniz. Microsofttan <a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express">VS2010 C++ express edition</a> 'ı ücretsiz olarak indirip kullanabileceğinizi ekleyelim. </div>
<div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com3tag:blogger.com,1999:blog-21714815.post-65984866297499174192011-02-09T23:57:00.014+02:002011-03-27T11:39:18.570+02:00OpenCV 2.2 Windows .lib dosyaları?<div style="text-align: justify;">
OpenCV nin 2.2 versiyonu geçtiğimiz yılın Aralık ayında yayınlandı. 2.3 versiyonunun ise planlanan sürüm tarihi Mayıs 2011 olarak belirtilmiş. Versiyon 2.2 de neler değişmiş <a href="http://opencv.willowgarage.com/wiki/OpenCV%20Change%20Logs">burada</a>. Bu listede ilk gözümüze çarpan kütüphanenin organizasyonunun bir hayli değişmiş olması. Eski versiyonlardan aşina olduğumuz cxcore, cv, cvaux, highgui ve ml modülleri daha küçük parçalara bölünmüş halde karşımıza çıkıyor. Bu değişiklikler kodlarımızda kullanmaya alıştığımız opencv header dosyalarının adının değişmesine neden olmuş. Ayrıca lib ve dll dosyalarıda artık opencv ön ekiyle başlıyor. Bu versiyonun android için de built edilebileceği resmi olarak belirtilmiş. Kütüphanenin C++ desteği de bir hayli gelişmiş. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
OpenCV kütüphanesinin 2.2 versiyonunu Visual Studio ortamında kullanmak istiyorsanız, <s>kütüphanin kodlarını indirdikten sonra CMake ile Visual Studio proje dosyası oluşturup bu projeyi derleyerek dll ve lib dosyalarını oluşturmanız gerekiyor.</s> <a href="http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.2/OpenCV-2.2.0-win32-vs2010.exe/download">buradan</a> windows versiyonunu indirebilirsiniz. Bu pakette kütüphanenin kodları, değişik dillerde örnek programlar ve bin klasörü içerisinde derlenmiş kütüphane dosyaları bulunuyor. Kütüphanenin kodlarıyla ve örnek programlarla ilgilenmeyecekseniz, OpenCV kullanan herhangi bir programı derlemek için minumum gereksinimleri aşağıdaki linkten indirebilirsiniz.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<i><b><span class="Apple-style-span" style="font-family: inherit; font-size: large;"> <a href="http://www.4shared.com/file/jLTkc8p5/OpenCVv22_VisualStudio.html">Download OpenCV v2.2 lib,dll,include files </a></span></b></i></div>
<div style="text-align: center;">
<i><b><span class="Apple-style-span" style="font-family: inherit; font-size: large;"><a href="http://www.4shared.com/file/jLTkc8p5/OpenCVv22_VisualStudio.html">(Windows, compiled with Visual Studio 2010) </a></span></b></i></div>
<div style="text-align: justify;">
<b><i><br /></i></b></div>
<div style="text-align: justify;">
Aşağıda OpenCV v2.2 nin c++ arayüzü ile yazılmış temel bir test programı veriyorum. Aynı cv::Mat objesine döngü içinde jpeg dosyadan okuma yapılmasına rağmen C++' ın güzelliklerinden faydalanılarak memory leak oluşmadığına dikkat ediniz. </div>
<div style="text-align: justify;">
</div>
<a name='more'></a><br />
<script src="https://gist.github.com/889023.js"> </script>
<a href="https://gist.github.com/889023">Kod</a><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com3tag:blogger.com,1999:blog-21714815.post-53127116073408517812011-01-30T03:00:00.001+02:002011-01-30T10:50:07.664+02:00vs.Pratik.Sözlük çıktı!<br />
<div style="text-align: justify;">
Önceleri sözlük karıştırıp kelimeyi bulmak zor gelirdi sonra bir kelimeye bakmak için her seferinde sözlük sitelerini açıp bakmak zor gelmeye başladı. Bunun için hafta sonu kendime ufak bir program hazırladım. Belki sizler için de faydalı olur. </div>
<div style="text-align: justify;">
<br />
<ul>
<li>vs.Pratik.Sözlük, bilgisayarınızda çalışırken sözlük ihtiyacınızı pratik şekilde çözmeye yönelik olarak tasarlanmıştır. </li>
<li>vs.Pratik.Sözlük ile size vakit kaybettirecek, web tabanlı sözlük hizmetlerine veya karmaşık sözlük programlarına ihtiyacınız kalmayacak.</li>
<li>vs.Pratik.Sözlük Google Translate altyapısını kullandığından bu hizmetin sunduğu pek çok dil arasında çevirme olanak sağlamaktadır.</li>
<li>vs.Pratik.Sözlük'ü sadece internet bağlantınız olması durumunda kullanabilirsiniz. vs.Pratik.Sözlük varsayılan kurulumla, İngilizce bir kelime girdiğinizde Türkçeye, Türkçe bir kelime girdiğinizde ise İngilizce'ye çevirmek üzere ayarlanmıştır.</li>
<li>Herhangi bir kelimenin veya cümlenin karşılığını bulmak istediğinizde, sistem çubuğunuzda çalışmakta olan vs.Pratik.Sözlük'ü iki kez ardarda ctrl tuşuna basarak aktif hale getirebilirsiniz. Kelimeyi veya cümleyi girdikten sonra enter tuşuna basmanızın hemen ardından çevrim sonucunu alacaksınız. Çalışmanıza geri dönemek için tekrardan CTRL tuşuna ardarda basın. (Yani hiç mouse kullanmadan çevrim yapabiliyoruz)</li>
<li>-vs.Pratik.Sözlük'ü kullanmaya başlamadan önce bir kereye mahsus olmak üzere google hesabınızla, "http://code.google.com/apis/console" adresinden google translate api key adındaki şifreyi almanız gerekmektedir. Bu şifre ücretsiz olup vs.Pratik.Sözlük'ün google translate altyapısını kullanması için gereklidir. Aldığınız şifreyi ayarlar menüsü altından kaydettikten sonra vs.Pratik.Sözlük'ü kullanmaya başlayabilirsiniz. </li>
</ul>
<div style="text-align: center;">
<b><i><u><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: x-large;"><a href="http://www.4shared.com/file/-LJbjyh7/vsPratikSzlkSetup.html">İndir (949KB)</a></span></u></i></b></div>
</div>
<div style="text-align: justify;">
*vs.Pratik.Sözlük ile alakalı isteklerinizi, sorunlarınızı veya önerilerinizi bu yazı altına yorum olarak veya "volkansalma@yahoo.com" adresine doğrudan e-posta ile iletebilirsiniz.</div><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com0tag:blogger.com,1999:blog-21714815.post-20370031134767402192010-10-10T01:11:00.029+03:002010-10-15T10:39:03.088+03:00Naive Bayes Sınıflandırıcı. C++<div style="text-align: justify;">
Naive Bayes sınıflandırıcı, Bayes karar teorisine dayanan basit bir olasılıksal sınıflandırıcıdır. Çok fazla teorik bilgiye girmeden, wikipedia üzerinde <a href="http://en.wikipedia.org/wiki/Naive_Bayes_classifier">bayes sınıflandırcının anlatıldığı sayfada</a> yer alan bir örnek için yazdığım uygulamayı paylaşmak istiyorum.Örnek başlığı Sex Classification olarak geçiyor.</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Elimizde 4 erkek, 4 bayana ait veriler var. Bu verilerden her birinin bayana mı ait yoksa erkeğe mi ait olduğunu biliyoruz. Amacımız bu verileri kullanarak bir sınıflandırıcı tasarlamak. Bu sınıflandırıcıyı kullanarak kime ait olduğunu bilmediğimiz verilerin sahibinin cinsiyetini doğru olarak tahmin edebileceğiz.<br />
<a name='more'></a><br /></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Bu veriler aşağıdaki şekilde verilmiştir;</div>
<table class="wikitable" style="background-attachment: initial; background-clip: initial; background-color: #f9f9f9; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-collapse: collapse; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; color: black; font-size: 13px; margin-bottom: 1em; margin-left: 0px; margin-right: 1em; margin-top: 1em;"><tbody>
<tr><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;">cinsiyet</th><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;">boy (feet)</th><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;">ağırlık (lbs)</th><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;">ayak boyutu(inch)</th></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">erkek</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">6</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">180</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">12</td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">erkek</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">5.92 (5'11")</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">190</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">11</td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">erkek</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">5.58 (5'7")</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">170</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">12</td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">erkek</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">5.92 (5'11")</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">165</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">10</td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">bayan</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">5</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">100</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">6</td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">bayan</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">5.5 (5'6")</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">150</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">8</td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">bayan</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">5.42 (5'5")</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">130</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">7</td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">bayan</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">5.75 (5'9")</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">150</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">9</td></tr>
</tbody></table>
<br />
<div style="text-align: justify;">
Etiketlerini(cinsiyetleri) bildiğimiz yukarıdaki veriler eğitim kümesi olarak adlandırılır. Gerçek hayat uygulamalarında geliştireceğimiz sınıflandırıcı için, çok büyük veri kümeleri gerekmektedir. Bu yazıda bu veri kümesi anlatımı kolaylaştırmak için seçilmiştir. <br />
<br /></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Örneğimizde sınıflandırıcı geliştirirken; boy, ağırlık ve ayak boyutunu özniteliklerinin normal dağılım olarakta bilinen gauss dağılımına(çan eğrisi) uygun olarak dağıldığını varsayıyoruz. Bu varsayım da Bayes sınıflandırıcısının genel bir özelliği değildir. Burada işimizi kolaylaştırmak için bu şekilde bir kabul yaptık. Pek çok gerçek hayat uygulamasında da Bayes sınıflandırıcısı bu şekilde kullanılmaktadır.</div>
<div style="text-align: justify;">
Örneğimizde her bir öznitelik için erkek ve bayana ait olasılık dağılım fonksiyonu olarak ayrı bir çan eğrisi fonksiyonu olduğunu düşünüyoruz.<br />
<br /></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Bu eğrileri oluşturmabilmek için her bir özniteliğin ortaması ve varyansı gereklidir. Yukarıdaki değerlere göre bu değerleri hesaplarsak aşağıdaki tabloyu elde ediyoruz;<br />
<br /></div>
<div style="text-align: justify;">
</div>
<span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px;"></span>
<br />
<table class="wikitable" style="background-attachment: initial; background-clip: initial; background-color: #f9f9f9; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-collapse: collapse; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; color: black; font-size: 13px; margin-bottom: 1em; margin-left: 0px; margin-right: 1em; margin-top: 1em;"><tbody>
<tr><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;">sex</th><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;">ortalama (boy)</th><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;">varyans (boy)</th><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;">ortalama (ağırlık)</th><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;">varyans (ağırlık)</th><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;">ortalama (ayak boyutu)</th><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;">varyans (ayak boyutu)</th></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">erkek</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">5.855</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">3.5033e-02</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">176.25</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">1.2292e+02</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">11.25</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">9.1667e-01</td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">bayan</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">5.4175</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">9.7225e-02</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">132.5</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">5.5833e+02</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">7.5</td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;">1.6667e+00</td></tr>
</tbody></table>
<br />
Yukarıdaki tabloda verilen bu bilgilerle her bir öznitelik için bayana ve erkeğe ait normal dağılım şeklinde olasılık yoğunluk fonksiyonu elde edilmektedir.
Elimize uzunluğu 6 feet, ağırlığı 130 lbs ve ayak boyutu 8 inc olan bir veri gelmiş olsun. Bu verininin sahibinin cinsiyetini tahmin etmek için aşağıdaki gibi bir yol izlenir.<br />
<br />
Her bir sınıf için öncü(prior) olasılık hesaplanır: Eğitim verileri ele alınarak gelecek test verisinin hangi kümeye hangi olasılıkla dahil olabilieceği özniteliklerine hiç bakılmnaksınız hesaplanır. <br />
<br />
prior erkek olma olasılığı = eğitim kümesinde erkek sayısı / eğitim kümesindeki tüm sayı<br />
<br />
prior bayan olma olasılığı = eğitim kümesinde bayan sayısı / eğitim kümesindeki tüm sayı
<br />
<br />
Örneğimizde her iki küme(erkek ve bayan) içinde prior olasılık: 4 / 8 = 0.5 dir.<br />
<br />
Daha sonra her bir özniteliğin o özniteliğe ait hesaplanmış olasılık dağılım fonksiyonları kullanılarak her bir sınıfa ait olma olasılı hesaplanır. Bizim örneğimizde test verisinde ağırlık 130 lbs olarak belirtilmiş. Erkek ve bayan için hesaplanan ağırlık olasılık yoğunluk fonksiyonlarında130 yerine koyularak 130 lbs ağırlığın % kaç olasılıkla erkek sınıfına ait olabilieceği, % kaç olasılıkla bayan sınıfına ait olacağı hesaplanır. Bu işlem her bir öznitelik için ayrı ayrı yapılır.<br />
<br />
Karar aşamasında ise erkek olma prior olasılığı ile özniteliklerin erkek sınıfına ait olma olasılıkları çarpılır. Bayan içinde aynı işlemler yapılarak posteriorProbabiltyBayan ve posteriorProbabiltyErkek hesaplanır. Hangi sınıfa ait posterior olasılık daha büyükse örnek bu sınıftan kabul edilir.<br />
<br />
<span class="Apple-style-span" style="font-size: small;"> posteriorOlasilikBayan = priorBayanOlasılığı * P(uzunluk|bayan) * P(ağırlık|bayan) * P(ayak boyutu|bayan) </span>
<span class="Apple-style-span" style="font-size: small;"> </span><span class="Apple-style-span" style="font-size: small;"><br /> posteriorOlasilikErkek = priorErkekOlasılığı * P(uzunluk|erkek) * P(ağırlık|erkek) * P(ayak boyutu|erkek)<br /><br />Wikipedia'dan hesaplanmış değerleri yazarsak;</span><br />
<span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"><br /></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;">P(uzunluk|erkek) = 1.5789</span><br />
<span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"></span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;">P(ağırlık|erkek) = 5.9881e-06</span><br />
<span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"></span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;">P(ayak bıyutu|erkek) = 1.3112e-3</span><br />
<span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"><br /></span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"> posterior numerator (erkek) = 6.1984e-09</span><br />
<span class="Apple-style-span" style="font-family: sans-serif;"><span class="Apple-style-span" style="line-height: 19px;"></span></span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"><br /></span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;">P(uzunluk|bayan) = 2.2346e-1
</span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"><br /></span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;">P(ağırlık|bayan) = 1.6789e-2</span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"><br /></span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;">P(ayak boyutu|bayan) = 2.8669e-1</span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"><br /></span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"> posterior numerator (bayan) = 5.3778e-05
</span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"><br /></span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"><br /></span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"> Toplam Posterior olasılık bayan için daha büyük elde edildiğinden test verimiz bayan olarak sınıflandırılır.
Aşağıda bahsedilen örneği gerçekleştirmesi için yazdığım C++ programını bulabilirsiniz.<br /></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"><a href="http://gist.github.com/627767">Native Bayes Sınıflandırıcı örnek kod. (C++)</a></span><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com2tag:blogger.com,1999:blog-21714815.post-84272456849928396362010-02-15T00:26:00.016+02:002011-03-27T11:33:08.234+02:00Zeki Optimizasyon Teknikleri - 3 (Genetik Algoritma)<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU6YRsH_2HjkOg4rfLfcN5UBFQyMbhzzUZWEhtP1PENIEv9X7cNSnZK8xVsGbwVr9WkI9LAF6P76nhgVOyYwdyUrwnzocLDf4dHQVgHx4vqfBbY_tgTou4DPBtDJcA2lp0qkl6mg/s1600-h/dna.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU6YRsH_2HjkOg4rfLfcN5UBFQyMbhzzUZWEhtP1PENIEv9X7cNSnZK8xVsGbwVr9WkI9LAF6P76nhgVOyYwdyUrwnzocLDf4dHQVgHx4vqfBbY_tgTou4DPBtDJcA2lp0qkl6mg/s320/dna.jpg" /></a></div>
<div style="text-align: justify;">
Zeki Optimizasyon Teknikleri yazı dizimizin en son konusu olan Genetik Algoritma, diğer algoritmaların iyi yönlerini birleştiren modern ve etkili bir optimizasyon tekniğidir. Probleme göre en başarılı optimizasyon yöntemi değişmekle beraber Genetik algoritma günümüzde hemen her tür probleme başarı ile uygulanmaktadır. <a href="http://volkansalma.blogspot.com/2009/10/zeki-optimizasyon-teknikleri-1-hill.html">Hill Climbing</a> gibi popülasyon tabanlı bir algoritmadır. Algoritmanın en önemli kısmı üretilen çözümü değerlendiren, fitness function olarak bilinen kısımdır.</div>
<br />
<a name='more'></a><br />
<br />
<div style="text-align: justify;">
Genetik algoritma doğal seçilimden esinlenmiştir. Bu nedenle genetik algoritmada kullanılan terminoloji genetik ile alakalıdır. Algoritma ile alakalı yayınları ve çözümleri okurken kolaylık olması açısından genetik algoritma terminolojisini verelim.<br />
<br />
<ul>
<li> Popülasyon: Çözüm adaylarından oluşan kümedir. Her birey geçerli bir çözüm olmakla birlikte değişik seviyeye sahiptir. Popülasyondaki tüm bireyler aynı şekilde kodlanmış olmalıdır. Probleme göre popülasyondaki birey sayısı büyük veya küçük tutulabilir. Her ikisinin de avantajları ve dezavantajları vardır. Genellikle popülasyondaki birey sayısına tecrübe ve/veya deneme yanılma yoluyla karar verilir.</li>
</ul>
</div>
<blockquote>
Genetik algoritmada ileride anlatılacak tüm işlemler bir sonraki popülasyonu daha iyiye taşımaya yöneliktir.
</blockquote>
<br />
<ul>
<li>Kromozom: Popülasyon içerisindeki bireylerin(çözümlerin) her birine kromozom denir. Gerçek hayat problemlerinde genellikle çok sayıda değişkenin optimizasyonu yapılmak istenir. Bu durumda bir kromozom(çözüm) içerisinde pek çok değişken kodlanmış şekilde bulunur. </li>
<li> Gen: Kromozom içerisindeki anlamlı en küçük bilgidir. Çok değişkenli optimizasyon problemlerimizde değişkenlerin her biri gen olarak adlandırılır. (Binary olarak kodlanmış kromozomlarda bir bit gen değildir. Bir kaç bitin oluşturduğu bir değişken bir gen dir.) </li>
<li> Locus: Kromozom içinde genin bulunduğu konuma locus denir.
Jenerasyon(nesil): Popülasyonun bir andaki durumudur. Bir iterasyon sonrasında daha iyi bir popülasyon(jenerasyon) oluşturulması amaçlanmaktadır. </li>
<li> Eşleşme(Mating): Popülasyon içerisindeki kromozomların eşleşerek yeni bireyler(çözümler) oluşturma işlemidir. Yeni jenerasyona yeni oluşturulan çözümler aktarılır.</li>
</ul>
<div>
<br /></div>
Genetik algoritmada temel işlemler şu şekildedir.<br />
<br />
<ol>
<li>Bir kromozomda tüm çözümü gösterecek şekilde uygun kodlamaya karar verilmesi. </li>
<li>Başlangıç popülasyonunun oluşturulması. Rastgele veya tecrübe yardımıyla yapılabilir.</li>
<li>Popülasyon içerisindeki kromozomların fitness function yardımıyla değerlendirilerek her birine kalite etiketi atanması. </li>
<li>Popülasyon içerisinde daha kaliteli kromozomlara daha çok şans vermek suretiyle rastgeleliği yönlendirerek eşleşme, mutasyon, elitizm gibi operatörler ile yeni bir jenerasyon oluşturulması.</li>
<li>Bu işlemlere belirlenen iterasyon sayısına ulaşana kadar ve yahut çözüm istenen kalite ölçüsüne erişinceye kadar devam edilir.
Yukarıdaki her adımın pek çok değişik uygulama yöntemi bulunmaktadır.</li>
</ol>
<br />
<br />
<div style="text-align: justify;">
Genetik algoritma uygulaması kolay bir yöntem olmakla birlikte yukarıdaki adımları detaylıca açıklamayacağız. Genetik algoritmayı detaylarıyla öğrenmek istiyorsanız Zekai Şen hocamızın dilimizde çok güzel bir kitabı var.(Genetik Algoritmalar ve En İyileme Yöntemleri) <a href="http://www.suvakfi.org.tr/kitap_detay.asp?id=38">Buradan</a> ulaşabilirsiniz. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="http://derindelimavi.blogspot.com/">Bluekid</a> abimizin iki adet çalışması var. Bunlardan bir tanesi bir-kelime bir-işlem yarışmasındaki bir işlem sorusun genetik algoritma ile çözülmesine yönelik. Bir diğeri ise 4 bilinmeyenli bir denklemin genetik algoritma ile sezgisel çözümü şeklinde.<br />
<br /></div>
<div style="text-align: justify;">
Linklerini verelim:</div>
<div style="text-align: justify;">
<a href="http://derindelimavi.blogspot.com/2007/03/genetik-metodla-4-bilinmiyenli-denklem.html">Genetik metodla 4 Bilinmiyenli Denklem Çözümü</a></div>
<div style="text-align: justify;">
<a href="http://derindelimavi.blogspot.com/2006/12/genetik-programlamayla-bir-ilem.html">Genetik Programlamayla Bir işlem</a></div>
<br />
<div style="text-align: justify;">
Linklerdeki projelerde genetik algoritma için <a href="http://fga.sourceforge.net/">FGA -Fast Genetic Algorithm</a> kullanılmıştır. Kullanımı oldukça kolay ve etkili bir kütüphane olmasına rağmen kütüphane kullanmaya aşina değilseniz veya genetik algoritma kısmını kendiniz yazmak istiyorsanız:</div>
<br />
<div style="text-align: justify;">
<a href="http://www.generation5.org/content/2003/gahelloworld.asp">http://www.generation5.org/content/2003/gahelloworld.asp</a> adresinden aldığım aşağıdaki kod ile başlayabilirsiniz.
Bu örnekte çözüm olarak "Hello world!" stringine ulaşılmaya çalışılıyor. Operatörler ve genetik algoritmanın kullanımı çok iyi. Bu kod üzerinden istediğiniz probleme yönelik değişiklikler yapabilirsiniz.</div>
<div style="overflow: auto;">
<div class="csharpcode">
<pre class="alt"> </pre>
<blockquote>
Bu yazının hazırlanmasında hocam Doç.Dr. M.Ali Akcayol' un Zeki Optimizasyon Teknikleri Dersi ders notları kullanılmıştır.</blockquote>
<pre> </pre>
</div>
</div>
<script src="https://gist.github.com/889024.js"> </script>
<a href="https://gist.github.com/889024">Kod</a><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com0tag:blogger.com,1999:blog-21714815.post-30833624348520552542009-10-22T21:16:00.025+03:002011-03-27T11:35:09.586+02:00Zeki Optimizasyon Teknikleri - 2 (Tavlama Benzetimi)<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5OKcYn2UEWfoOA2q7q20ifSlf1mGHe-r4b0kHfNniP330sEsy9ilItN4nEcWlK5HLsMAkkhYfqa8t3FGJkLiRmQuJTAkUX3XEsemknXjNkuZJ1tVH-0JnoRa6kMdmex-jQNuGsg/s1600-h/multipeak3D.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5OKcYn2UEWfoOA2q7q20ifSlf1mGHe-r4b0kHfNniP330sEsy9ilItN4nEcWlK5HLsMAkkhYfqa8t3FGJkLiRmQuJTAkUX3XEsemknXjNkuZJ1tVH-0JnoRa6kMdmex-jQNuGsg/s200/multipeak3D.png" /></a></div>
Optimizasyon algoritmalarımızdan ikincisi Simulated Annealing olarak ta bilinen tavlama benzetimi algoritması. İsmi Metalurji biliminden gelmektedir. Metallerin tavlanması işleminden esinlenerek ortaya çıktığı için bu ismi almıştır. Genellikle ayrık optimizasyon problemleri için kullanılır.<br />
<a name='more'></a><br />
<br />
<div style="text-align: justify;">
Yöntemden kabaca bahsetmek için <a href="http://volkansalma.blogspot.com/2009/10/zeki-optimizasyon-teknikleri-1-hill.html">Hill Climbing</a> yöntemimizi hatırlayalım. Hill-Climbing yönteminde ilk çözüm üretmiş, bir komşu üreteci fonksiyonu ile ilk çözümümüze komşu olan yeni bir çözüm kümesi üretmiştik.*Bu yeni kümeyi kendi içerisinde değerlendirip en iyi elemanını seçmiştik. Eğer bu seçtiğimiz en iyi eleman bizim eski çözümümüzden daha iyi bir çözümse yeni çözümümüz olarak bu değeri kabul etmiştik. Ayrıca Hill-Climbing yönteminin kolay uygulanmasının yanında kötü bir özelliği olarak local çözümlere takılma olarak belirtmiştik.<br />
Algoritmanın bu lokal çözümlere takılmasının nedeni bulduğumuz bir eğim doğrultusunda ilerlememiz, bu yönde çözümleri kısıtlamamızdır. Lokal çözüme doğru hızla ilerlerken çözüm kümesinin diğer kısımlarını göz ardı ederiz. Eğer şans eseri ilk çözüm üretecimiz başlangıç çözümünü global çözüme yakın bir bölgede üretirse muhtemelen global çözüme ulaşırız. Bundandır ki, Hill Climbing algoritması başlangıç noktasına çok bağımlıdır demiştik.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Hill Climbing algoritmamız üzerine bir takım modifikasyonlar yaptığımızı düşünelim. Yine ilk çözüm üretecimiz bir çözüm oluştursun, komşu çözüm üretecimiz komşu çözümler kümesini oluştursun, yine üretilen komşu çözüm kümesini kendi içerisinde değerlendirerek buradan en iyi çözümü seçelim. Klasik Hill Climbing algoritmamızda komşu çözüm kümesinden seçilen en iyi çözüm eğer eski çözümümüzden daha kötü ise bu değeri kullanmayıp elimizdeki çözümü saklıyorduk. Şimdi biraz daha insaflı davranıp komşu kümeden seçilen kötü çözüme bir şans verelim. Bu şans P olsun. Belkide verdiğimiz bu şans hatırına kötü çözüm bizi komşusu olan daha iyi çözümlere götürebilir. Hem böylece Hill-Climbing in local çözümlere takılıp kalma özelliğinden kurtulabiliriz. Eğer kötü çözümlere verdiğimiz seçilme şansı(olasılığı) P çalışma boyunca sabit kalırsa bu sefer tam güzel çözümlere doğru ilerlerken oradan oraya oradan oraya atlarız. Bu nedenle bu P olasılığının(iyi çözümü feda ederek yerine kötü çözümü kabul etme olasılığı) dinamik olması gereklidir. Bu dinamiklik iterasyonla P nin azaltılması şeklinde(ve daha pek çok şekilde) yapılablir. Böylece problem çözümünün ilk kısımlarında çözüm bölgeleri arasında sıçrayış daha fazla olurken iterasyon sayımız artıp elde ettiğimiz çözümler iyice güzelleştikçe 0 a yaklaşır. (Arama bölgemiz daralır.)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
İşte yukarıda modifiye edilmiş bir Hill-Climbing algoritması gördük. Tavlama Benzetimi algoritmasının temel prensibi tam olarak budur. Kötü çözümü seçme olasılığı sistemli bir şekilde sıcaklıkla azaltılır. Sıcaklık iterasyona bağlı(genellikle düzgün veya logaritmik azalan) bir ifadedir.</div>
<blockquote style="text-align: justify;">
Tavlama benzetimi algoritmasının temel amacı çözüm uzayında aranmadık bölge bırakmamaktır.</blockquote>
<div style="text-align: justify;">
Ayrıca Tavlama Benzetimi algoritmasında komşu çözüm kümesinin büyüklüğüde dinamik şekilde değiştirilebilir. (Probleme göre değişse de genel olarak çözümü çok fazla etkilememektedir) Bu şekilde bir kullanım benimsenirse yaygın kullanım küçük bir kümeyle başlayıp iterasyonla büyütmek şeklinde olur.</div>
<div style="text-align: justify;">
Sıcaklığın azaltılması, olasılık değerinin sıcaklıkla azaltılması, çözüm kümesinin değiştirilmesi için pek çok yöntem kullanılır.<br />
Bunlara girmeden basit bir problemi tavlama benzetimi algoritması ile çözelim. Aşağıda C++ kodu çözüm olarak string şeklinde "VOLKANSALMA@BLOGSPOT@COM" dizisini oluşturmaya çalışmaktadır.<br />
Örnek <a href="http://www.generation5.org/content/2003/gahelloworld.asp">bu sitedeki</a> genetik algoritma ile Hello! World yazısını oluşturma probleminden esinlenilmiştir. Çözümün kalitesini değerlendirmek için gerekli fonksiyon (Fitness function) linki verilen siteden direk alınmıştır. .</div>
<blockquote>
<span style="color: #80614d; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 17px; font-style: italic; line-height: 27px;">Bu yazının hazırlanmasında hocam <a href="http://w3.gazi.edu.tr/~akcayol/" style="background: inherit; background: inherit; color: #79a325; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"><span style="color: black; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;">Doç.Dr. M.Ali Akcayol</span></span></a>' un Zeki Optimizasyon Teknikleri Dersi ders notları kullanılmıştır.</span></blockquote>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: small;">*Hill-Climbing için yazmış olduğum C++ kod örneğinde bir yanlışlık yaptığımın farkına vardım. Aslında çözüm kümesi kendi içerisinde değerlendirilip en iyi eleman seçilmesi gerekirken, ben ilk bulduğum iyi çözüm ile mevcut çözümü değiştirdim. Sonrada diğer iterasyona geçtim. Bu yanlışlık daha güzel çözümleri kullanamamıza neden oldu. Böyle bir hata çözüme yakınsama hızımızı düşürür.</span><br />
<br /></div>
<br />
<script src="https://gist.github.com/889028.js">
</script>
Programın şu şekilde bir çıktısı oluyor: (Yıldızlarla gösterilen bölgelerde bulunan çözüm daha kötü olmasına rağmen olasılık değerlendirmesini geçmiş, çözüm olarak seçilmiştir. )<br />
<br>
<script src="https://gist.github.com/889031.js"></script>
<a href="https://gist.github.com/889028">Kod</a><br>
<a href="https://gist.github.com/889031">Output</a><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com1tag:blogger.com,1999:blog-21714815.post-28059712885472344742009-10-18T15:05:00.003+03:002009-10-18T15:11:15.185+03:00OpenCV 2.0 Windows .lib dosyaları?<br />
<div style="text-align: justify;">
OpenCV v2.0 kararlı sürüm yayınlandı. Pek çok güncelleme ve yeni fonksiyonlar içeriyor.(<a href="http://opencv.willowgarage.com/wiki/OpenCV%20Change%20Logs">Neler Mesela?</a>)<br />
</div>
<div style="text-align: justify;">
<br />
</div>
<div style="text-align: justify;">
OpenCV yi windows ortamında visual studio ile kullanıyorsanız bir süprizle karşılaşabilirsiniz. Kurulumla birlikte
lib dosyaları gelmiyor. Bu dosyaları elde etmek için kaynak kodun isteğinize uygun konfigürasyon parametreleri ile
derlenmesi gerekiyor.<br />
</div>
<div style="text-align: justify;">
<br />
</div>
<div style="text-align: justify;">
Derleme işlemine girmeden hazır olarak kullanmak isterseniz. Kendim için derlediğim libleri sizinle paylaşabilirim :)<br />
</div>
<br />
<b> </b><a href="http://www.4shared.com/file/141479833/92d3350/OpenCVv20_VisualStudio.html"><b>Download OpenCV 2.0 lib,dll,include files for Visual Studio. </b></a><br />
<br />
<a name='more'></a><br />
<br />
<ul>
<li> Derleme ve konfigürasyon işlemin nasıl yapıldığını öğrenmek isterseniz <a href="http://derindelimavi.blogspot.com/2009/10/sitemli-opencv-20-kurulumu-install.html">bluekid </a>abimize bakalım.</li>
<li> Bu dosyaları kullanarak nasıl opencv projesi oluşturacağımızı bilmiyorsak <a href="http://opencv.willowgarage.com/wiki/VisualC%2B%2B">buraya </a>bakalım.(Visual Studio,Code::Blocks) </li>
<li>Baktınız ama işin içinden çıkamadıysanız yorum şeklinde sorun. Cevap vermeye çalışayım.<br /><br /></li>
</ul>
<span style="font-size: small;"> *Kütüphaneler Visual Studio Prof. Editionda OpenMP desteği ile derlenmiştir fakat test edilmemiştir.</span><br /><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com3tag:blogger.com,1999:blog-21714815.post-1467853314445219282009-10-08T00:09:00.007+03:002011-03-27T11:36:19.979+02:00Zeki Optimizasyon Teknikleri - 1 (Hill Climbing)<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEO6Bzyyng0XbDkKjf72Rvdtnmp5vxYTah50WFe4HvXJdJBvgAR9sx3_A80KwQt-mFLlpwieKJOcK75DKn0tPOHuylHwNO-8_6nimS1G65F0vQQJwaxGlvnwNocLIe-QH7vccNyA/s1600-h/hills.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEO6Bzyyng0XbDkKjf72Rvdtnmp5vxYTah50WFe4HvXJdJBvgAR9sx3_A80KwQt-mFLlpwieKJOcK75DKn0tPOHuylHwNO-8_6nimS1G65F0vQQJwaxGlvnwNocLIe-QH7vccNyA/s320/hills.jpg" /></a></div>
<div style="text-align: justify;">
Optimizasyon Algoritmalarımızdan ilki Stochastic(içerisinde rastgelelik bulunan) tekniklerden birisi olan Hill Climbing algoritması. Bu yöntem pek çok uygulamada uygulama kolaylığı nedeniyle seçilebilir.</div>
<div style="text-align: justify;">
Optimizasyonu istenen problemin gösterimi, elde olan çözüme göre komşu çözüm üreteci, ilk çözüm üreteci ve çözüm değerlendirme fonksiyonu uygulama için yeterli olmaktadır.</div>
<div style="text-align: justify;">
Algoritmanın dezavantajları olarak yerel çözümlere takılabilmesini ve çözümün seçilen başlangıç noktasına çok bağlı olmasını sayabiliriz.</div>
<div style="text-align: justify;">
Hill Climbing yöntemden bahsedersek:</div>
<a name='more'></a><br />
<br />
İlk olarak başlangıç çözümü üretilir ve bu çözüm eniyi çözüm olarak kabul edilir. (Bu çözümün üretimi probleme göre rastgele olabileceği gibi problem konusunda uzman görüşü veya daha önce yapılmış çalışmalar yardımıyla da olabilir.)<br />
<br />
Daha sonra bu probleme komşu bir çözüm kümesi üretilir.(Değişik sayıda olabilir.) Çözüm kümesi elemanları değerlendirilir. Çözüm kümesinin en iyi elemanı eğer bir önceki adımdaki eniyi çözümden daha iyi ise, eniyi çözüm güncellenir.
Sonrasında en iyi çözüme göre yeni komşular üretilir ve iteratif olarak devam edilir. Belirli iterasyon sayısına ulaşıldığında, yeterli bir çözüm elde edildiğinde veya artık çözümler değişmediğinde iterasyon sonlandırılır.<br />
<br />
Hill Climbing yöntemini kullanarak derste geçen bir basit problem için C++ uygulama kodu hazırladım.
Problem: bd 30 karakterlik bir binary dizisi olmak üzere f(bd) = |20 * dizideki_bir_sayisi(bd) - 100| fonksiyonunu max yapan bd değeri? (Problemimizin çözümünün "111111111111111111111111111111" olduğu rahatça görülüyor.)<br />
<br />
<blockquote>
Bu yazının hazırlanmasında hocam <a href="http://w3.gazi.edu.tr/~akcayol/"><span style="color: black;"><span style="text-decoration: none;">Doç.Dr. M.Ali Akcayol</span></span></a>' un Zeki Optimizasyon Teknikleri Dersi ders notları kullanılmıştır.</blockquote>
<br><br>
<script src="https://gist.github.com/889070.js"> </script>
<a href="https://gist.github.com/889070">Kod</a><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com1tag:blogger.com,1999:blog-21714815.post-5220540978249086782009-08-23T20:46:00.004+03:002011-03-27T11:37:22.095+02:00OpenCV altında SVM kullanmak. (OpenCV SVM Sample Code)Bilindiği gibi OpenCV kütüphanesinin machine learning modülünde <a href="http://www.csie.ntu.edu.tw/~cjlin/libsvm/">libsvm</a> wraplenmiştir. Böylece biz OpenCV kullanıcıları harici bir kütüphane kullanmadan SVM(Support Vector Machines) i uygulamalarımızda kullanabiliriz. Aşağıda bu konuda bir örnek hazırlamaya çalıştım. Yorumlarda açıklamalar mevcuttur.<br />
<br />
<a name='more'></a><br /><br />
<script src="https://gist.github.com/889071.js"></script><br>
<a href="https://gist.github.com/889071">Kod</a><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com12tag:blogger.com,1999:blog-21714815.post-32469318334107013792009-05-01T21:48:00.015+03:002011-03-27T11:55:00.098+02:00Programınız için performans ipuçları.(x86)Genel amaçlı üretilmiş mimariler üzerinde sinyal işleme, görüntü işleme gibi ağır matematiksel işlemler gerektiren uygulamalar yapıyorsanız optimizasyon çok önemli bir hale gelir.
Bilgisayar tasarımı çalışırken bir zamanlar Türkiye Görüntü İşleme <a href="http://groups.google.com/group/goruntu-isleme?hl=tr">mail grubuna</a> gönderilen bir yazı aklıma geldi. Faydalı bir yazı olduğunu düşündüm ve blogumda paylaşmak istedim. Yazı 17 Şubat 2008 tarihinde Mustafa Sakar tarafından <a href="http://www.blogger.com/www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22007.pdf">AMD x86 Code Optimization Guide</a> tan yararlanılarak yazılmış.<br />
<a name='more'></a>Özeti biraz daha özetleyip bilgimiz olan yerlere burnumuzu sokarsak ;)
<br>
<script src="https://gist.github.com/889094.js"> </script>
<a href="https://gist.github.com/889094">Kod</a><br>
***Bazı maddeleri atladım. En önemli gördüklerimi seçmek istedim.
Görüntü işleme ile uğraşıyor performans sıkıntısı yaşıyorsanız hem de çift çekirdekli işlemciniz varsa ilk işiniz bazı işleri paralel yaptırmak olsun. Bluekid abimize link verelim.
<a href="http://derindelimavi.blogspot.com/2008/09/openmp.html">OpenMP genel.</a> <a href="http://derindelimavi.blogspot.com/2008/09/openmp-ve-opencv-ile-kenar-bulma.html">OpenMP uygulama.</a>
İmkanınız varsa güncel compiler lar kullanın. Yeni compilerla yeni donanımlar için en iyi optimizasyon seçenekleri sağlarlar. Performans bakımından aynı mfc uygulamasının MS un VC++ 9 ile derlenmesi ile VC++ 6 ile derlenmesi arasında inanılmaz farklar gözlenmiştir.
$$$* Ayrıca intel işlemci kullanıyorsanız intelin kendi compiler ı için vaatleri büyük. (Denenmemiştir.)<div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com4tag:blogger.com,1999:blog-21714815.post-27580556687520637602009-04-25T14:37:00.011+03:002009-08-28T20:29:58.745+03:00minix3 macerası - 2 (kurulum)Minix3 için gerekli sistem gereksinimleri şöyle.<br /><br /><div style="text-align: left;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYi0S251I7kCpjkkwNF24fpPIPxGfImCYML4hYSr24nJSYmO2wiw1vxqHe064VAfy5tTUJCkTSwOBxTsORZgxEMeDO3rrpFnp8kuNIWsUGTJP2Mv6SVmNZ5qY1no7rGuQXJYGELw/s1600-h/m-logo.gif"><img style="cursor: pointer; width: 52px; height: 60px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYi0S251I7kCpjkkwNF24fpPIPxGfImCYML4hYSr24nJSYmO2wiw1vxqHe064VAfy5tTUJCkTSwOBxTsORZgxEMeDO3rrpFnp8kuNIWsUGTJP2Mv6SVmNZ5qY1no7rGuQXJYGELw/s200/m-logo.gif" alt="" id="BLOGGER_PHOTO_ID_5328604917913896274" border="0" /></a><br /></div><br /><br /><ul><li>386, 486, or Pentium CPU.</li><li>16 veya 8 MB ram.</li><li>Kernel için 50 mB. CD deki diğer paketlerin hepsini kuracaksanın 600 mB harddisk alanı.</li><li>Boş bir CD iso yun yazmak için. Flashtan boot edebilen bir makinanız varsa flash diskten de kurulum yapabilirsiniz(Ben CD den yaptım.)</li></ul>VMware, VirtualPC gibi simulatörler üzerinede kurulum yapılabiliyor ama biliyorsunuz bizi bozar onlar.<br /><span class="fullpost"><br />Kurulum Adımları:<br /><br /><ul><li>Maceraya 00.40 civarında başladım. Minix3 ün resmi <a href="http://www.minix3.org/download/">download adresinden</a> IDE-3.1.2a.zip (298 MB) zip dosyasını indirdim. Bu dosya indiriledururken içerisinde kurulumla alakalı bilgiler içeren <a href="http://www.minix3.org/doc/A-312.pdf">pdf'i</a> okumakta yarar var.</li><li>Belgede kurulum sırasında ethernet kartının chip seti ile alakalı bilgiler sorulacağı yazıyor bu nedenle ethernet kartımın modelini SURECOM EP-320 X-V/VI 32 Bit olarak not ediyorum bi kenara. (Kartınızın modelini bilmiyorsanız belirtmeden de geçebiliyorsunuz. ) </li><li>Bu sırada iso muş inmiş. Sıkıştırılmış olduğundan windows ortamındaki favori open source zip açıcımız <a href="http://www.7-zip.org/">7zip</a> ile bir güzel açıyoruz.</li><li>Açılan dosyayı windows ortamının vazgeçilmez cd yazma programlarından <a href="http://www.imgburn.com/">ImgBurn </a>programı(2 mb lık efsane) ile cd ye yazıyoruz. 2$ bağışta bulunulabilir ImgBurn un sitesine girmişken ;)</li><li>Sonra cd mizi sisteme kuracağımız makinaya takıyoruz. Bios tan cd den boot etmesi için ayarı yapıyoruz. (Saat ~02.00)<br /></li></ul><ul><li>Ben P2 400, 128 MB makina üzerine üzerine kurulum yaptım. Hardiskte yedeklemem gereken hiç bir şey olmadığından kurulumun otomatik olarak yaptığı partition yapısını kullandım. Bu nedenle partition lama işlemlerini çok iyi bilemeyeceğim. Siz eğer sistemininiz yanına kurulum yapmak isterseniz <a href="http://www.minix3.org/doc/partitions.html">bu</a> dökümanı okuyun derim.</li><li>Kurulum başladığında önce bir açıklama geliyor. Sonra klavye tipini soruyor. Enter a basarak default değeri seçebiliyorsunuz. (ing klavye diziliminde kullanacağız.) Ethernet kartınızın chipseti hakkında bilgi istiyor. 0 seçerek direk geçebilirsiniz.(no networking) Veya bunlar dışında (7) diyip daha sonra configure etmek için bırakabilirsiniz. Ben burada kendi ethernet kartı bilgilerimi göremediğime şaşırmadım çünkü windows bile tanımıyor. Her kurulumda driver arıyorum. Realtek vs çok kullanılan chipsetler mevcut.<br /></li><li>Nasıl bir kurulum yapmak istediğimizi soruyor. Minimal kurulum veya tam kurulum yapabiliriz. Ben tam kurulum için "F" seçeneğini kullandım.</li><li>Partitioning işlemlerine sıra geldi ben direk tek disk üzerine tek partionda kurulum yapmak istediğimden default seçeneklerle ilerliyorum. disk number "0" enter region number "0" enter.</li><li>home klasoru için kaç mb yer ayırmak istediğimizi soruyor. 200 mb değer verdim.<br /></li><li>Kilobyte cinsinden blocksize ı soruyor. Default olan 4Kb ı seçtim. Daha kısıtlı kaynaklar için değişik kb lar seçilebiliyor.<br /></li><li>Daha sonra disk yüzeyinde bad sector taramasına başlıyor. İkinci adımda dayanamadım(epey uzun sürecekti. ilerleme grafiğine bakılırsa) ctrl+c ile işlem tamamlanmadan devam ettim.</li><li>Tüm işlemler 10 dk civarı sürdü. Ve sistemimiz hazır oldu. shutdown diyerek sistemden logout oluyoruz.(çünkü live cd üzerinden çalışıyor) ve boot komutu ile sistemi yüklediğimiz yerden boot ediyoruz. Komut "boot dXp0" şeklinde. Burada X biosta görülen sürücü numarası.(Kaçıncı disk olduğu.) p den sonrasıda partition. Bizim kurulumumuz için komut "boot d0p0" şeklinde...</li><li>shutdowndan sonra konsole tekrar düşüyoruz yukarıdaki şekilde boot komutunu verdiğimizde login: root, pass: ""(hiç bir şey yazmadan enter) şeklinde login oluyoruz. Sistemi unix komutları ile gezebiliriz. Bu esnada. Eğer paket kurmak istersek packman isminde paket yönetici var. packman komutu ile başlatabiliyoruz.</li><li>packman ile internetten veya cd den paket kurulumu yapabiliriz. cd cd sürücüde iken packman komurunu verdiğimizde cd deki paketleri tarıyor 1 seçeneği ile tüm paketleri kurabiliriz. 2 ile tüm paketler + source kodlarını kurabiliriz. 3 ile istediğimiz paketi seçebiliriz. 4 seçeneği ile ise packmanden çıkabiliyoruz.<br /></li><li>Benim ethernet kartım tanınmadığı için kurulum cdsi ile gelen paketleri kurdum. Bu aşama biraz uzun sürebiliyor. (İlk aşamada sadece binary leri kurmanızı tavsiye ederim.) 30-45 dakika civarı sürebilir. Kurulum sırasında sistem tepkisiz görünebilir hemen resetlemeyin.(nede olsa yüksek kararlı sistem kullanıyoruz ;) ) Kurulum tamamlansın. Devamı inşallah sonraki yazıya. </li></ul>*Biraz aksilikler çıktı ama sabah 06.00 civarında xwindowu gördüm. Yazının devamı gelecek. It's time to study. ;)<br /></span><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com1tag:blogger.com,1999:blog-21714815.post-75238839957762685292009-04-25T06:16:00.012+03:002009-08-28T20:32:40.616+03:00minix3 macerası - 1<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrdBb0CsyNiUotjvI0Y1KoXx-pVF7TFzg55n_PNrDpl17CDFGQ3hXZBJC40HmRKHjdIvfBGhp1poKCstmps_08Nc_eN1-KPHRfZgBtzOng_2oB_LLeIzOm3pFYNpG_iYawS5-vsw/s1600-h/logo.gif"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 118px; height: 74px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrdBb0CsyNiUotjvI0Y1KoXx-pVF7TFzg55n_PNrDpl17CDFGQ3hXZBJC40HmRKHjdIvfBGhp1poKCstmps_08Nc_eN1-KPHRfZgBtzOng_2oB_LLeIzOm3pFYNpG_iYawS5-vsw/s200/logo.gif" alt="" id="BLOGGER_PHOTO_ID_5328590222724680914" border="0" /></a><br />Uzun bir zamandır görüntü işleme uygulamaları geliştirip çalıştırabileceğim hızlı bir şekilde açılıp kapanabilen ama üzerinde arayüz uygulayabileceğim gömülü bir dağıtım bakıyordum.<br /><br><br><br /><br />Kendisinden çok şey öğrendiğimiz <a href="http://derindelimavi.blogspot.com/">Bluekid </a>abimiz sağolsun minix3 ü önerdi. Minix3 tam aradığım özelliklere sahip ayrıca üzerinde FLTK çalışabiliyor. ;)<br /><br><br><br /><br /><a href="http://www.minix3.org/">Minix3 ün sitesinde</a> sistemin hedef alanları olarak şunlar gösteriliyor.<br /><br><br><br /><ul><li>Yüksek derecede kararlılık (reliability) istenen uygulamalarda.</li><li>Tek-chip, küçük ram e sahip, düşük güç tüketen cihazlar vs.<br /></li><li>Embedded sistemler. (camera, cep telefonu vs.).</li><li>GPL lisansının çok kısıtlayıcı olduğu uygulamalar.(minix3 BSD lisansına sahiptir.)</li><li>Eğitim.(Üniversitelerde Operating System dersleri için.)</li></ul><br /><span class="fullpost"><br />Linuxun gelişimini takip edememiş birisi olarak hep linux kerneli çok karmaşık, linux configurasyonu zor gelir(ya da gözümde büyütüyorum.) Uzun zamandır değişik linux dağıtımlar kullansamda alt seviyelere hiç inemedim.<br /><br /><br><br><br />Minix3 dağıtımının bir güzel özelliği de bu. Henüz bakmadım ama ~5000 satırlık bir kernel kodu varmış. Üzerinde çalıştırılabilinecek kütüphaneler ise bir hayli fazla. <a href="http://www.minix3.org/software/">Bknz.</a><br /><br /><br><br><br /><a href="http://www.minix3.org/doc/screenies.html">Buradan</a> screenshot lara göz atabilirsiniz.<br />Bir ayda yaklaşık 12000 kişi iso dosyasını siteden indirip kurulum yapıyormuş.<a href="http://www.minix3.org/soc-2009/">Buranın</a> yalancısıyım.<br /><br /><br><br><br />Ben de evdeki emektar makinayı(Intel P2 400,256 Mb Ram) bu sistemden mahrum bırakmak istemedim. Bir gece uğraşarak xwindow u görmeyi başardım. Gerçekten sisteme çok içim ısındığını söylemeliyim. Keşke derslerden projelerden biraz daha vakit olsada doya doya kurcalayabilsem. Uzun bir süre makinada kalacak gibi görülüyor. Üzerinde önce fltk yı çalıştırıp basit uygulamalar yapmak sonrada opencv çalıştırmak gibi düşüncelerim var.<br /><br /><br><br><br />* Yalnız sistemde floating point donanımsal olarak desteklenmiyormuş. Bu iş nasıl etkiler bilemiyorum. Beraber görelim..<br /></span><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com0tag:blogger.com,1999:blog-21714815.post-22248489803084841682009-03-13T15:30:00.005+02:002009-03-13T16:08:25.407+02:00x86 --> MIPS Cross Derleme<ul><li>MIPS RISC yapısına sahip bir mikroişlemci mimarisidir.Karşılaştırmak ne kadar uygun olur bilmiyorum ama komut seti Intel x86 komut setine göre oldukça temiz ve basit. Bu tasarım avantajından dolayı üniversitelerdeki bilgisayar mimarisi derslerinde genellikle MIPS mimarisi okutulur.(<a href="http://tr.wikipedia.org/wiki/MIPS_mimarisi">vikipedi</a>). Benim yeni okulumda da öyle..</li></ul><br /><ul><li> Intel x86 işlemcili makinam üzerinde bir C kodunu derleyip MIPS assembly si elde etmem gerekiyordu. Gcc ile target mimari belirtilebildiğini biliyordum, deneyince bu kadar kolay olmadığını gördüm. Bu işlemi yapabilmek için gcc nin kaynak kodunu tekrardan özel parametrelerle derlemem gerekiyormuş. (ubuntu'da başarılı olamadım...)</li></ul><br /><ul><li> Daha sonra aramalarıma devam ederken princeton uni. den "lcc" isimli bir cross compiler buldum. (<a href="http://www.cs.princeton.edu/software/lcc/">http://www.cs.princeton.edu/software/lcc/</a>) Windows ve linux versiyonları mevcut. Ben windows versiyonunu kullandım. Gayet kullanışlı. MIPSR3000 için little endian ve big endian derleme yapabiliyor. (ALPHA, SPARC ve Intel x86 için de yapabiliyormuş.)</li></ul><br /><ul><li> Microsoft VC++ 4 embedded da Microsoftun artık ücretsiz olarak dağıttığı çok değişik mimariler için derleme yapabileceğimiz bir araç. MIPS asm side üretiyor.<br /></li></ul><br /><ul><li>*SPIM ide atlamayalım. MIPS32 assembly sini simule etmek için harika bir araç. Windows,Linux, Unix,MacOS altında çalışıyor. (<a href="http://pages.cs.wisc.edu/%7Elarus/spim.html">http://pages.cs.wisc.edu/~larus/spim.html</a>)</li></ul><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com0tag:blogger.com,1999:blog-21714815.post-5903419087012038672008-07-10T00:36:00.002+03:002008-07-10T00:49:24.295+03:00Dalgacık.<ul><li>...Foton, kütlesi 0 olan; saniyede 300 000 km hızla giden en küçük dalga/parçacık tır. Gerçek cisim tanecikleri de ışık gibi aynı temele dayanıyor. Gezegenleri, yıldızları ve galaksileri oluşturan madde, enerji dalgalarından üretilen taneciklerdir.<br /></li></ul><ul><li>Durağan görünen bedenimizin temelinde, sayısız foton süper hızla akış halindedir.<span style="font-weight: bold;"> Bedenimiz ışık hızında gerçekleşen bir dalga akışıdır.<br /></span></li></ul><ul><li>Vücudumuz kuantum dalgalarından örülen taneciklerden, onlardan örülü atomlardan, onlardan örülü moleküllerden veonlardan örülü hücrelerden yapılmıştır. Işık hızında fotondan örülen tanecik yavaşlar; onlardan örülen atom daha da yavaşlar. Böylece örgü elementleri kayalara, kıtalara, gezegenlere, galaksilere ulaşır. </li></ul><ul><li>Yerinde duruyor gibi görülen her madde, bedenin derinlerinde baş döndürücü titreşimleri, fırtınaları, uçuşmaları gizlemektedir.<br /></li></ul><ul><li><span style="font-weight: bold;">Maddenin aslı, süper hızlı enerji dalgalarıdır.</span> Madde aslında enerjidir; ama, ilginçtir ki enerjinin maddi vücudu yoktur. Sobanızda yaktığınız odunlar kül olup havaya uçar. Kütlesi enerjiye yani evinizdeki maddenin atomlarında yaşanan titreşimine/ısıya dönüşür.<br /></li></ul><ul><li>Odun yanarak yok olur ; karşılığında sadece çevresindeki maddeleri titreştirir.<br /></li><li>... <span style="font-weight: bold;">Evrenin tüm enerjisi vücutsuz bir zerreye sıkışabilir. </span><br /></li></ul><br /><br /> Dr. Muhammed Bozdağ. 2005<div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.comtag:blogger.com,1999:blog-21714815.post-57260858937261172282008-06-06T16:04:00.001+03:002008-06-06T16:05:31.892+03:00Anten Temel - 1 Empedans Uygunlaştırma<p>       Anten teorisi finalini de atlattığımıza  göre işin temel pratiğe dönük eğlenceli kısımları ile biraz ilgilenelim. Eski dergileri karıştırırken Circuit Cellar Şubat 2008 sayısında Antenna Technology 101 başlıklı bir yazı ile karşılaştım. Oldukça güzel bir makale. Bahsettiğim sayıyı ayrıca Elektronik müh. ile alakalı onlarca seçme pdf e <a href="http://ali-almukhtar.blogspot.com" target="_blank">buradan</a> ulaşabilirsiniz. <br /></p> <p>Şimdi biraz çeviri biraz yorum bazı kavramları açıklamaya çalışalım. </p> <p>   Empedans Uygunlaştırma: Empedans uygunlaştırma pek çok elektronik uygulamada olduğu gibi anten sistemlerinde de temel kavramlardan biridir. Basit bir şekilde açıklayacak olursak; Pil ile çalışan bir dirençli ısıtıcımız olsun :) Bu ısıtıcımızın direnci ısıtıcıdan maksimum güç alabilmek için acaba nasıl seçilmelidir. Çok küçük bir direnç üzerinden çok büyük bir akım geçer ancak üzerinde düşen gerilim az olacağından alabileceğimiz güç V*I dan oldukça küçük olacaktır. Büyük bir direnç seçildiğinde üzerinde güşen gerilim oldukça büyük olmasına rağmen akım küçülecek. En uygunu optimum noktada bir direnç seçmektir. Böyle bir uygulama için seçilmesi gereken direnç pilimizin iç direncine eşit bir ısıtıcı direnci olmalıdır. Devre teorisi dersi alan arkadaşların maximum güç transferi teoremi bunu ifade ediyor. </p> <p>   Yukarıda DC için açıkladığımız kurallar bazı değişikliklerle AC için de geçerlidir. AC için empedans reel ohmik direnç ve imajiner reaktans şeklinde gösterilir. Eğer devremiz kapasitif ise reaktans - değer indüktif ise + değerler alacaktır.   </p> <p>Kaynak empedansımızı Zs = Rs + j Xs şeklinde gösterebiliriz. Yukarıda DC ısıtıcı örneğinde olduğu gibi bu şekilde bir kaynaktan maksimum gücü transfer edebilmemiz için yükümüzün empedansınında sadece ohmik kısımdan oluşmaması, sanal ksmının da olması gerekir. Değeri ise kaynak empedansının kompleks eşleniği şeklindedir.  Yani reaktans kısım ters işaretli olmalıdır. Kaynak endüktif ise yük kapasitif, kapasitif ise yük endüktif olmalıdır. Burada kaynağımızın kompleks bir değerde olduğunu bu şekilde en yüksek gücü alabilmek için bağlanabilecek yükü belirledik fakat pratikte yükümüz ve kaynak sabit bir karakteristik gösterir en uygun verimi alabilmek için bağlantı noktasında eşleştirme yaparız. Endüktif bir yük için (ör motor) hatta bir karşı reaktans yani kapasite, kapasitif bir yük için ise hatta bir endüktans bağlayarak reaktif kısmı eşleştiririz. Ohmik kısım için ise genellikle empedans uygunlaştırıcı transformatör kullanılır.  Bu işlem empedans uygunlaştırma oalrak bilinir. Anten sistemlerinde empedans frekansada bağlı olarak değiştiğinden alıancak veya yayın yapılacak frekansa uygun olarak dizayn yapılması da gereklidir.  </p> <p>  İnşallah sonraki yazımızda bunları grafik üzerinde inceler ve temel anten kavramlarına devam ederiz. Belkide yazıların sonunda wireless ağlara uzaktan bağlanabileceğimiz bir el yapımı anten yaparız :) </p> <div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com0tag:blogger.com,1999:blog-21714815.post-62725030723667425012008-03-12T02:48:00.009+02:002008-06-24T00:55:26.360+03:00C++ ile curl e giriş.<span>Curl u uzun zamandır denemek istiyorum. Ancak bugün bir şeyler elde edebildim.<br /><br />Konuya yabancı olanlar için curl http requestler gönderebildiğimiz bir komut satırı programı. libCurl ise curl un platformdan bağımsız kütüphanesi. Çok daha güzel anlatımı ise şöyle :)<br /><br /><blockquote>libcurl is a free and easy-to-use client-side URL transfer library, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, Kerberos4), file transfer resume, http proxy tunneling and more!</blockquote><br />Aklıma gelen bazı uygulama alanları..<br />Console uygulamamızdan bir sayfadan veri çekebiliriz, kendi rss reader ımızı yazabiliriz. Mailimize login olup yeni ileti var mı kontrol edebiliriz.Programımızı weble ilişkilendirebiliz. Yazılım güvenliği konusunda kullanılabilir. Tabi yaramaz işlerde kullanmaya da oldukça uygun...<br /><br /><a href="http://curl.haxx.se/docs/copyright.html">Burada</a> anlatıldığına göre MIT/X türevi bir lisansa sahip. açık kaynak kodlu bir proje ticari uygulamalarda da gayet güzel kullanılabiliyor.<br /><br />Yukarıda saydığım uygulamalar belki .net veya başka RAD(delphi, cbuilder, vb) ürünlerini kullanarak çok daha kolay şekilde gerçekleştirilebilir ama bildiğim kadarıyla kütüphane c/c++ ve php dünyasında pek yaygın.<br /><br /><br /><ul><li><span style="font-weight: bold;">UYGULAMA</span></li></ul> Kütüphanenin resmi kaynağı <a href="http://curl.haxx.se/download.html">burası.</a> Pek çok işletim sistemi için değişik opsiyonlarla derlenmiş kütüphane dosyaları bulunabilir. Ben ms vc++ 6 ile denediğim derleme denemelerimde başarılı olamadım. Hem de hazır proje dosyası şeklinde olmasına rağmen!! Uygulamanın pek çok bağımlılığı var ve çoğu ağ teknolojileri ile alakalı benim yabancı olduğum konulular.<br /><br />Sizde aynı durumdaysanız <a href="http://my.guardpuppy.com/libcurl-7.15.1-msvc-win32-ssl-0.9.8a-zlib-1.2.3.zip">libcurl-7.15.1-msvc-win32-ssl-0.9.8a-zlib-1.2.3.zip</a><br />paketini önerebilirim. Paket içerisinde 32 bit win sistemler için derlenmiş ssl desteği sağlayan lib ve dll ler var.<br /><br />Bunu uygun yere(benim sistemimde c:\curl) kaydettikten sonra derleyicimizde gerekli linker ve header directory ayarlarını yapmamız gerekiyor.<br /><br />Bunlar Ms VC++ 6 için şöyle:<br /><br /><ul><li>-Project>Settings>Link>Object/Library Modules e "libcurl.lib" ifadesini ekleyin.</li></ul><ul><li>-Tools>Options>Directories>Show Directory for Include Files seçili iken C:\curl\include satırını ekleyin.</li></ul><ul><li>-Tools>Options>Directories>Show Directory for Library Files seçili iken C:\curl\ satırını ekleyin.</li></ul><br />Diğer derleyicilerde de menüler benzer şekilde olacaktır.<br /><br />Ayrıca c:/curl de libcurl_imp.lib dosyasını libcurl.lib yapıp curl klasorunde lib içine kaydetmeyi unutmayın.<br /><br /><br />Dll ler ise libcurl.dll ssleay32.dll zlib1.dll libeay32.dll bunlarıda uygulamamızın exesinin bulunduğu klasore kopyalayın.<br /><br /><br /><a href="http://curl.haxx.se/lxr/source/docs/examples/simple.c">simple.c</a> Burada örnek bir uygulama var. İlk önce bu kodu denemenizi tavsiye ederim. Yaptığınız ayarlarla bu programı derlediğinizde haxx.se adresini bir http request gönderilecek ve gelen yanıt console ekranınıza yansıyacaktır.<br /><br /><br /><a href="http://curl.haxx.se/lxr/source/docs/examples/">http://curl.haxx.se/lxr/source/docs/examples/</a><br />Adresinde daha gelişmiş uygulamalar bulunmakta.<br /><br /><br />Kütüphane oldukça kullanışlı ve kolay. Hiç deneyimim olmamasına rağmen bir saat kadar bir süre içinde okulumuz öğrenci sistemine programla login olabildim. Belki bir sonraki yazıya konu olabilir. :)</span><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com6tag:blogger.com,1999:blog-21714815.post-44062825581387268022008-02-29T02:43:00.014+02:002008-02-29T03:49:48.304+02:00Bismillah..<blockquote>...</blockquote><br /><blockquote><span style="font-style: italic;">Besmele ile başlanmayan her önemli iş noksan kalır.</span></blockquote><br /><blockquote><span style="font-style: italic;">Besmele ile yazı yazanın haceti kolaylaşır, Allahü teâlâ da razı olur.</span></blockquote><div class="blogger-post-footer">http://www.vsalma.com</div>Volkan SALMAhttp://www.blogger.com/profile/02180507354820111978noreply@blogger.com4