Last chance! 50% off DataCamp Premium
Sale ends in
Veri bilimi, öngörülerde bulunmak için matematik ve ileri düzey istatistikleri kullanan disiplinler arası bir alandır. Tüm veri bilimi algoritmaları doğrudan ya da dolaylı olarak matematiksel kavramlardan yararlanır. Matematiği sağlam bir şekilde kavramak, öneri sistemi gibi yenilikçi veri bilimi çözümleri geliştirmenize yardımcı olur. Matematiğiniz iyiyse, veri bilimine geçişiniz kolaylaşır. Bir veri bilimci olarak, problemleri çözmek için matematiğin temel kavramlarını kullanmanız gerekir.
Matematiğin yanı sıra alan bilgisi, programlama becerileri, iş becerileri, analitik beceriler ve meraklı bir zihniyete de ihtiyacınız vardır. Bir veri bilimci için matematikten kaçış yoktur. Veri bilimci olmak için matematik ve istatistiğin temellerini özümsemeli ve kendinize öğretmelisiniz.

# Import numpy module
import numpy as np
# creating a vector
v = np.array([1, 2, 3, 4, 5])
print(v)
[1 2 3 4 5]
# Vector Operations
# Import numpy module
import numpy as np
# Create two vector
a = np.array([1, 2, 3, 4, 5])
b = np.array([1, 2, 3, 4, 5])
# adding two vectors
add = a + b
print("Addition:",add)
# Vector Subtraction
sub = a - b
print("Subtraction:",sub)
# Vector Multiplication
mul = a * b
print("Multiplication:",mul)
# Vector Division
div = a / b
print("division",div)
Addition: [ 2 4 6 8 10]
Subtraction: [0 0 0 0 0]
Multiplication: [ 1 4 9 16 25]
division [1. 1. 1. 1. 1.]
# Import numpy module
import numpy as np
# create 2*2 matrix
a1=np.array([[1, 2], [3, 4]])
a2=np.array([[1, 2], [3, 4]])
# Dot Product
dot_product = np.dot(a1,a2)
print("Dot Product: \n",dot_product)
# Cross Product
cross_product = np.cross(a1,a2)
print("Cross Product: \n", cross_product)
Dot Product:
[[ 7 10]
[15 22]]
Cross Product:
[0 0]
İki vektörün noktasal çarpımı, bir vektörün diğerine izdüşümünü temsil eder; iki vektörün vektörel çarpımı ise her iki vektörün de yatabileceği düzlemi belirlemeyi sağlar.

Determinant, bir matrisin uzunluk (1-boyut), alan (2-boyut), hacim (3-boyut) gibi nicelikler üzerindeki ölçekleme etkisini ifade eden skaler bir değerdir. Determinant 2 ise hacim (3-boyut için) iki katına çıkar; determinant 1 ise hacmi etkilemez. Determinant 0 ise tersi (inversi) yoktur; çünkü sıfırla çarpılan her şey sıfırdır.

Özellikler:
Matrislerin çarpımının determinantı, determinantların çarpımına eşittir: det (M1M2)=det (M1) det (M2).
Bir matrisin determinantı, özdeğerlerin çarpımına eşdeğerdir.
Bir matrisi bir sabitle çarparsanız determinant det(cM)=cN det (M) olarak değişir. Burada N, matrisin boyutudur.
Eğer matrisiniz esneyebilen bir oyuncağı temsil ediyorsa, bu matrisin determinantı oyuncağı ne kadar esnettiğinizi gösterir.
# Import numpy module
import numpy as np
# Create 2*2 matrix
arr=np.array([[1,2],[3,4]])
# Compute Determinant of a matrix
arr_det=np.linalg.det(arr)
# Print the Computed Determinant
print("Determinant:",arr_det)
Determinant: -2.0000000000000004
Kare bir A matrisinin bir özvektörü, A ile çarpıldığında yalnızca ölçeği değişen sıfırdan farklı bir vektördür.

Özvektöre karakteristik vektör de denir. Doğrusal bir dönüşüm uygulandığında yalnızca skaler bir faktörle değişen, sıfırdan farklı bir vektördür.
Özvektörler, doğrusal dönüşümün dönme eksenleridir. Bu eksenlerin yönü sabittir ve özdeğer, matrisin yukarı ya da aşağı ölçeklendiği çarpanıdır. Özdeğerlere karakteristik değerler veya karakteristik kökler de denir. Başka bir deyişle, özvektörler doğrusal dönüşümün davranışını sınırlayan sabit doğru veya düzlem yönlerini, özdeğerler ise bu dönüşümün bozulma (distorsiyon) katsayılarını ifade eder.
Determinant, doğrusal dönüşümde yukarı veya aşağı ölçeklenen şekillerin alanını söyler. Bu yüzden özdeğerlerin çarpımı determinantla eşittir.
# Import numpy module
import numpy as np
# Create 2*2 matrix
arr=np.array([[1,2],[3,4]])
# Find eigenvalues and eigenvectors
eigenvalues, eigenvectors = np.linalg.eig(arr)
# print the eigenvalues and eigenvectors
print("Eigen Values: \n",eigenvalues)
print("Eigen Vectors:\n", eigenvectors)
Eigen Values:
[-0.37228132 5.37228132]
Eigen Vectors:
[[-0.82456484 -0.41597356]
[ 0.56576746 -0.90937671]]
Bazen bir vektörün büyüklüğünü ölçmek istersiniz. Norm fonksiyonu, bir vektörün büyüklüğünü ölçmenize yardımcı olur. Sıfır vektörü hariç bir vektöre kesinlikle pozitif bir uzunluk atar. L^p normunu içerir. Vektörleri sıfırdan büyük değerlere eşler. Bir vektör ve bir matris için Öklid uzaklığına denktir. En büyük tekil değere eşittir.

# import numpy module
import numpy as np
# Create 3*3 Matrix
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
# Compute norm
a_norm = np.linalg.norm(a)
# print the norm of function
print(a_norm)
16.881943016134134
Matris faktorizasyonu, matris ayrışımı olarak da bilinir. Bir matrisi bileşenlerine ayırmak için kullanılır. Matris faktorizasyonu, 10 sayısının 2 x 5 olarak çarpanlara ayrılmasına benzer. Doğrusal denklemleri çözmek için kullanılır.
Aşağıdaki matris faktorizasyonu teknikleri mevcuttur:
Önceki bölümde, bir matrisi özvektörlere ve özdeğerlere ayıran öz-ayrışımı gördük. Tekil değer ayrışımı, bir matrisi tekil vektörlere ve tekil değerlere ayıran bir matris faktorizasyonu yöntemidir. Sinyal işleme, psikoloji, sosyoloji, iklim ve atmosfer bilimi, istatistik ve astronomi gibi alanlarda çeşitli faydalı uygulamalar sunar.

# Import numpy module
import numpy as np
# Create 3*3 matrix
a = np.array([[1, 3, 4], [5, 6, 9], [1, 2, 3], [7, 6, 8]])
# Decomposition of matrix using SVD
U, s, Vh = np.linalg.svd(a, full_matrices=False)
U,s,Vh
(array([[-0.27067357, -0.61678044, 0.69789573],
[-0.65939972, -0.2937857 , -0.62152182],
[-0.20244298, -0.3480035 , -0.06765408],
[-0.67152413, 0.64200111, 0.34939247]]),
array([18.0376394 , 2.34360292, 0.38870323]),
array([[-0.46961711, -0.51018039, -0.72053851],
[ 0.87911451, -0.19502274, -0.43488368],
[-0.08134773, 0.83766467, -0.54009299]]))
# Generate the initial matrix
new_a = np.dot(U, np.dot(np.diag(s), Vh))
# Print original matrix
print(new_a)
[[1. 3. 4.]
[5. 6. 9.]
[1. 2. 3.]
[7. 6. 8.]]
Bir matrisin yarıtersi, ters matrisin genelleştirilmiş hâlidir. En küçük kareler çözümlerini hesaplamada kullanılır. Moore-Penrose tersi, matris yarıtersinin en yaygın biçimidir.

# Import numpy module
import numpy as np
# Create 3*3 matrix
a = np.array([[1, 3, 4], [5, 6, 9], [1, 2, 3], [7, 6, 8]])
# Compute the (Moore-Penrose) pseudo-inverse of a matrix.
inv=np.linalg.pinv(a)
# Print pseudo-inverse of a matrix.
print(inv)
[[-0.37037037 0.03703704 -0.11111111 0.18518519]
[ 1.56296296 -1.2962963 -0.11111111 0.71851852]
[-0.84444444 0.94444444 0.16666667 -0.57777778]]
Hadamard çarpımı veya Schur çarpımı, aynı boyutlardaki iki orijinal matrisin eleman düzeyinde çarpımıdır. Eleman düzeyinde çarpım olarak da bilinir. Matris çarpımından daha basittir. Hadamard çarpımı, kayıplı JPEG sıkıştırma algoritmalarında kullanılır. Hadamard çarpımı değişmeli, birleşmeli ve dağılma özelliklerine sahiptir. Tersi kolayca elde edilir ve üs matrislerin hesaplanmasını basitleştirir.

Hadamard çarpımı; uydu iletimlerinde kod düzeltme, bilgi kuramı, kriptografi, örüntü tanıma, sinir ağı, en büyük olabilirlik kestirimi, JPEG kayıplı sıkıştırma, çok değişkenli istatistiksel analiz ve doğrusal modelleme gibi çeşitli alanlarda kullanılır.
# Import numpy module
import numpy as np
# Create 2*2 matrix a1 and a2
a1=np.array([[1, 2], [3, 4]])
a2=np.array([[1, 2], [3, 4]])
# Element wise multiplication
hadamard_product = np.multiply(a1,a2)
# Print hadamard distance
print("Hadamard Product: \n", hadamard_product)
Hadamard Product:
[[ 1 4]
[ 9 16]]
"Rastgele bir değişkenin entropisi, o rastgele değişkenin öngörülemezliğini betimlemeye çalışan bir fonksiyondur." (Entropy and Mutual Information) Ağaç oluşturmanın her adımında otomatik karar ağacı kurulumunda kullanılır; özellik seçimi entropi ölçütü kullanılarak yapılır. Model seçimi, çelişen modeller arasından entropisi en yüksek olanın en iyi olduğunu söyleyen maksimum entropi ilkesine dayanır.
"Eğer X adlı bir rastgele değişken χ={x1, x2,..., xn} kümesindeki değerleri alıyorsa ve P(X) olasılık dağılımıyla tanımlanıyorsa, rastgele değişkenin entropisini şu şekilde yazarız," (Entropy and Mutual Information)

"Yukarıdaki eşitlikte log tabanı 2 alınırsa, entropi bit cinsinden ifade edilir. Log doğal log alınırsa, entropi nat cinsinden ifade edilir. Daha yaygın olarak, entropi bit cinsinden ifade edilir." (Entropy and Mutual Information)
# Import scipy and numpy module
import scipy.stats
import numpy as np
# Create an array
a=np.array([1,1,2,3,1,3,4,2,5,6,3,2,4,3])
# Compute probability distribution
a_pdf=scipy.stats.norm.pdf(a)
# Calculate the entropy of a distribution for given probability values.
entropy = scipy.stats.entropy(a_pdf) # get entropy from probability values
print("Entropy: ",entropy)
Entropy: 1.6688066853941022
Kullback–Leibler ayrışımı, iki olasılık dağılımının göreli entropisidir. Bir dağılımın başka bir başvuru dağılımından uzaklığını (benzerlik veya benzememe) ölçer. Kullback–Leibler ayrışımının 0 değeri, iki dağılımın özdeş olduğunu gösterir. Şu şekilde ifade edilebilir:

Bir uzaklık ölçüsü gibi görünse de öyle değildir. Bunun nedeni doğası gereği asimetrik olmasıdır; yani metrik değişmeli değildir. Genel olarak D(p, q) ≠ D(q, p) diyebilirsiniz. KL ayrışımı, denetimsiz makine öğrenmesi tekniği “Varyasyonel Otokodlayıcılar”da sıklıkla kullanılır.
# Import scipy.stats and numpy module
import scipy.stats
import numpy as np
# Create numpy arrays
a=np.array([1,1,2,3,1,3,4,2,5,6,3,2,4,3])
b=np.array([1,1,3,4,2,4,5,2,5,6,3,2,4,3])
# Compute probability distribution
a_pdf=scipy.stats.norm.pdf(a)
b_pdf=scipy.stats.norm.pdf(b)
# compute relative entropy or KL Divergence
kl_div=scipy.stats.entropy(a_pdf,b_pdf)
print("KL Divergence: ",kl_div)
KL Divergence: 0.26732496641464365
Gradyan inişi, doğrusal regresyon, lojistik regresyon ve sinir ağlarında katsayılar ve sabiti (bias) optimize etmek için kullanılan en bilinen algoritmalardan biridir. Verilen herhangi bir fonksiyonun minimumunu bulan yinelemeli bir süreçtir.


Gradyan inişi algoritmasının üç türü vardır: tam yığın (full batch), stokastik ve mini-yığın gradyan inişi. Tam yığın gradyan inişi, gradyanı hesaplamak için tüm veri kümesini kullanırken stokastik gradyan inişi, gradyanı hesaplamak için veri kümesinden bir örnek kullanır. Mini-yığın gradyan inişi, stokastik ve yığın gradyan inişinin bir birleşimidir. Eğitim kümesi, yığın (batch) adı verilen küçük gruplara bölünür. Bu küçük yığınlar kaybı tek tek hesaplar ve nihai kayıp sonucunun ortalamasını alır.
Tebrikler, bu eğitimin sonuna geldiniz!
Skaler, vektör, matris, tensör, determinant, özdeğerler, özvektörler, NORM fonksiyonu, tekil değer ayrışımı (SVD), Moore-Penrose yarıtersi, Hadamard çarpımı, Entropi, Kullback-Leibler Ayrışımı ve Gradyan İnişi gibi derin öğrenmeye yönelik temel matematiksel kavramları öğrendiniz.
Yol boyunca, bu kavramları Python’da NumPy ve SciPy kullanarak da uyguladınız.
Daha fazla Python öğrenmek isterseniz, aşağıdaki DataCamp kurslarını alın:
Derin Öğrenme hakkında daha fazlasını öğrenin
Kurs
Kurs
Kurs

blog
Abid Ali Awan
14 dk.
blog
Dario Radečić
15 dk.
Eğitim
Kurtis Pykes
8 dk.
Eğitim
Adel Nehme