Algoritma Analizi
Dersi kapsamında bir yapay zeka projesi ve bu projenin karmaşıklık
analizini yapmamız istendi. Makine öğrenmesi temal alan, karakter
analizi yapan ve analiz sonucunda öğrenimin doğruluk orani
çıktısını veren bir proje geliştirmesinde karar kılındı.
Projeyi anlaşılır
kılmak adına proje de kullanılan altyapıların amaçlarını ve
projede kullanım alanlarını açıklamakla başalayalım.
Makine
Öğrenmesi(Machine Learning), matematiksel ve istatiksel yöntemler
kullanarak mevcut çıkarımlar yapan, bu çıkarımlarla bilinmyene
dair tahminlerde bulunan yöntem paradigmasıdır. Makine öğrenmesine
güncel hayatımınzdan bazı örnekler: yüz tanıma, belge
sınıflandırma, spam tespiti ‘dir.
Makine Öğrenmesi
mantığını daha iyi anlamak adına su örnek verilebilir.
Matematik dersinde bir konuya ait bir soruyu öğrenerek konu
geneline hakim olmak hedeflensin, bu sorunun çözümünün
öğrenildiğini varsayalım. Aynı konuya ait başka bir soruyu daha
önceden çözdüğümüz soru analizleri sayesinde çözülebilinir
hale gelindiğinde konunun öğrenildiği düşünülür.
Makine öğrenmesi
de aynı mantıkla çalışır bir veri kümesinin istenilen orandaki
kısmı uzerinden makine eğitilir ve daha önceden işlem görmemiş
veri küme ile makinenin talep edilen yetiye ulaşıp ulaşmadığı
kontrol edilir. İşlem gören aşamaya Train, kontrol edilen aşamaya
Test denir.
Proje adımları
incelenecek olursa ;
El yazısını
okuyabilen bir uygulama geliştirilmesi yapılacağı için bizim
öncelikle üzerinde işlem yapanileceiğimiz bir veri seti elde
etmemiz gerekir. OpenCV’nin kendi içinde 5000 el yazısı
karakteri içeren örnek image’ni kullanılarak veri seti temin
etmiş olduk. Bu veri setinde her karakteri 20x20 ‘lik digitl’ler
ifade etmektedir.
Elimizdeki veri
seti ile makine öğrenimini gerçekleştirebilmek için train_data
and test_data’ya ihtiyaç vardır.
Veri seti üzerindeki
birbirinden farklı bu digit’leri ayırarak öğrenmeyi
kolaylaştırmak amaçlanmıştır.
Bu ayrılan her bir
hücreyi bir Numpy Array ‘a atacağız. Dizinin ilk 250 örneği
train_data’ya ve geriye kalan 250 örneği test_data’ya atılır.
Hem train_data hem de text_data için label’lar oluşturulur.
KNN train_data’nın
öğrenilmesinin gerçekleştirimi için uygulamanın içinde
tanımlanır. Elimizdeki train_data da knn algoritması bir birine
yakın noktaları sınıflandırarak belirli bir veri kümesi elde
ediliyor. Bu veri kümesini test_data’yı analiz ederken
kullanılıyor. Elde edilen sonuçlara göre başarı oranı çıktı
olarak veriliyor.
Algoritmanın
karmaşıklığına bakacak olursak;
Tam kapsamlı arama
ile hiçbir veri yapısı ve algoritma kullanılmadan Öklid
uzaklığına göre test noktasına en yakın k tane örnek sıralı
bir şekilde aranır. Bu arama yönteminin zaman karmaşıklığı
veri setinin boyut sayısı(D), N eleman sayısı olmak üzere
algoritmanın Big-O notasyonuna göre istenilen bir elemanı bulmanın
zaman karmaşıklığı O(k*D*N)’dir.
Projenin linki: https://www.youtube.com/watch?v=TH5kjigvMto
Projenin linki: https://www.youtube.com/watch?v=TH5kjigvMto








