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:
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 | Jarak | Numeric | Binary |
v1-v2 | 0 | 0 | 0 |
v1-v3 | 0 | 0 | 0 |
v2-v3 | 0 | 0 | 0 |
v3-v4 | 0 | 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 | Jarak | Numeric | Binary |
v1-v2 | 0 | 1.4132090254432463 | 0 |
v1-v3 | 0 | 1.4138230758312995 | 0 |
v2-v3 | 0 | 1.4136742257751354 | 0 |
v3-v4 | 0 | 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 | Jarak | Numeric | Binary |
v1-v2 | 0 | 1.4132090254432463 | 0.5 |
v1-v3 | 0 | 1.4138230758312995 | 0.5 |
v2-v3 | 0 | 1.4136742257751354 | 1.0 |
v3-v4 | 0 | 1.413841698820558 | 0.0 |
Referensi¶
- https://www.researchgate.net/publication/286637899_A_Comparison_Study_on_Similarity_and_Dissimilarity_Measures_in_Clustering_Continuous_Data
- mulaab.github.io/datamining/memahami-data/