Makine Öğrenmesi Algoritmalarında Sıklıkla Kullanılan NumPy Fonksiyonları

Yiğit Şener
6 min readJun 7, 2020

--

Veri bilimi projelerinde Python’da makine öğrenmesine dair bir çok kütüphanenin (Sklearn, tansorflow, pandas) temelinde Numpy kütüphanesine ait fonksiyonlar yer almaktadır. Numpy (Numerical Python) çok boyutlu sayısal işlem yapabilme ve bunun yanında istatistiksel sonuçlar verebilen en temel kütüphanelerden birisidir.

Bu makalenin temel amacı Numpy kütüphanesinde en sık kullanılan fonksiyonları kısa kısa kodlayarak tanıtmaktadır. Böylece hazır makine öğrenmesi kütüphanelerden bağımsız sıfırdan inşa edilen algoritmaların iskeletinde yer alan matematiksel denklemlerin karşılığı görülmüş olacaktır.

Örnek kodları çalıştırmadan önce aşağıdaki numpy kütüphanesini import etmeliyiz.

import numpy as np

Vektör Oluşturma

Numpy’da tek boyutlu biz dizi oluşturarak vektör yaratabiliriz.

#Bir satır (row) olarak vektör oluşturma
RowVektor = np.array([3,2,1])
print(RowVektor)
# ÇIKTI: [3 2 1]

#Bir kolon (column) olarak vektör oluşturma
columnVector = np.array([[10],[20],[30]])
print(columnVector)
# ÇIKTI:
# [[10]
# [20]
# [30]]

Matris (Matrix) Oluşturma

İki boyutlu bir array oluşturarak matris kurabiliriz. Aşağıdaki örnekte 4 satırlı ve 4 kolonlu bir matris yaratılmıştır.

# Matrix oluşturma
matrix = np.array([[7,2,8,11],[44,75,36,23],[91,65,83,17]])
print(matrix)
# ÇIKTI:
# [[ 7 2 8 11]
# [44 75 36 23]
# [91 65 83 17]]

Matris Oluştururken Zeros, Ones ve Eye Kullanımı

Numpy kütüphanesinde Zeros fonksiyonu ile için 0 değerlerinden oluşan ve ölçüsü ve tipi değiştirilebilen bir matris oluşturulabilir. Aynı şekilde Ones fonksiyonu ile içindeki değerler 1 olan bir matris oluşturulabilir. Eye fonksiyonu ile köşegenler (diagonel) 1, geri kalan kısımlar ise 0 ile doldurulur.

# ZEROS
# 3 x 4 bir matris oluşturma
zeros = np.zeros([3,4], # Matrisin satır ve kolon sayısı
dtype="float" # değerlerin tipi
)
print(zeros)
# ÇIKTI:
# [[0. 0. 0. 0.]
# [0. 0. 0. 0.]
# [0. 0. 0. 0.]]

# ONES
# 3 x 4 bir matris oluşturma
ones = np.ones([3,4], # Matrisin satır ve kolon sayısı
dtype="int" # değerlerin tipi
)
print(ones)
# ÇIKTI:
# [[1 1 1 1]
# [1 1 1 1]
# [1 1 1 1]]

# EYE
# 3 x 4 bir matris oluşturma
eye = np.eye(4, # Matrisin satır ve kolon sayısı
dtype="int" # değerlerin tipi
)
print(eye)
# ÇIKTI:
# [[1 0 0 0]
# [0 1 0 0]
# [0 0 1 0]
# [0 0 0 1]]

Vektör ya da Matris İçinden Eleman Seçimi

Matris veya vektör kümeleri içinden aşağıdaki gibi bir ya da daha fazla elemana erişebilirsiniz.

# Bir vektör ve matris tanımlayalım
rowVector = np.array([9,8,7,6,5,4,3,2,1])

matrix = np.array([[90,80,70],[60,50,40],[30,20,10]])
print(rowVector)
# ÇIKTI: [9 8 7 6 5 4 3 2 1]
print(matrix)
# ÇIKTI:
# [[90 80 70]
# [60 50 40]
# [30 20 10]]

# Vektördeki tüm elemanların seçimi
print(rowVector[:])
# ÇIKTI: [9 8 7 6 5 4 3 2 1]

# Seçilen elemana kadar olan değerlerin getirlmesi
print(rowVector[:4])
# ÇIKTI: [9 8 7 6]

# Seçilen elemandan sonra olan değerlerin getirlmesi
print(rowVector[4:])
# ÇIKTI: [5 4 3 2 1]

# Son elemanın getirilmesi
print(rowVector[-1])
# ÇIKTI: 1

# Matrisin 2. satırdaki 2. kolonuna ait eleman
print(matrix[1,1])
#ÇIKTI: 50

# Matris içinde seçilen satıra (2. satır) ve ondan sonra gelen satırlar için
# tüm kolon elemanlarının getirilmesi
print(matrix[:2,:])
# ÇIKTI:
# [[90 80 70]
# [60 50 40]]

# Matisteki seçilen kolona ait değerlerin getirilmesi
print(matrix[:,1:2])
# ÇIKTI:
# [[80]
# [50]
# [20]]

Matris Özelliklerinin Nitelendirilmesi

Matrisin enini boyunu sağını solunu bize söyleyen fonksiyonlar:

# Örnek Matris
matrix = np.array([[0.1,0.2],[0.5,0.6],[0.8,0.9]])
print(matrix)
# ÇIKTI:
# [[0.1 0.2]
# [0.5 0.6]
# [0.8 0.9]]

# Satır ve kolon sayısının veren metod
print(f"satır sayısı: {matrix.shape[0]}, kolon sayısı: {matrix.shape[1]}")
# ÇIKTI: satır sayısı: 3, kolon sayısı: 2

# Toplam eleman sayısı
print(matrix.size)
# ÇIKTI: 6

# Boyut sayısı
print(matrix.ndim)
# ÇIKTI: 2

Matris ve Vektörlerde Toplama, Çıkarma ve Çarpma

Numpy içinde yer alan Sum, Substract ve Dot fonksiyonları le toplama çıkarma ve çarpma işlemleri yapılabilir.

# Örnek matrisler
matrix1 = np.array([[1,2],[3,4]])
matrix2 = np.array([[7,5],[8,9]])
# İki matrisin toplanması
print(np.add(matrix1, matrix2))
# ÇIKTI:
# [[ 8 7]
# [11 13]]
# İki matrisin çıkarılması
print(np.subtract(matrix1, matrix2))
# ÇIKTI:
# [[-6 -3]
# [-5 -5]]
# İki matrisin çarpımı dot products ile karıştırılmamalı
print(matrix1 * matrix2)
# ÇIKTI:
# [[ 7 10]
# [24 36]]

Elemanlar Üzerinde Uygulama Operasyonları

Dizi (array) içinde yer alan elemanlar üzerinden çeşitli fonksiyonlar geliştirebilirsiniz. Numpy kütüphanesinin içerisinde yer alan vectorize nesnesi ile istenilen fonksiyon bu metot içerisine tanımlanarak bir dizinin belirli bir bölümü bu işleme tabi tutulabilir.

# Örnek Matris
matrix = np.array([[0.1,0.2,0.3],[0.4,0.5,0.6],[0.7,0.8,0.9]])
print(matrix)
# ÇIKTI:
# [[0.1 0.2 0.3]
# [0.4 0.5 0.6]
# [0.7 0.8 0.9]]

# Elemanlara uygulanacak olan fonksiyonun tanımlanması
myFunction = lambda x: ((x * 10) ** 2) % 3

# Vectorized nesnesinin içerisine fonksiyon yerleştirilir
vectorizedMyFunction = np.vectorize(myFunction)

# Yerleştirilen fonksiyon matris üzerinde uygulanır
print(vectorizedMyFunction(matrix))
# ÇIKTI:
# [[1. 1. 0.]
# [1. 1. 0.]
# [1. 1. 0.]]

Min, Max, Ortalama ve Toplam Bulma

Numpy’nin kendi içindeki metotları min, max, ortalama ve toplam bulmak için kullanılabilmektedir.

matrix = np.array([[2,4,6],[8,10,12],[14,16,18]])
print(matrix)
# ÇIKTI:
# [[ 2 4 6]
# [ 8 10 12]
# [14 16 18]]

print(f"Minimum değer: {matrix.min()}")
# ÇIKTI: Minimum değer: 2

print(f"Maksimum değer: {matrix.max()}")
# çıktı: Maksimum değer: 18

print(f"Ortalama değer: {matrix.mean()}")
# çıktı: Ortalama değer: 10.0

print(f"Toplam değer: {matrix.sum()}")
# çıktı: Toplam değer: 90

Varyans ve Standart Sapma Bulma

Üstte yer alan matris değerlerinin varyans ve standart sapmasını bulalaım.

print(f"Varyans değeri: {matrix.var()}")
# çıktı: Varyans değeri: 126.66

print(f"Standart Sapma değeri: {matrix.std()}")
# çıktı: Standart Sapma değeri: 5.16

Reshape ve Transpose İşlemleri

Matris ve vektörler için reshape ve transpose işlemelri ile esnek bir şekilde veri manipülasyonu mümkündür.

matrix = np.array([[2,4],[8,10],[14,16]])
print(matrix)
# ÇIKTI:
# [[ 2 4]
# [ 8 10]
# [14 16]]


# Reshape - bir kolona dönüştürme
print(matrix.reshape(6,1))
# ÇIKTI:
# [[ 2]
# [ 4]
# [ 8]
# [10]
# [14]
# [16]]


# -1 değeri ile yatay düzlemde kolon oluşturur
print(matrix.reshape(1,-1))
# ÇIKTI: [[ 2 4 8 10 14 16]]

# Tek boyutlu olarak tüm değerin gösterimi
print(matrix.reshape(6))
# ÇIKTI: [ 2 4 8 10 14 16]

# Ayrıca flatten yöntemi ile de bu tek boyut yaratılabilir
print(matrix.flatten())
# ÇIKTI: [ 2 4 8 10 14 16]

# Matrisin transpoze edilmesi
print(matrix.T)
# ÇIKTI:
# [[ 2 8 14]
# [ 4 10 16]]

# Bir dizinin transpoze edilerek vektörleştirilmesi
print(np.array([[1,2,3,4,5]]).T)
# ÇIKTI:
# [[1],
# [2],
# [3],
# [4],
# [5]]

Bir Matrisin Determinantını ve Sıralamasını Bulma

# 2 x 2 örnek matirs
matrix = np.array([[4,2],[10,10]])
# ÇIKTI:
# [[ 4 2]
# [10 10]]

# Determinant hesaplama
print(np.linalg.det(matrix))
# ÇIKTI: 20

# Rank (sıralama) hesaplama
print(np.linalg.matrix_rank(matrix))
# ÇIKTI: 2

Bir Matrisin Köşegenini (Diagonel) Alma

# 3 x 3 örnek matirs
matrix = np.array([[4,2,1],[5,3,2],[30,10,12]])
# [[ 4 2 1]
# [ 5 3 2]
# [30 10 12]]

# Ana diagonel (köşegen) alımı
print(matrix.diagonal())
# ÇIKTI: [4 3 12]

# Bir üst diagonelin alınması
print(matrix.diagonal(offset=1))
# ÇIKTI: [2 2]


# Bir alt diagonelin alınması
print(matrix.diagonal(offset=-1))
# ÇIKTI: [5 10]

Matrisin İzini Alma (Trace of a Matrix)

Bir matrisin köşegenleri boyunca olan elemanların toplamı matrisin izini verir.

# 3 x 3 örnek matirs
matrix = np.array([[4,2,1],[5,3,2],[30,10,12]])
# [[ 4 2 1]
# [ 5 3 2]
# [30 10 12]]

print(matrix.trace())
# ÇIKTI: 19

Özdeğerlerin (Eigenvalues) ve Özvektörlerin (Eigenvectors) Bulunması

# 3 x 3 örnek matirs
matrix = np.array([[4,2,1],[5,3,2],[30,10,12]])
# [[ 4 2 1]
# [ 5 3 2]
# [30 10 12]]

print(matrix.trace())
# ÇIKTI: 19

# Eigenvalues ve Eigenvectors bulunması
eigenvalues, eigenvectors=np.linalg.eig(matrix)
print(eigenvalues)
# ÇIKTI:
# [16.96089936+0.j 1.01955032+0.61281029j 1.01955032-0.61281029j]

print(eigenvectors)
# ÇIKTI:
# [[-0.10284175+0.j -0.33519369+0.10454783j -0.33519369-0.10454783j]
# [-0.17705416+0.j 0.01759649-0.25850484j 0.01759649+0.25850484j]
# [-0.97881326+0.j 0.89976694+0.j 0.89976694-0.j ]]

İç Çarpım (Dot Product/Inner Product)

# 1. vektör
vector1 = np.array([2,4,6])

# 2. vektör
vector2 = np.array([3,5,7])

# dot product hesaplama
print(np.dot(vector1,vector2))
# ÇIKTI: 68

# @ işareti ile dot product hesaplama
print(vector1 @ vecto_2)
# ÇIKTI: 68

# iki matrisin çarpımı
martix = np.array([[1,2],[3,4]])
print(np.dot(matrix,matrix))
# ÇIKTI:
# [[ 56 24 20]
# [ 95 39 35]
# [530 210 194]]

Matrisin Tersini Alma (Invert)

# Örnek Matris
matrix = np.array([[1,3],[4,6]])

# Matrisin tersini bulan fonksiyon
print(np.linalg.inv(matrix))
# ÇIKTI:
# [[-1. 0.5 ]
# [ 0.66666667 -0.16666667]]

Rastgele Veri Üretimi (Random Values)

#Set seed
np.random.seed(1)

#Generate 3 random integers b/w 1 and 10
print(np.random.randint(0, # başlangıç değeri
100, # bitiş değeri
3 # üretilecek değer adet
))
# ÇIKTI: [50 20 18]

# Normal dağılıma sahip ve
# ortalması = 2, standart sapması 3
# olan random değer üretimi

#Draw 3 numbers from a normal distribution with mean 1.0 and std 2.0
print(np.random.normal(2.0, # ortalama
3.0, # standart sapma
5 # Değer adet
))
# ÇIKTI: [-2.63564245 1.73568774 4.55671797 4.03170202 1.67936472]

Seyrek (Sparse Matrix) Matris Yaratma

Bu matrisin yaratılması için scipy kütüphanesinden yararlanılmaktadır.

from scipy.sparse import csr_matrix

# Örnek Matris
matrix = np.array([[0,0,1],[2,0,1],[2,3,2]])
print(matrix)

# Sparse matrix yaratımı
matrix_sparse = csr_matrix(matrix)
print(matrix_sparse)
# ÇIKTI:
# (0, 2) 1
# (1, 0) 2
# (1, 2) 1
# (2, 0) 2
# (2, 1) 3
# (2, 2) 2

--

--