7 Haziran 2017 Çarşamba

KNN Kullanılarak OpenCV İle Karakter Tanıma



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

Hiç yorum yok:

Yorum Gönder