Machine Learning Mesafeleri

ABDULLAH ATCILI
Machine Learning Turkiye
6 min readJan 3, 2022

Makine öğrenmesinde mesafeler önemli rol oynar. Supervised learning (denetimli öğrenme ) modellerinden KNN ve Unsupervised learning (denetimsiz öğrenme) modellerinden KMeans gibi birçok popüler ve etkili makine öğrenmesi algoritması için temel sağlar.

Mesafe, bir problem alanındaki iki nesne veya değişken arasındaki göreceli farkı özetleyen nesnel bir puandır.

Belki de mesafe ölçümleriyle karşılaşmanızın en olası yolu, özünde mesafe ölçümlerini kullanan bir makine öğrenmesi algoritması kullanmanızdır. Buna örnek olarak, KNN ve KMeans algoritmaları gösterilebilir.

Makine Öğrenmesindeki Mesafeler Nedir?

Evet Machine learning algoritmalarında farklı mesafe ölçümleri kullanılmaktadır. Temel olarak Öklid mesafesi (Euclidean distance) kullanılsada, daha farklı ölçümlerde mevcuttur. Bunlara örnek tablo aşağıda sunulmuştur.

Öklid mesafesi (Euclidean distance) : Matemetikte pisagor bağlantısı kullanılarak bulunan iki nokta arasındaki mesafe ölçüm birimidir. Buna göre iki boyutlu düzlemde iki nokta arasındaki mesafe basitçe iki noktanın x ve y koordinatlarının ayrı ayrı farklarının hipotenüs’üne eşittir.

Öklid mesafesi, düşük boyutlu verileriniz olduğunda ve vektörlerin büyüklüğünün ölçülmesi önemli olduğunda harika çalışıyor. Düşük boyutlu verilerde Öklid mesafesi kullanılırsa, kNN ve HDBSCAN gibi yöntemler kutunun dışında harika sonuçlar gösterir.

Öklid mesafesinin dezavantajlarını hesaba katmak için birçok başka önlem geliştirilmiş olsa da, hala en çok kullanılan mesafe ölçülerinden biridir. Kullanımı inanılmaz derecede sezgiseldir, uygulaması basittir ve birçok kullanım durumunda harika sonuçlar gösterir.

Pythonda bulunan sklearn kütüphanesinde ölçüm metriği olarak bulunmaktadır.

from sklearn.metrics.pairwise import euclidean_distances

Manhattan mesafesi : Manhattan mesafesi, iki vektörün mutlak olarak farklarının toplamıdır. Yani iki nokta (X1, Y1) ve (X2, Y2) olarak verilirse Manhattan mesafesi |X1-X2| + |Y1 -Y2| olarak hesaplanır.

Pythonda bulunan sklearn kütüphanesinde ölçüm metriği olarak bulunmaktadır.

from sklearn.metrics.pairwise import manhattan_distances

Minkowski mesafesi : Minkowski mesafesi Öklid uzayı’nda bir metrik’tir, Öklid mesafesi ve Manhattan mesafesi’nin bir genelleştirilmesi ile oluşturulur. Burada eklenen p parametresine göre işlemler yapılır p=1 olduğunda, Minkowski mesafesi, Manhattan mesafesine eşit olur. p=2 olduğunda, Minkowski mesafesi, Öklid mesafesine eşit olur.

  • p = 1 — Manhattan mesafesi
  • p = 2 — Öklid mesafesi
  • p = — Chebyshev mesafesi
Minkowski Mesafesi Formülü

Pythonda bulunan scipy kütüphanesinde, p parametresi değiştirilerek kullanılabilecek şekilde bir ölçüm metriği olarak bulunmaktadır.

from scipy.spatial import distance

Kosinüs Benzerliği : Kosinüs Mesafesi ölçüsü esas olarak iki vektör arasındaki benzerliği hesaplamak için kullanılır. İki vektör arasındaki açının kosinüsü ile ölçülür ve iki vektörün aynı yönü gösterip göstermediğini belirler. Metin analizinde genellikle belge benzerliğini ölçmek için kullanılır.

Tam olarak aynı yönelime sahip iki vektörün kosinüs benzerliği 1'dir, oysa birbirine taban tabana zıt iki vektörün benzerliği -1'dir. Bir yönelim ölçüsü olduğu için büyüklüklerinin önemli olmadığını unutmayın.

Pythonda bulunan scipy kütüphanesinde ölçüm metriği olarak bulunmaktadır.

from scipy.spatial import distance
distance.cosine([1, 0, 0], [0, 1, 0])

Jaccard Benzerliği (Jaccard Similarity) : Jaccard Benzerliği, verilen iki set arasındaki benzerliği ölçmek için kullanılır. Jaccard Benzerliği formülü, iki veriseti kesişiminin, iki veriseri birleşimine bölünmesi ile bulunur. Örneğin; annem pazardan elma, armut, muz, karpuz almamı sipariş etti. Ama ben yolda unuttum. Hatırladığım kadarıyla alışverişimi tamamladım. Aldıklarım; elma, havuç, muz, kavun. Bu iki listenin (siparişler, alınanlar) Jaccard Benzerliği kesişim / birleşim olacaktır yani, kesişim kümesi elma ve muz olan 2 ürün, birleşim kümesi ise; elma, armut, muz, karpuz, havuç, kavun olan 6 üründür. Yani benim listelerimin Jaccard Benzerliği, 2/6 = 0.333'tür. Jaccard Benzerliği 0 ile 1 arasında değerler alabilir.

Classification metriklerinden biri olan cross-validation da ise:

Jaccard Benzerliği, TP / (TP + FP + FN) olarak tespit edilir.

Pythonda bulunan scipy kütüphanesinde ölçüm metriği olarak bulunmaktadır.

from scipy.spatial import distance
distance.jaccard([1, 0, 0], [0, 1, 0])

Hamming Mesafesi : Hamming mesafesi, iki ikili veri dizisini karşılaştırmak için bir ölçümdür. Eşit uzunluktaki iki ikili diziyi karşılaştırırken, Hamming mesafesi, iki bitin farklı olduğu bit konumlarının sayısıdır. Hamming uzaklığı yöntemi tüm verilere bakar ve kaç özelliğin farklı olduğunun sonucunu verir.

Bu, çoğunlukla verilerinizi tek tuşla kodladığınızda ve iki ikili vektör arasındaki mesafeleri bulmanız gerektiğinde kullanılır.

Aynı uzunlukta iki “ABCDE” ve “ABCDE” dizimiz olduğunu ve bunlar arasındaki hamming mesafesini bulmak istediğimizi varsayalım. Her dizede harf harf gideceğiz ve benzer olup olmadıklarına bakacağız, her iki dizenin ilk harfleri benzer, sonra ikinci harfleri benzer değil, üçüncü harfler benzer değil …

ABCDE ve ABCDE dizelerine bu işlemi uyguladığımızda, dizelerde sadece kalın yazılmış iki harfin benzer ve diğer üçünün farklı olduğunu göreceğiz. Bu nedenle, buradaki Hamming Mesafesi 3 olacaktır. İki dizi arasındaki Hamming Mesafesi ne kadar büyükse, bu diziler o kadar farklı olacaktır aynı şekilde Hamming Mesafesi ne kadar küçükse, bu diziler o kadar benzer olacaktır.

Tipik kullanım durumları, veriler bilgisayar ağları üzerinden iletildiğinde hata düzeltme / algılama içerir. Hatayı tahmin etmenin bir yolu olarak ikili bir sözcükteki bozulmuş bitlerin sayısını belirlemek için kullanılabilir.

Pythonda bulunan scipy kütüphanesinde ölçüm metriği olarak bulunmaktadır.

from scipy.spatial import distance
distance.hamming([1, 0, 0], [0, 1, 0])

Mahalanobis Mesafesi (Mahalanobis distance) : Mahalanobis mesafesi yapacağımız tüm verisetinin de sayısal değerler içerdiğinden emin olmalıyız, kategorik değerler içeren verisetlerinde teorik olarak doğru sonuca ulaşılamaz. Mahalanobis mesafesi çok boyutlu verilerdeki noktanın, genel ortalamadan kaç standart sapma uzakta olduğunu tespit ederek aykırı değer yapmayı hedefler. Bir örnek ile anlatılmak istenirse, araba fiyatı ve hızını incelediğimiz bir grafik düşünelim.

Grafikten görüldüğü üzere araba fiyatları ve hızlarına ait grafik yukarıda sunulmuştur. Bu grafikte, x eksenindeki hız mesafeleri 10lar ile ifade edilirken, y eksenindeki fiyat mesafeleri 10binler seviyesinde ifade edilmektedir. Dolayısıyla böyle bir grafikte sadece öklid mesafesine bakarak işlem yapmak doğru olmayacaktır. Belirtilen iki nokta arasındaki öklid mesafesi aynı olmasına rağmen, gerçek değerleri ile bakıldığında, onbinlerle ifade edilen bir fark olduğu çok açıktır. Dolayısıyla bu gibi yoğunluk belirtilen verisetlerinde, Mahalanobis mesafesini kullanmak daha sağlıklı olur.

Pythonda bulunan scipy kütüphanesinde ölçüm metriği olarak bulunmaktadır.

from scipy.spatial import distance
iv = [[1, 0.5, 0.5], [0.5, 1, 0.5], [0.5, 0.5, 1]]
distance.mahalanobis([1, 0, 0], [0, 1, 0], iv)

Çebişev Mesafesi (Chebyshev Distance) : Çebişev Mesafesi, uzaydaki bir boyut boyunca en uzun mesafeyi oluşturan uzaklığı belirtir. Başka bir ifade ile iki N boyutlu vektörün bir boyuttaki en uzun mesafesidir

Pythonda bulunan scipy kütüphanesinde ölçüm metriği olarak bulunmaktadır.

from scipy.spatial import distance
distance.chebyshev([1, 0, 0], [0, 1, 0])

Haversine mesafesi (Haversine Distance) : Haversine(veya büyük daire) mesafesi, bir kürenin yüzeyindeki iki nokta arasındaki açısal mesafedir.

Haversine Distance Grafiği

Her noktanın ilk koordinatının enlem, ikinci koordinatın ise radyan cinsinden verilen boylam olduğu varsayılır. Veri, 2 boyutlu olmalıdır. Haversine mesafesine ait formül aşağıda belirtilmiştir.

Pythonda bulunan sklearn kütüphanesinde ölçüm metriği olarak bulunmaktadır.

from sklearn.metrics.pairwise import haversine_distances

Sørensen–Dice Katsayısı : Sørensen–Dice Katsayısı, string benzerlik ölçümlerinde kullanılan bir metriktir. İki örneğin benzerlik oranını hesaplamayı amaçlar. 0 ile 1 arasında değerler alır. 1e yakın olması benzerliğin yüksek olduğunu simgeler.

from scipy.spatial import distance
distance.dice([1, 0, 0], [0, 1, 0])

Bu yazıda, makine öğrenmesi modellerinde karşımıza çıkabilecek mesafelerden bahsettik. Umarım faydalı olmuştur…

--

--