Etiket arşivi: data

Makine Öğrenmesinin Matematiği – 1 – Giriş

Motivasyon

Makine öğrenmesi, veriden otomatik olarak değerli bilgiler çıkaran algoritmalar tasarlamayla ilgilenir. Burada dikkat edilmesi gereken en önemli kelime “otomatik” tir; yani makine öğrenmesi, birçok farklı veri kümesine uygulanabilen ve anlamlı sonuçlar üreten genel amaçlı yöntemlerle ilgilenir. Makine öğrenmesinin temelinde yer alan üç ana kavram vardır: veri, model ve öğrenme.

Makine öğrenmesi doğası gereği veri odaklıdır; bu nedenle veri, makine öğrenmesinin merkezinde yer alır. Makine öğrenmesinin amacı, belirli bir alana özgü uzmanlığa fazla ihtiyaç duymadan, veriden değerli örüntüleri (pattern) çıkarmak için genel amaçlı yöntemler tasarlamaktır.

Örneğin, geniş bir doküman koleksiyonuna (örneğin, birçok kütüphanedeki kitaplar) sahip olduğumuzu düşünelim. Makine öğrenmesi yöntemleri, bu dokümanlarda yaygın olarak paylaşılan konuları otomatik olarak belirlemek için kullanılabilir.

Bu hedefe ulaşmak için, genellikle veriyi üreten sürece benzer şekilde modellenen yapılar tasarlarız. Örneğin, bir regresyon probleminde model, girdi değerlerini gerçek sayılarla ifade edilen çıktılara eşleyen bir fonksiyon tanımlar.

Mitchell’in (1997) ifadesini yorumlayarak söyleyecek olursak:
Eğer bir model, veriyi dikkate aldıktan sonra belirli bir görevdeki performansını artırıyorsa, o modelin veriden öğrendiği söylenebilir.

Burada Tom Mitchell’ın ifadesini kitabı okumayanlar için iyice detaylandıralım:

Tom Mitchell, makine öğrenmesi alanında önemli bir araştırmacıdır ve 1997’de yazdığı “Machine Learning” adlı kitabında makine öğrenmesini şu şekilde tanımlamıştır:

“Bir bilgisayar programı, belirli bir görev T üzerinde, performans ölçütü P’ye göre, deneyim E’den öğrenerek performansını artırıyorsa, o zaman programın T’yi öğrenerek geliştirdiği söylenir.”

Bu tanımın açılımını şöyle düşünebiliriz:

  • T (Görev – Task): Modelin gerçekleştirmesi gereken iş. Örneğin, bir e-postanın spam olup olmadığını belirleme, görüntüdeki nesneleri tanıma veya bir borsa tahmini yapma.
  • P (Performans Ölçütü – Performance Measure): Modelin başarısını ölçen kriter. Örneğin, bir sınıflandırma modelinde doğruluk oranı, bir regresyon modelinde hata metriği gibi.
  • E (Deneyim – Experience): Modelin eğitim verisinden elde ettiği bilgi. Yani geçmiş verilere dayalı öğrenme süreci.

Bu tanıma göre bir model, veriden öğrenmiş sayılabilmesi için belirli bir görevde (T), performans ölçütüne (P) göre, deneyim kazandıkça (E) daha iyi hale gelmelidir.

Örneğin:

  • Bir e-posta sınıflandırma modeli, spam ve normal e-postaları ayırmak için tasarlanmış olsun (T).
  • Modelin başarısı, doğru tahmin oranı ile ölçülüyor olsun (P).
  • Eğer model, daha fazla e-posta örneği ile eğitildikçe spam tespitinde daha başarılı hale geliyorsa (E), o zaman model gerçekten “öğreniyor” demektir.

Buradaki temel amaç, henüz karşılaşmadığımız veriler üzerinde de iyi genelleme yapabilen modeller bulmaktır, çünkü gelecekte ilgileneceğimiz veriler bunlar olabilir. Öğrenme, modelin parametrelerini optimize ederek verideki desenleri ve yapıları otomatik olarak bulmanın bir yolu olarak düşünülebilir.

Makine öğrenmesi birçok başarı hikayesine sahip olsa da ve zengin, esnek makine öğrenmesi sistemlerini tasarlayıp eğitmek için yazılımlar kolayca erişilebilir durumda olsa da, makine öğrenmesinin matematiksel temellerinin anlaşılmasının son derece önemli olduğuna inanıyoruz.

Bu temel prensipleri kavramak, şu konularda bize büyük avantaj sağlar:

  • Yeni makine öğrenmesi çözümleri geliştirmek,
  • Mevcut yaklaşımları anlamak ve hata ayıklamak,
  • Kullandığımız yöntemlerin temel varsayımlarını ve sınırlamalarını öğrenmek.

Özetle, makine öğrenmesini sadece uygulamalı bir araç olarak görmek yerine, altında yatan matematiksel prensipleri öğrenmek, daha sağlam ve bilinçli çözümler üretmemizi sağlar.

Bu yazıda neden matematiksel altyapıya odaklıyoruz kısmını anlatmaya çalıştım, bir sonraki yazıda görüşmek üzere.

İyi kodlamalar.

Loading

Facebooktwitterredditpinterestlinkedinmail

Yapay Sinir Ağlarında Veri Gösterimi – TENSOR

TENSOR Nedir?

Temel olarak tensor, makina öğrenmesi sistemlerinde verinin tutulması için kullanılan bir yapıdır diyebiliriz. Örneğin matrisleri 2D tensor olarak adlandırabiliriz. Tensor, matrislerin rastgele sayıda boyuta genişletilmesidir. Tensor bağlamında boyut(dimension) yerine daha çok eksen(axis) terimi kullanılır.

Scalars (0D Tensor)

Tek bir sayı içeren tensorlere scalar denir. (0D tensor). Örneğin Numpy’de float32 ve float64 sayıları bir scalar tensor’dür. Numpy’de tensor’ün eksenlerini ndim attribute’ü ile gösterebiliriz. Scalar bir tensor’de 0 boyut vardır. (ndim==0). Tensor’un eksen sayısına aynı zamanda onun rank’I(derecesi) denir. Örnek bir Numpy scalar’ı aşağıdaki gibidir.

>>> import numpy as np
>>> x = np.array(84)
>>> x
array(84)
>>> x.ndim
0

Vectorler (1D Tensorler)

Sayılar dizisine vektör veya 1D tensor deriz. 1D tensor’de sadece bir eksen bulunur. Örnek bir Numpy vektörü aşağıdaki gibidir:

>>> import numpy as np
>>> x = np.array([12, 24, 5, 6, 26])
>>> x
array([12, 24, 5, 6, 26])
>>> x.ndim
1

Burada vektörümüzün 5 girdisi bulunur. Yani bu vektöre 5-boyutlu-vektör diyebiliriz. Burada en önemli şey 5D vektör ile 5D tensor’ü karıştırmamaktır. 5D vektörde bir eksen ve 5 boyut bulunurken 5D tensorde 5 eksen ve bu eksenlere ait bir çok boyut bulunabilir.

Matrisler (2D Tensorler)

Vektör dizilerini matris veya 2D tensor olarak adlandırabiliriz. Matrisin iki ekseni satırlar(rows) ve sütunlar(columns) diye adlandırılır. Örnek bir Numpy matrisi:

>>> import numpy as np
>>> x = np.array([[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]])
>>> x.ndim
2

Burada ilk eksene satırlar ikinci eksene sütunlar denir. Bizim örneğimiz için x’in ilk satırı [5, 78, 2, 34, 0], ilk sütunu ise [5, 6, 7] dir.

3D ve daha fazla boyutlu Tensorler

Örneğin matrislerden bir dizi elde etmek istersek 3D tensor elde ederiz. Aynı şekilde 3D tensorlerden bir dizi oluşturursakda 4D tensor elde ederiz. Derin öğrenmede genede 0D ve 4D tensorleri kullanacağız. Bazı durumlarda örneğin video verisi işlerken 5D tensorlerden faydalanabiliriz.

>>> x = np.array([[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]],
[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]],
[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]]])
>>> x.ndim
3

Tensorlerin Anahtar Özellikleri

Bir tensorde temel olarak üç özellikten bahsedebiliriz. Bunlar:
1. Eksen Sayısı(Rank): Tensorün eksenini belirtir.

2. Form (Shape):
Tensor’ün formu her eksen kaç boyut olduğunu söyler. Örneğin yukarıdaki örnek matrisimizde matrisin formu (3,5)
3D tensorde ise (3,3,5)’tir.

3. Veri Tipi (Data Type)
Tensor için bulunan verinin tipini belirtir. bir tensorun içinde bulunan verinin tipi float32, uint8, float64 olabilir. Çok nadir durumlarda veri tipi char da olabilir. Ancak string tensorler Numpy ve çoğu diğer tensor kütüphanelerinde desteklenmez. Çünkü tensorler allocate edildikleri anda bellekte yaşarlar, sürekli hafıza segmentlerinde tutulurlar. Stringler ise değişken boyutlu olacağı için bu şekilde implement etmek zor olacaktır.


Loading

Facebooktwitterredditpinterestlinkedinmail

Soyut Veri Tipleri (ADT) ve Veri Yapıları

ADT(Abstract Data Type) değerler kümesi ve o değerler kümesi üzerinde gerçekleştirilen işlemleri içerir. Java gibi nesne yönelimli dillerde ADT->Interfaces(Arayüzler)’e denk düşer. Arayüzü implement eden herhangi bir sınıf :

a. Bu sınıfa ait instance oluşturabilir; (burada “instance” değere(value) karşılık düşüyor). Örneğin List ADT’si kullanılarak oluşturulan:

-List listem;

gibi. Burada listem ADT’den üretilmiş instance’tır yani değerimiz.

b. Sınıfa ait public metodları çağırabilir. (Burada “public metod” “işlemlere(operation)” karşılık düşer.) Örneğin yukarıda türettiğimiz listem adlı listemize eleman eklemek için kullanacağımız:

-listem.add(“item”);

adtvsds

Loading

Facebooktwitterredditpinterestlinkedinmail