Menghitung Jarak antar Data tipe Numerik


Minkowski Distance

Minkowski Distance termasuk Euclidean Distance dan Manhattan Distance, perhitungan jarak dimana nilai m adalah bilangan asli positif dan xi dan yi adalah 2 vector dalam dimensi n

Rumus untuk Minkowski Distance adalah: $$ d_{min}=(\sum_{i=1}n|x_{i}-y_{i}|m)^\frac{1}{m},m\ge1 $$

Manhattan Distance

Manhattan Distance agak berbeda daripada Minkowski Distance dimana nilai m=1 sama halnya dengan Minkowski Distance yang sensitif terhadap oulier

Rumus untuk Manhattan Distance adalah:

d_{man}=\sum_{i=1}^{n}|x_{i}-y_{i}|

Euclidean Distance

Euclidean Distance adalah perhitungan yang paling terkenal/banyak diketahui digunakan untuk data numerik. Ini berbeda daripada Minkowski Distance dimana nilai m = 2. Euclidean Distance berjalan baik disaat digunakan untuk datasets compact atau isolated clusters. Namun dia memiliki kelemahan yaitu jika dua vektor data tidak mempunyai atribut yang sama, mereka akan memiliki jarak yang lebih kecil dibandingan dengan pasangan data vektor yang mempuna nilai atribut yang sama

Average Distance

Mengenai kelemahan daripada Euclidean Distance, Average Distance adalah modifikasi daripada Euclidean Distance untuk memperbaiki hasil. untuk dua data x,y dalam dimensi-n, rumusnya adalah: $$ d_{ave}=\left(\frac{1}{n}\sum_{i=1}{n}(x_{i}-y_{i})2\right)^\frac{1}{2} $$

Weighted Euclidean Distance

Jika kedudukan masing masing atribut tersedia, Weighted Euclidean Distance adalah modifikasi dari Euclidean Distance. Jarak ini mempunyai rumus:

$$ d_{we}=\left(\sum_{i=1}^n w_{i}(x_{i}-y_{i}\right)2)\frac{1}{2} $$ Dimana w adalah berat yang diberikan kepada komponen ke-i

Chord Distance

Chord Distance adalah hasil modifikasi lainnya dari Euclidean Distance untuk mengatasi kelemahan Euclidean Distance lainnya. jarak ini juga bisa digunakan untuk memecahkan masalah yang disebabkan skala pengukuran juga. Jarak ini bisa di kalkulasikan dari non-normalized data. rumus jarak ini adalah: $$ d_{chord}=\left(2-2 \frac{{\sum_{i=1}n}x_{i}y_{i}}{||x||{2}||y||{2}}\right)\frac{1}{2} $$

Mahalanobis Distance

Mahalobis Distance adalah perbedaan ke Euclidean dan Manhattan distance yaitu jarak ini terbebas dari hubungan data yang mana dua data berasal $$ d_{mah}=\sqrt{(x-y)S{-1}(x-y){T}} $$

Cosine Measure

Persammaan Cosine kebanyakan digunakan untuk mencari kemiripan dokumen dan rumusnya adalah: $$ Cosine(x,y)=\frac{\sum_{i=1}^{n}x_{i}{y_{i}}}{||x||2||y||2} $$

Pearson Correlation

Pearson Correlation Digunakan dalam clustering ekspresi data. Ukuran kemiripan menghitung kemiripan antara bentuk dari dua pola ekspresi. Rumusnya adalah: $$ Pearson(x,y)=\frac{\sum_{i=1}n(x_{i}-\mu_{x})(y_{i}-\mu_{y})}{\sqrt{\sum_{i=1}n(x_{i}-y_{i})2}\sqrt{\sum_{i=1}n(x_{i}-y_{i})^2}} $$

Dimana mu x dan mu y dimaksudkan untuk x dan y. Jarak ini juga memiliki kelemahan yaitu sensitif terhadap outliers

Contoh Program menghitung jarak data dari data di internet:

import pandas as pd
df = pd.read_csv("tae.csv",nrows=4)
df
English Instructor Course Summer or Regular Class Size Class Attribut
0 1 23 3 1 19 3
1 2 15 3 1 17 3
2 1 23 3 2 49 3
3 1 5 2 2 33 3
binary=[0,3]
num=[1,2,4,5]
from IPython.display import HTML, display
import tabulate
table=[
    ["Data"]+["Jarak"]+["Numeric"]+["Binary"],
    ["v1-v2"]+[0]+[0]+[0],
    ["v1-v3"]+[0]+[0]+[0],
    ["v2-v3"]+[0]+[0]+[0],
    ["v3-v4"]+[0]+[0]+[0],
    ]

display(HTML(tabulate.tabulate(table, tablefmt='html')))
Data JarakNumericBinary
v1-v20 0 0
v1-v30 0 0
v2-v30 0 0
v3-v40 0 0
def chordDist(v1,v2,jnis):
    jmlh=0
    normv1=0
    normv2=0
    for x in range (len(jnis)):
        normv1=normv1+(int(df.values.tolist()[v1][jnis[x]])**2)
        normv2=normv2+(int(df.values.tolist()[v2][jnis[x]])**2)
        jmlh=jmlh+(int(df.values.tolist()[v1][jnis[x]])*int(df.values.tolist()[v2][jnis[x]]))
    return ((2-(2*jmlh/(normv1*normv2)))**0.5)
from IPython.display import HTML, display
import tabulate
table=[
    ["Data"]+["Jarak"]+["Numeric"]+["Binary"],
    ["v1-v2"]+[0]+[chordDist(0,1,num)]+[0],
    ["v1-v3"]+[0]+[chordDist(0,2,num)]+[0],
    ["v2-v3"]+[0]+[chordDist(1,2,num)]+[0],
    ["v3-v4"]+[0]+[chordDist(2,3,num)]+[0],
    ]

display(HTML(tabulate.tabulate(table, tablefmt='html')))
Data JarakNumeric Binary
v1-v20 1.41320902544324630
v1-v30 1.41382307583129950
v2-v30 1.41367422577513540
v3-v40 1.413841698820558 0

BINARY

def binaryDist(v1,v2,jnis):
    q=0
    r=0
    s=0
    t=0
    for x in range (len(jnis)):
        if (int(df.values.tolist()[v1][jnis[x]]))==1 and (int(df.values.tolist()[v2][jnis[x]]))==1:
            q=q+1
        elif (int(df.values.tolist()[v1][jnis[x]]))==1 and (int(df.values.tolist()[v2][jnis[x]]))==2:
            r=r+1
        elif (int(df.values.tolist()[v1][jnis[x]]))==2 and (int(df.values.tolist()[v2][jnis[x]]))==1:
            s=s+1
        else:
            t=t+1
    return ((r+s)/(q+r+s+t))
from IPython.display import HTML, display
import tabulate
table=[
    ["Data"]+["Jarak"]+["Numeric"]+["Binary"],
    ["v1-v2"]+[0]+[chordDist(0,1,num)]+[binaryDist(0,1,binary)],
    ["v1-v3"]+[0]+[chordDist(0,2,num)]+[binaryDist(0,2,binary)],
    ["v2-v3"]+[0]+[chordDist(1,2,num)]+[binaryDist(1,2,binary)],
    ["v3-v4"]+[0]+[chordDist(2,3,num)]+[binaryDist(2,3,binary)],
    ]

display(HTML(tabulate.tabulate(table, tablefmt='html')))
Data JarakNumeric Binary
v1-v20 1.41320902544324630.5
v1-v30 1.41382307583129950.5
v2-v30 1.41367422577513541.0
v3-v40 1.413841698820558 0.0

Referensi

  1. https://www.researchgate.net/publication/286637899_A_Comparison_Study_on_Similarity_and_Dissimilarity_Measures_in_Clustering_Continuous_Data
  2. mulaab.github.io/datamining/memahami-data/