Toplamlar, faktöriyeller, matrisler ve daha fazlası, en sevdiğimiz programlama dilleriyle onlara baktığımızda…
Makine Öğrenimi ve Veri Bilimi alanında bir kariyer ya da araştırma yapmak isteyen ve her şeyin arkasındaki matematiğin gizemini merak eden herkes açısından, matematiksel sembollerin kodlarla anlaşılması temel düzeyde de olsa gerçekten çok yararlı olacaktır, zira elbette bir çok programlama dilinin kendine özgü kütüphanelerinde bu kodlar hazır mevcut, fakat bu yine de veri bilimi açısından matematiksel pencereden bakabilmemizi ve daha iyi okuyabilmemizi sağlayacaktır.
Burada bazı python kodlama örnekleri vereceğim, elbette bir çok fonksiyon ve sembolün kodları python kütüphanelerinde mevcut. Fakat python kütüphanelerinin ötesine geçmenin zamanının geldiği günler de gelecek elbet.
Bu, genellikle sizi her şeyin nasıl çalıştığını ve formülize olduğunu açıklayan kağıt üzeri çalıştığınız zamanlardaki notlarınıza yönlendirecek. Matematiğin köklerini ne kadar derinlemesine anlarsanız, iç güdüsel olarak yeni bir yöntem geliştirebilmeye o kadar yaklaşabilirsiniz.
Şöyle bir denklemle karşılaşana kadar kağıt üzerinde her şey yolundadır:
Yıllarca matematik üzerine veya Makine Öğrenimi alanında matematik düzeyinde de olsa çalışmış herkes için, böyle bir denklem çok kolay bir şekilde anlaşılabilir ve kod yazarak da ayrıştırılabilir. Yine de bu birçoğunuz için bir hiyeroglif yazısı gibi görünebilir. Zira bilmediğiniz şeye yabancısınızdır. Gerçek şu ki, matematiğin öncüleri sezgisel yöntemleri tanımlamak ve belirlemek için en ilginç görünümlü sembolleri seçmişler. Sonuç: gerçekte olduğundan çok daha karmaşık görünen değişkenler ve denklemler…
Kodlamanın program yazmaktan da ötesi için kullanılabileceğini öğrendim, ama aynı zamanda karmaşıklığı açıklayabilmesi açısından da küresel olarak kabul edilmiş bir dil bilmenin de gerekliliğini.
Veri Bilimi alanında, her şeyin arkasındaki matematiği öğrenirken, evrensel bir matematik anlayışı elde etmenin en iyi yolunun; denklemleri tanımlamak için kod parçacıkları yazmak olduğunu her zaman iddia ederim.
Kod yazarak matematiksel sembolleri anlamak, tipik bir makalede neredeyse metin okur gibi onları okuyabilecek bir seviyeye gelmenizi sağlar.
Bu makalede, kodlarla tanımlandığında matematiğin ne kadar da basit bir şey olabileceğine dair bazı python kod örneklerini sizlerle paylaşmak istiyorum!
Operatör Sembolleri
Toplama: +
Çıkarma: –
Bölme: /
Çarpma: *
Üs Alma: **
Mod Alma: %
Eşittir: ==
Atama: =
Eşit Değildir: !=
Büyüktür: >
Küçüktür: <
Büyük eşit: >=
Küçük eşit: <=
1| Toplam ve Çarpım
Toplam sembolü, tekrarlamalı (iteratif) matematikte kullanılan en yararlı ve en yaygın sembollerinden biridir. Karmaşık tasarımına karşın, uygulaması oldukça basit, ancak inanılmaz derecede de kullanışlıdır.
x = [1, 2, 3, 4, 5, 6]
result = 0
for i in range(6):
result += x[i]
Output of print(result) -> 21
Yukarıda görüldüğü gibi, bu sembolün temsil ettiği tek şey, alttaki sayıdan başlayarak, üstteki sayının sınırladığı aralığıkta bir “for döngüsü” oluşturmaktır. Alttaki sayı, indeks değişkenidir ve döngü başına meydana gelen her bir sonuç, genel sonuca ilave edilir.
Tipik olarak çarpım operatörü olarak adlandırılan bu sembol de toplamdaki ile aynı şekilde çalışır, ancak her bir sonucu toplayarak eklemek yerine, çarparak ilave edilir.
x = [1, 2, 3, 4, 5, 1]
result = 1
for i in range(6):
result *= x[i]
Output of print(result) -> 120
2| Faktöriyel
Sembolü “!” (ünlem) olan faktöriyel kavramı neredeyse tüm hesap makinelerinde karşımıza çıkar.
Birçoğumuz için, bu biraz daha bilindik olabilir, ancak mekaniği anlamak için bazı kodlar ile birlikte bu kavramı yazmak gerekir.
Mesela, 5! (5 faktöriyel) kod yazarak şu şekilde ifade edilebilir:
result = 1
for i in range(1,6):
result *= i
Output of print(result) -> 120
3| Koşullu Köşeli Parantezler
Koşullu parantezler, bir denklemin akışını bir dizi koşula bağlı olarak yönlendirmek için kullanılır. Kod yazanlar açısından, bu sadece “ortak if (0if)” deyimi ile ifade edilir.
Yukarıdaki koşulları kodlayarak şu şekilde ifade edilebiliriz:
i = 3
y = [-2, 3, 4, 1]
result = 0if i in y:
result = sum(y)
elif i > 0:
result = 1
else:
result = 0print(result) -> 6
Yukarıda görüldüğü gibi, köşeli parantezlerdeki her satırın sağındaki gösterim, her koşulda ne olması gerektiğini belirler. Daha fazla bilgi eklemek için her koşula ekstra “içerir” sembolünü de ekledim. Yukarıda görüldüğü gibi, i değerinin y dizisinde olup olmadığını kontrol ettim ve böyle olduğunu da kabul ederek dizinin toplamını döndürdüm. Eğer i değeri dizide olmasaydı, değere göre 0 ya da 1 değerlerini döndürmüş olurdum.
4| Noktasal ve Kartezyen Matris Çarpımı
Son olarak, herhangi bir Veri Bilimcisi için tipik olarak en sevdikleri dil kütüphanesinde; matris çarpımı ile yapılan işlemleri hızlı bir şekilde açıklamak istiyorum. Bunun anlaşılması en kolay biçimi, noktasal yapılan işlemdir.
Bu basitçe şöyledir:
İlk olarak, her matrisin aynı şekle sahip olması gerektiğine dikkat edin! (örneğin # satırlar = & # Sütunlar =)
bunu şu şekilde kodlayabiliriz:
y = [[2,1],[4,3]]
z = [[1,2],[3,4]]
x = [[0,0],[0,0]]for i in range(len(y)):
for j in range(len(y[0])):
x[i][j] = y[i][j] * z[i][j]print(x) -> [[2, 2], [12, 12]]
Son olarak, Makine Öğreniminde en yaygın kullanılan tipik bir matris çarpım sürecine bakalım.
Karmaşık terimlerle, bu işlem her bir ikincil sütunun bulunduğu her bir birincil satırın noktasal sonucunu bulur.
[#satırlar, #sütunlar] → matrislerin i x j çarpımı için #sütunlar (i) == #satırlar (j) → [#satırlar (i), #sütunlar(j)] matrisi ile son bir çarpım gerçekleştirilir.
Bu kafa karıştırıcı görünebilir ve en iyi önerim, bu gereksinimlerin bazı harika görselleştirmeleri için google’dan resimlerine göz atmak olacaktır.
Bu denklemin kodu aşağıdaki gibidir (“NumPy dot” yöntemini kullanarak):
y = [[1,2],[3,4]]
z = [[2], [1]]
# x has shape [2, 1]
x = [[0], [0]]for i in range(len(y))
for j in range(len(z):
x[i][j] = np.dot(y[i], z[:, j])
print(x) -> [[4],
[10]]
Burada sadece bir kaç örnek üzerinde durduk. Elbette burada verilen basit kodların anlaşılması, her hangi bir programcının başlangıçta karmaşık görünen matematik dünyasını çok daha kolay bir şekilde çözebilmesine imkan verecektir. Tabii ki, burada gösterilen yöntemlerin tamamı verimlilik açısından birleştirilebilir ve genellikle kolaylıkla erişilebilen bir kütüphanede de mevcuttur.
Bu tarz matematiksel sembollerin kod yazarak anlaşılmasındaki asıl amaç, gerçek işlemlerle karşılaştığımızda ne kadar anlamlı olduklarını görebilmektir.
Comments