Day 06 – Levenshtein Distance

I am writing the data series daily
1 year we will have 365 data stories for reading ^^

How to compare string distance ??

Imagine that you work in the NLP task
(NLP – Natural Language Processing)
And you want to compare how similar of 2 strings
What will you do !??

For example
If we want to compare 2 strings

  1. PrayutZa
  2. PrawitZa

Let’s see
To compare how similar!
It looks like you measure the distance between 2 strings.
The more the distance it means
2 string are far from together
The less the distance it means
2 string are close together

Is it easy !? Right ^^

So. .. the question is how to measure it !??

What we learned from the past !?
Hamming Distance!
They compare binary vector
Question: how to turn string to binary vector !?

PrayutZa
The first string >> binary vector !?

But the intuition of Hamming Distance is
How to compare each axis step by step
For example
X1 = [1, 0]
X2 = [1, 1]
We compare the first axis
1 and 1 are equal it means they are similar

The second axis !!
0 and 1 are different by 1 unit, so they are not similar !!!

Is it possible
That we can compare each string by Hamming distance !?
From example above
If we want to compare 2 strings

  1. PrayutZa
  2. PrawitZa

Let’s compare one by one
(If we do not care case sensitive)
P and P >> same character get 0 point
r and r >> same character get 0 point
a and a >> same character get 0 point
y and w >> different character get 1 point
u and i >> different character get 1 point
t and t >> same character get 0 point
Z and Z >> same character get 0 point
a and a >> same character get 0 point

With Hamming Distance
If we apply the rule from them
We will get how is likely equal
= 1 – (sum(point) / length of strings)

From calculation above
If we apply Hamming Distance
We will get
PrayutZa and PrawitZa
Similar score
= 1 – (2/8)
= 0.75 !!
Or 75 % Similar by Hamming Distance score !!

But what if 2 strings have different length

  1. PrayatINWZa007
  2. PrawitINWZaaIO

They are of different lengths!???
So…, How to measure how similar !?

** Note !!!
If you can remember Hamming Distance
Let’s go to see how Levenshtein distance work !>>>

If not, Don’t worry about it
You can learn more on day 1
I provide on the link below
Link: https://bigdatarpg.com/2021/01/07/day-01-hamming-distance/


Levenshtein Distance

Levenshtein Distance is invented by Russian and mathematician
named Vladimir Levenshtein, who considered this distance in 1965
Levenshtein Distance may also refer to Edit Distance
So…. What is Levenshtein Distance??

Levenshtein Distance consists of 3 components

  1. Insertion
  2. Substitution
  3. Deletion

Let’s see the simple example
If we have 2 strings to compare

  1. PrayutZa
  2. PrawitZa

Let’s compare each character one by one
(If we do not care case sensitive)
P and P >> same character get 0 point
r and r >> same character get 0 point
a and a >> same character get 0 point
y and w >> different character get 1 point (Substitution y and w)
u and i >> different character get 1 point (Substitution u and i)
t and t >> same character get 0 point
Z and Z >> same character get 0 point
a and a >> same character get 0 point

After that, we compute the score by
sum(point) / length of strings
= 2/8
= 0.25
Or 25 percents for a different score
If we need a similar score
We use 1 minus score
= 1 – 0.25
= 0.75
Or 75 % similar score calculated by Levenshtein Distance

Recap !!
We use the concept of Substitution 2 location
In order to correct each character
And that is a cost for the correctness ^^

The more cost for the correctness the far distance between 2 strings
Is it an easy concept of how to compare strings!?

Let’s see another example

  1. Prayut
  2. Payet

In this case, 2 strings are of different length
Prayut >> 6 unit
Payet >> 5 unit

Let’s compare one by one
But this case, we have 2 scenarios
Scenario 1
Step 1
P and P >> same character get 0 point
Step 2
r and a !! >> different character get 1 point (Substitution r and a)
BUT !! WAIT !!!
If we check on step 3 of Prayut >> a
So ! this step we use the property of Insertion
We have
Prayut
P_ayet

If we insert “” character between P and a Instep 3 we will compare a on Prayut And a on P_ayet With apply property Step 2 r and !! >> different character get 1 point (Insertion)

Now step 3
a and a >> same character get 0 point
step 4
y and y >>same character get 0 point
step 5
u and e >> different character get 1 point (Substitution y and w)

step 6
t and t >> same character get 0 point

After that, we compute the score by
sum(point) / length of strings
= 2/8
= 0.25
Or 25 percents for a different score
If we need a similar score
We use 1 minus score
= 1 – 0.25
= 0.75
Or 75 % similar score calculated by Levenshtein Distance

With Levenshtein Distance
It is very useful in NLP applications ^^

Exercise
Let’s calculate Levenshtein Distance if

  1. PrayatINWZa007
  2. PrawitINWZaaIO

** Remark **
Score of Levenshtein Distance
If there are many points of correctness
Levenshtein Distance care the only minimum of points of correctness
For example
If we compare strings and
There are 3 ways for correct strings
Way 1 cost 3 point
Way 2 cost 2 point
Way 3 cost 4 point
We pick 2 point for calculation ^^

Applications on Levenshtein Distance

Example

  • String matching
  • Spell checking
  • Search documents by keywords
  • Check similarity of documents
  • Search chatbot intent
  • Customer profiling
  • Miscellaneous


Thank you my beloved fanpage
Please like share and comment

Made with Love ❤️ by Boyd

This series is designed for everyone interested in data
or work in a data field but is busy.
Content may have a swap between easy and hard.
Combined with Coding, Math, Data, Business, and Misc

  • Do not hesitate to feedback to me 🌟
  • If some content wrong I have to say apologize in advance 🙇‍♂‍
  • If you have experiences in this content, please kindly share it with everyone ^^❤️
  • Sorry for my poor grammar, I will practice more and more 😅
  • I am going to deliver more English content afterward 😀

Follow me 🙂
Youtube: https://youtube.com/c/BigDataRPG
Fanpage: https://www.facebook.com/bigdatarpg/
Medium: https://www.medium.com/bigdataeng
Github: https://www.github.com/BigDataRPG
Kaggle: https://www.kaggle.com/boydbigdatarpg
Linkedin: https://www.linkedin.com/in/boyd-sorratat
Twitter: https://twitter.com/BoydSorratat
GoogleScholar: https://scholar.google.com/citations?user=9cIeYAgAAAAJ&hl=en

#BigDataRPG #DataScienceDaily #LevenshteinDistance

Day 05 – Cosine Similarity

I am writing the data series on a daily basis
1 year we will have 365 data stories for reading ^^

=========================
Cosine !! What you are thinking about ?=========================

Can you remember that you learnt on secondary school year 4 !?
So…. What is it !? Trigonometry !!
Sin(x), Cosine(x), Tan(x)
Is that’s right !?

On the day 4.
I am talking about Minkowski Distance
Have you remenbered Euclidean distance
and how to calculate a height of building
by using Trigonometry

Yes ! today I am talking about one of a measure function
called Cosine Similarity

If you can remember
This Euclidean distance and that Trigonometry
Let’s go to see how Cosine Similarity work !>>>
If not, Don’t worry about it
You can learn more on day 4
I provide on the link below

Link: https://bigdatarpg.com/2021/01/09/day-04-minkowski-distance/

===========
Cosine Similarity
===========

Who used to use it before, Raise your hands up ^^ !!
The easy way to explain this system is
the measure that compare similarity of 2 vectors
by looking at angle between 2 vectors !

Ok That’s means this system require 2 vectors
Lets’ example
If there are 3 vectors
vector A, vector B, and vector C

(the result range of cosine similarity is between [0, 1]In some case has minus that’s means opppsite)

Check how similar
A and B = 0.5
A and C = 0.2
B and C = 0.7

Which pair is the most similar and
which one is the most not similar ?

OK Let’s see how to interprete !!
If result show that equal 1
that’s means 2 vectors are in the same line
they have 0 degree angle with together

If result show that equal 0
that’s means 2 vectors are not in the same line
they have 90 degree angle with together

If result show that equal -1
that’s means 2 vectors are in the same line
but they are 180 degree angle with together
one vector is the oppsite with another vector

Back to the result and question
Which pair is the most similar and
which one is the most not similar ?

So we get
B and C = 0.7 Very similar
A and B = 0.5 Similar but not much !
A and C = 0.2 That is not quite similarIs it easy Right !? 😀

==================
Calculate Cosine Similarity
==================

Let’s see the example
If we have 3 customer

customer A, B, C
and each customer has 3 Features
Feature location
Feature education
Feature flag active customer

customer A = [Bangkok, Undergraduate, Y]
customer B = [Nonthaburi, Undergraduate, Y]
customer C = [Bangkok, Master, N]

We have to transform data from text to numerical
If we set Bangkok = 0, Nonthaburi = 1
Undergraduate = 0, Master = 1
N = 0, Y = 1

Now we have
customer A = [0, 0, 1]
customer B = [1, 0, 1]
customer C = [0, 1, 0]

Let’s see Features
It look like axis location as x-axis
education as y-axis
flag active customer as z-axis

combine into 1 vector of 1 customer

From Cosine Similarity
Sim(A,B) = Cos(degree) = (A dot B) / (||A|| * ||B||)

where
||A|| is Euclidean norm
||A|| = sqrt(x1**2 + x2**2 + … + xn**2)

Let’s calculate Euclidean distance
Euclidean distance(A, B) = sqrt(0**2 + 0**2 + 1**2) * sqrt(1**2 + 0**2 + 1**2)
Euclidean distance(A, C) = sqrt(0**2 + 0**2 + 1**2) * sqrt(0**2 + 1**2 + 0**2)
Euclidean distance(B, C) = sqrt(1**2 + 0**2 + 1**2) * sqrt(0**2 + 1**2 + 0**2)

Euclidean distance(A, B) = 1.4142
Euclidean distance(A, C) = 1.0000
Euclidean distance(B, C) = 1.4142

Let’s calculate dot product
What is dot product !???
Sum of product of each axis

So we have
A dot B = (0*1) + (0*0) + (1*1)
A dot C = (0*0) + (0*1) + (1*0)
B dot C = (0*0) + (0*1) + (1*0)

A dot B = 1
A dot C = 0
B dot C = 0

Combine them
Sim(A,B) = 1 / 1.4142
Sim(A,C) = 0 / 0.000
Sim(B,C) = 0 / 1.4142

Sim(A,B) = 0.707
Sim(A,C) = 0.000
Sim(B,C) = 0.000

As a result of Cosine Similarity
We found that
A and B = 0.707 Very similar
A and C = 0.000 It’s 90 deegree absolute different
B and C = 0.000 It’s 90 deegree absolute different

Um the result is quite not meaningful
Because we transform discrete data to numerical data
and we represent binary vector for customer

In this case
If our features has binary
Cosine Similarity can be rewrite to
A simple variation of cosine similarity
named Tanimoto distance
that is frequently used in information retrieval and biology taxonomy

For Tanimoto distance
instead of using Euclidean Norm
When we have binary vector
So we have
Sim(A,B) = (A dot B) / (A dot A) + (B dot B) – (A dot B)

=====================
Applications on Cosine Similarity
=====================

Example
– Clustering discrete data
– Check similarity of chemical molecule
– Clustering on continuous data
– Clustering customers
– Search documents by kewords
– Recommendation engine
– Check similarity of documents
– Search chatbot intent
– Check similarity of image
– Customer profiling
– Miscellaneous

===========================
Thank you my beloved fanpage
Please like share and comment
Made with Love ❤️ by Boyd
===========================

This series is designed for everyone who are interested in dataor work in data field that are busy.Content may have swap between easy and hard.Combined with Coding, Math, Data, Business, and Misc- Do not hesitate to feedback me 🌟

– If some content wrong I have to say apologize in advance 🙇‍♂️
– If you have experiences in this content, please kindly share to everyone ^^ ❤️
– Sorry for my poor grammar, I will practice more and more 😅
– I am going to deliver more english content afterward 😀

Follow me 🙂

Youtube: https://youtube.com/c/BigDataRPG
Fanpage: https://www.facebook.com/bigdatarpg/
Medium: https://www.medium.com/bigdataeng
Github: https://www.github.com/BigDataRPG
Kaggle: https://www.kaggle.com/boydbigdatarpg
Linkedin: https://www.linkedin.com/in/boyd-sorratat
Twitter: https://twitter.com/BoydSorratat
GoogleScholar: https://scholar.google.com/citations?user=9cIeYAgAAAAJ&hl=en

#BigDataRPG #DataScienceDaily #CosineSimilarity

Day 04 – Minkowski Distance

ลองเขียน Data Series วันละตอนเนาะ
ครบ 1 ปีเราจะมี 365 เรื่องให้อ่านกัน ^^

** English content will be available soon **

=======================
ถ้าพูดถึง พีทาโกรัส คุณนึกถึงอะไร !?
=======================

เมื่อพูดถึงพีทาโกรัส หลายคนคงร้องอี๋ 😱
แต่หลายๆคนกลับขอบคุณบุคคลสำคัญคนนี้
ที่ช่วยให้การประมาณค่าต่างๆเป็นเรื่องที่ง่ายขึ้นมากๆ
ถ้าใครคุ้นๆเจ้าสามเหลี่ยมมุมฉากที่เราเรียนกันตั้งแต่ ม 4
จะพบว่าทฤษฎีบทของพีทาโกรัสที่ว่าด้วย

ในสามเหลี่ยมมุมฉากใด ๆ
พื้นที่ของสี่เหลี่ยมจัตุรัส
ที่มีด้านเป็นด้านตรงข้ามมุมฉาก
เท่ากับผลรวมพื้นที่ของสี่เหลี่ยมจัตุรัสที่มีด้านเป็นด้านประชิดมุมฉาก
ของสามเหลี่ยมมุมฉากนั้น

หรือสามารถเขียนเป็นสมการง่ายๆได้ว่า
a**2 + b**2 = c**2
โดยที่ a และ b แทนขนาดของด้านสามเหลี่ยมที่ประกอบเป็นมุมฉาก
และ c แทนขนาดของด้านสามเหลี่ยด้านตรงข้ามมุมฉาก
โดยที่แอดขอเขียนสัญลักษณ์ ยกกำลังด้วย **

ดังนั้นหากเราต้องการหาค่า c
หรือความยาวของด้านตรงข้ามมุมฉาก
เราก็สามารถทำได้ง่ายๆเพียงถอดรากที่สองของสมการ
ได้เป็น
sqrt(a**2 + b**2) = c
โดยที่ แอดขอเขียนสัญลักษณ์ การถอดรากที่สอง
ด้วยการเขียนฟังก์ชันแบบนี้ sqrt(x)

แล้วมันเกี่ยวอะไรกับการวัดระยะล่ะ !??

เราสามารถใช้ทฤษฎีบทของพีทาโกรัส
มาช่วยในการวัดสิ่งของที่มีความสูงมากๆ
เช่น ต้นไม้ ภูเขา หรือตึก
เริ่มต้นให้เรายืนทำมุม 45 องศา
กับยอดของสิ่งที่เราต้องการวัดความสูง
เช่นเราอยากวัดความสูงของตึก
เราก็เดินถอยออกมาจากตัวตึกเรื่อยๆ
จนกระทั่งแหงนหน้ามองดาดฟ้าของตึกแล้วทำมุม 45 องศา
ณ ตอนนี้เราสามารถรู้มุมแบบคร่าวๆว่าคือ 45 องศา
ระยะทางที่เราเดินมาจนแหงนหน้ามองตึกได้
และแน่นอนความสูงของตึกทำมุม 90 องศากับพื้นถนน
ได้รูปสามเหลี่ยมละ !!
หลังจากนั้นเราก็สามารถแทนค่าเพื่อหาความสูงของตึกได้

คำนวน
ตึกสูง x เมตร
ระยะห่างเรากับตึก y เมตร
ระยะระหว่างเรากับยอดตึก z เมตร
สามเหลี่ยมที่มี มุม 90 องศา และ 45 องศา
แสดงว่ามุมที่เหลือคือ 45 องศา
เพราะมุมภาพในของสามเหลี่ยมรวมกันต้องได้ 180 องศา

การที่สามเหลี่ยมจะมี 2 มุมที่เท่ากันได้
จะต้องมีด้านประกอบของสามเหลี่ยมที่มีขนาดเท่ากัน
หรือ x มีค่าเท่ากับ y
(ในกรณีนี้สามารถตอบได้เลยว่าตึกสูงเท่าไหร่ !!
โดยวัดระยะที่เราเดินห่างออกไปเรื่อยๆเท่านั้นเอง)

แต่ถ้าใช้ทฤษฎีบทของพีทาโกรัส
จะได้ว่าจากสูตรตรีโกณของ sin cos tan
โดยที่
sin(มุม) = ด้านตรงข้ามมุม / ด้านตรงข้ามมุมฉาก
cos(มุม) = ด้านที่ชิดมุม / ด้านตรงข้ามมุมฉาก
tan(มุม) = ด้านตรงข้ามมุม / ด้านที่ชิดมุม

ณ ตอนนี้เราต้องการทราบความสูงตึก
หรือด้านที่ตรงข้ามเรา
เลือกสูตร
tan(มุม) = ด้านตรงข้ามมุม / ด้านที่ชิดมุม
แทนค่า
tan(45) = ด้านตรงข้ามมุม / y

ดังนั้นความสูงของตึกจะมีค่าเท่ากับ
ด้านตรงข้ามมุม = y * tan(45)

แทนค่า
ถ้าระยะระหว่าง เรากับตึก เท่ากับ 10 เมตร
tan(45) = 1
ด้านตรงข้ามมุม = 10 * tan(45)

ดังนั้น คำตอบความสูงของตึกเท่ากับ 10 เมตรนั่นเอง 😀

พีทาโกรัสเกิด 582 ก่อนคริสต์ศักราช
ที่เมืองซามอส (Samos) ประเทศกรีซ (Greece)

==========================
Euclidean Distance คุ้นๆกันไหมเอ่ย !?
==========================

Euclidean Distance คือการวัดระยะ
หรือสิ่งของจากการดู Delta หรือความต่างกันของแต่ละแกน
ซึ่งคล้ายกับการคำนวณหาขนาดของ Manhattan Distance มากๆ

จากตัวอย่างเดิมของ Manhattan Distance
หรือ L1-Norm Distance
สมมติ
X มีขนาด 10 หน่วย
Y มีขนาด 5 หน่วย
เราสามารถเขียนในรูป Vector ได้ว่า
v = [ 10, 5 ]
ทีนี้ขนาดของ Vector นี้หาได้จากการหา Delta ทีละแกน
โดยทำการเทียบระยะทางกับจุดกำเนิด หรือจุด (0, 0)
จะสามารถแทนค่าสมการได้ดังนี้
(10 – 0) + (5 – 0) = 15

สังเกตได้ว่าอีกหนึ่งจุดที่เรียกวิธีนี้ว่า L1-Norm
นั่นคือการที่แต่ละพจน์ หรือแต่ละแกนที่คำนวนนั้น
ถูกยกกำลังด้วย 1
(10 – 0) + (5 – 0) = 15
เขียนใหม่ได้เป็น
(10 – 0)**1 + (5 – 0)**1 = 15**1

สำหรับ Euclidean Distance นั้น
คำนวณผ่าน L2-Norm
จากตัวอย่างเดิม
v = [ 10, 5 ]
เราสามารถหาระยะทางแบบ Euclidean Distance ได้จาก
(10 – 0)**2 + (5 – 0)**2 = || v ||**2
ทำการถอดรากที่สอง
sqrt((10 – 0)**2 + (5 – 0)**2) = || v ||

ดังนั้นหากคำนวนหาขนาดของ v แบบ L2-Norm
จะได้ค่าประมาณ 11.18

สูตรคล้ายๆกับทฤษฎีบทของพีทาโกรัสใช่ไหมเอ่ย ^^ 😀

งั้นเราก็สามารถเขียนสูตรใหม่ได้เป็น
sqrt((x – 0)**p + (y – 0)**p) = z
โดยที่ p = ตัวแทนของ Dimension Space !!

p = 1 จะได้ Manhattan Distance
p = 2 จะได้ Euclidean Distance

Euclidean Distance นั้นชื่อตามตัวเลยครับ
มาจากนักคณิตศาตร์ที่ชื่อ ยุคลิด
ยูคลิดเกิดที่เมืองอเล็กซานเดรีย ประเทศอิยิปต์
365 ปีก่อนคริสตกาล

================
Minkowski Distance
================

เรารู้จักการวัดระยะผ่านระบบของ Function spaces
หรือ Lp-Norm
แต่สำหรับ Minkowski Distance นั้น
เพิ่มความพิเศษด้วยการยกกำลัง Delta ของแต่ละแกน
โดยยกกำลังตามจำนวนค่า Norm ที่เราต้องการ
แล้วทำการรวมค่าผลลัพธ์เข้าด้วยกัน
จากนั้นทำการถอดรากที่ได้ทำการยกกำลังไป


เช่น
หากยกกำลัง 3 ที่ทุกจุดของข้อมูล
เราก็มาถอดรากที่ 3 ในภายหลัง
แต่หากทำการยกกำลัง 10
เราก็มาถอดรากที่สิบในภายหลังเช่นเดียวกัน

ซึ่งแน่นอนว่า p นั้นสามารถไล่ไปได้ถึง Infinity !
แต่การจะเห็นภาพนั้นคงจะค่อนข้างยากหน่อย
แต่ถ้าเราค่อยๆคิดถึงระยะทางที่พาดผ่าน
ตั้งแต่
p = 1 คือระยะทางของเราที่สามารถวิ่งไปได้แค่ทีละแกนเท่านั้น
p = 2 คือระยะทางของเราที่สามารถวิ่งไปได้ทีละ 2 แกน

ดังนั้นสำหรับ p ที่มากขึ้นเรื่อยๆ
จำนวนแกนที่สามารถวิ่งได้ก็เพิ่มขึ้นเรื่อยๆ ด้วยเช่นเดียวกัน

จากตัวอย่างด้านบนเราเทียบ Vector กับจุดกำเนิด
แต่ในการใช้งานในมุมของ Data Science นั้น
เราใช้เปรียบเทียบ หรือวัดระยะห่าง
ของ 2 Vectors
โดย แต่ละ Vector เปรียบเสมือนเป็นตัวแทน ลูกค้า 1 คน
ดังนั้นเราสามารถเปรียบเทียบระยะความใกล้ หรือไกล
ของลูกค้าแต่ละคนได้โดยการหาขนาดของระยะห่างนั่นเอง

==============================
Minkowski กับการใช้งานใน Business
==============================

ตัวอย่างการคำนวณค่าความเหมือนของลูกค้าแต่ละคน
เช่น
นาย A มี vector = [2, 0, 1]
นาย B มี vector = [1, 2, 0]
นาย C มี vector = [0, 2, 1]

โดยที่ค่าใน vector นั้นเป็นตัวแทนของ Features ของลูกค้า
Features อาจจะมองว่าเป็นลักษณะของลูกค้า
ซึ่งอาจจะเป็น ส่วนสูง, น้ำหนัก, การซื้อของ
โดยที่เราจะมอง 1 Feature เปรียบเสมือนข้อมูล 1 แกน
(บางคนก็ใช้คำว่า 1 มิติ หรือ 1 column)

เอาล่ะ เริ่มคำนวณ Minkowski Distance ที่ p = 2
หรือ Euclidean Distance กัน
โดยคำนวนหา Delta ของแต่ละแกน
นาย A มีระยะห่างจาก นาย B
= sqrt((2-1)**2 + (0-2)**2 + (1-0)**2)
= 1.414 หน่วย

นาย A มีระยะห่างจาก นาย C
= sqrt((2-0)**2 + (0-2)**2 + (1-1)**2)
= 2 หน่วย

และนาย B มีระยะห่างจาก นาย C
= sqrt((1-0)**2 + (2-2)**2 + (0-1)**2)
= 1.414 หน่วย

จะได้่ผลลัพธ์ดังนี้
นาย A มีระยะห่างจาก นาย B = 1.414 หน่วย
นาย A มีระยะห่างจาก นาย C = 2 หน่วย
นาย B มีระยะห่างจาก นาย C = 1.414 หน่วย

ดังนั้นถ้าเทียบลักษณะของ ลูกค้าทั้งสามคนนี้
เราก็สามารถบอกได้ว่า
นาย A มีลักษณะใกล้เคียงกับ นาย B แต่ ไม่เหมือน นาย C
และนาย B เองก็อยู่ลักษณะใกล้เคียงกับนาย C ด้วยเช่นกัน

จะเห็นได้ว่า
ระยะห่างของ (A, B) = ระยะห่างของ (B, C)

แต่ แต่ แต่ แต่ แต่ แต่ แต่ แต่ แต่ !

เห็นอะไรไหมครับ ที่แปลกๆ
ความห่างที่ได้ออกมานั้น ถึงแม้จะมีค่าเท่ากัน
แต่มาจากการคำนวณระยะห่างของ Vector ที่มีค่าไม่เหมือนกันเลย
เพราะการคำนวณระยะห่างของระบบ Minkowski นั้น
ไม่ได้สนใจเรื่องของลำดับก่อนหลังของแกน
แต่เป็นการคิดรวมระยะห่างของทุกแกนเข้าด้วยกันเลยนั่นเองครับ

ง่ายแค่นี้เองครัช 🤔🙃

Minkowski เป็นชาวเยอรมันมีชีวิตในช่วง 1864-1909
เป็นทั้งนักคณิตศาสตร์ และนักฟิสิกส์
แถมยังเป็นอาจารย์ของ Einstein
และด้วย Minkowski Distance นี่เอง
นำไปสู่รากฐานของทฤษฎีสัมพันธภาพ
ที่อธิบายเรื่องราวของ Space–Time
โดยต่อมาเป็นที่รู้จักกันในชื่อ “Minkowski spacetime”

================
อธิบายศัพท์เพิ่มเติม
================

Delta คือการหาระยะห่าง
หรือความแตกต่างของข้อมูลเทียบกัน
เช่น Delta(X2, X1) คือนำ X2 มาลบ กับ X1

Gradient คืออัตราการเปลี่ยนแปลงของฟังก์ชัน
เช่น ฟังก์ชัน f(X) โดยที่ X เปลี่ยนแปลงน้อยๆ
จะได้ d(f(x)) / dx
โดยที่เรียก d(f(x)) / dx ได้อีกชื่อว่า Slope นั่นเอง
ยกตัวอย่างเช่น อัตราการเปลี่ยนแปลงของความเร็วรถ
จาก ตำแหน่ง x1 ไปยัง x2
แสดงว่าระยะทางมีการเพิ่มขึ้น = x2-x1
โดยเทียบกับ เวลาที่เปลี่ยนแปลงไปชั่วขณะหนึ่ง
และ Gradient ของความเร็วที่เปลี่ยนแปลง
ต่อ เวลาที่เปลี่ยนแปลงชั่วขณะหนึ่ง ก็คือ ความเร่งนั่นเอง

=========================
ประโยชน์ของ Minkowski Distance
=========================

อาทิเช่น
– ศึกษาและ อธิบายทฤษฏีสัมพันธภาพ
– ใช้ในระบบการแก้สมการที่มี Infinite Solution
(Underdetermined systems)
– ใช้การการคำนวณเล่นหมากรุก !
– ดูความแตกต่างของข้อมูลกลุ่ม Discrete
– ตรวจดูความแตกต่างของรูปร่างโมเลกุล
– การค้นหาคนที่มีพฤติกรรมเหมือนกลุ่มใดกลุ่มหนึ่ง
– การนำเสนอสินค้าที่ใกล้เคียงกับคนแต่ละกลุ่ม
– Classification Model เช่น KNN ใช้การวัดระยะห่างเข้ามาช่วยทำนาย
– การจัดกลุ่มลูกค้า
– หาความคล้ายกันของชื่อคน
– เช็คคุณภาพของข้อความ
– การค้นหาเอกสาร
– การค้นหา Intent ของ Chatbot
– เช็คความเหมือนกันของรูปภาพ
– การค้นหาคนที่มีพฤติกรรมเหมือนกลุ่มใดกลุ่มหนึ่ง
– การแนะนำสินค้าโดยอิงจากความใกล้เคียงกันของกลุ่ม
– การส่งแคมเปญการตลาดให้แต่ละกลุ่ม
– การทำโปรไฟลล์ลูกค้า
– ใช้เป็น 1 ใน ตัววัดประสิทธิภาพโมเดลในโจทย์ปัญหา Multilabel-Classification
– และอื่นๆอีกมากมาย

=========================
ขอบคุณทุกท่านที่ติดตามครับ
ฝากไลค์ แชร์ คอมเมนท์ เพื่อเป็นกำลังใจ
Made with Love ❤️ by Boyd
=========================

Series นี้ออกแบบมาให้เพื่อนๆที่สนใจในเรื่องของ Data หรือเพื่อนๆที่ทำงานสาย Data แต่มีเวลาจำกัดได้อ่านกันครับ โดยเนื้อหาอาจจะมีสลับกันไปทั้งในเรื่องของความง่าย และยาก รวมถึงเนื้อหาที่หลากหลายทั้ง Coding, Math, Data, Business, และ Misc
– Feedback กันเข้ามาได้นะครับ ว่าชอบหรือไม่ชอบอย่างไร เพื่อการปรับปรุง Content ให้ดียิ่งขึ้น
– หากผิดพลาดประการใดต้องขออภัยมา ณ ที่นี้ด้วยนะครับ
– ท่านใดมีประสบการณ์การใช้งาน สามารถแชร์ให้เพื่อนๆอ่านได้เลยนะครับ

#BigDataRPG#DataScienceวันละตอน#MinkowskiDistance

Day 03 – Manhattan Distance

ลองเขียน Data Series วันละตอนเนาะ ครบ 1 ปีเราจะมี 365 เรื่องให้อ่านกัน ^^

==============================
ถ้าพูดถึง Manhattan เรานึกถึงอะไร !? 🤔
==============================

บางท่านอาจจะนึกถึงย่านที่ผู้คนต่างดื่มกาแฟกันอย่างหนักหน่วง
ถึงมีการเล่าว่ากลิ่นในแม่น้ำ Manhattan นั้นเต็มไปด้วยกลิ่นกาแฟ
(ที่มาจากกลุ่มลูกค้าที่ไปปลดทุกข์เบากันนี่แหละ 😱 !!!! )

ถ้าเป็นในเรื่องของ Data หลายๆคนคงเคยได้ยิน
ฟังก์ชันที่ใช้ในการคำนวณระยะทางของรถแทกซี่ที่วิ่งจากที่หนึ่งไปยังอีกที่หนึ่งซึ่งเราคำนวนระยะห่างของ Taxi กับเป้าหมาย
ได้โดยการวัดระยะของแยกต่างๆ
และแยกนั้นไม่ใช่ที่ไหน
นั่นคือเมือง Manhattan นั่นเองครับ !
ซึ่งเมือง Manhattan เนี่ยมีผังเมืองที่เป็นคล้ายๆ Grid
แยกเยอะแยะเต็มไปหมด
และเป็นหนึ่งในเมืองที่ใหญ่มากๆๆๆ
ใหญ่แค่ไหนไปชมกันที่ link ด้านล่าง

Link: ภาพเมือง Manhattan Link

ทีนี้เวลาเค้าวัดระยะ เค้าใช้จำนวนแยกเป็นตัววัดระยะทางไง !
ถ้ารถ Taxi กับ เป้าหมายอยู่ห่างกัน 5 แยก
เราก็คำนวณระยะห่างง่ายๆได้ว่าระยะห่าง เท่ากับ 5 หน่วย
และเป็นที่มาของวิธีวัดที่ชื่อว่า Manhattan Distance
ในทางคณิตศาสตร์นั้น Manhattan Distance
จัดอยู่ในหมวดของการวัดระยะห่างชนิดที่เรียกว่า
L1 distance หรือ L1-Norm Distance
ซึ่งการจะทำความเข้าใจวิธีวัดในรูปแบบคณิตศาสตร์นั้น
แอดเองขอเกริ่นแบบง่ายๆละกันนะครับ
เพราะจะต้องเข้าใจในเรื่องของ

พีชคณิตเชิงเส้นหรือ Linear Algebra !!! 🙃

เรียนกัน ม4. ไง ทำเป็นจำไม่ได้ !!!!!!!!!!!!!!!!

================
Manhattan Distance
================

เอาล่ะเริ่มจินตนาการภาพตามแอดนะ
จินตนาการว่าเราเป็นนกกำลังบินบนท้องฟ้า
แล้วมองผังเมืองจากด้านบนลงมา
เราจะเห็นผังเมืองเป็นเหมือนสี่เหลี่ยมที่มีขนาดใหญ่มากๆๆๆ !!
จากนั้นจินตนาการต่อถึงรถ Taxi คันหนึ่งจอดอยู่
และที่อีกฝากหนึ่งของเมือง
ก็มีคนกำลังรอรถ Taxi

ถ้าเราเป็นคนขับ Taxi เราจะต้องทำอย่างไรถึงไปรับลูกค้าได้ !?

ก็ขับรถไปสิ
แน่นอนครับว่าเราต้องขับรถตามถนนใช่ไหมเอ่ย
ถ้าลูกค้าอยู่ข้างหน้าเรา
เราก็แค่ขับตรงไปข้างหน้าอย่างเดียว
ดังนั้นถ้าลูกค้าอยู่ข้างหน้าเราแล้วห่างไป 3 ช่วงตึก หรือห่างประมาณ 3 แยกแสดงว่าระยะเรากับลูกค้าจะเท่ากับ 3

ถ้าลูกค้าอยู่ข้างหน้าเราแล้วห่างไป 5 ช่วงตึก หรือห่างประมาณ 5 แยก
แสดงว่าระยะเรากับลูกค้าจะเท่ากับ 5

วัดระยะง่ายๆแบบนี้เลยแหละเอ้า

แล้วถ้าลูกค้าอยู่คนละทิศของเมืองเลยล่ะ !?

ยังเก็บภาพเมืองในมุมสูงได้อยู่ใช่ไหมครับ
ภาพด้านล่างที่เราเห็น ถนน คงคล้ายกับ
เส้นที่เทียบได้กับเส้น แกน X และ แกน Y
แกน X เหมือนเส้นถนนที่ลากจากซ้าย ไป ขวา
แกน Y เหมือนเส้นถนนที่ลากจากล่าง ขึ้น บน

เอาล่ะ ถ้าผู้โดยสารเราอยู่ที่ขอบมุมบนขวาของเมือง
และเราขับ Taxi อยู่มุมล่างซ้ายของเมือง

ระยะทางที่สั้นที่สุดที่เราจะไปหาผู้โดยสารได้ เป็นเท่าไหร่
หรือระยะห่างระหว่างเรากับผู้โดยสาร เป็นเท่าไหร่เอ่ย ??

เราก็คงต้องค่อยๆขับรถไปทางขวาเรื่อยๆ
จนสุดขอบของเมือง
ระหว่างนั้นเราก็นับระยะไปด้วย
ว่าขับผ่านไปแล้วกี่ช่วงตึก
เช่นถ้านับช่วงตึกได้ 10 ช่วงตึก
ก็เท่ากับเราเดินทางไปในแกน X = 10 หน่วยด้วยกัน
หลังจากนั้นเราจึงขับรถต่อขึ้นไปด้านบนจนสุดขอบ
ก็จะพบผู้โดยสารที่รอเราอยู่ที่มุมบนขวาของเมือง
ณ จุดนี้เราทำการนับช่วงตึกเช่นเดียวกันถ้านับได้ 5 ช่วงตึก
แสดงว่า เราเดินทางไปในแกน Y = 5 หน่วยด้วยกัน
ดังนั้นผลรวมของระยะทางช่วงตึกทั้งหมด
จะนำมารวมกันเป็นระยะห่างระหว่าง Taxi ไปยังผู้โดยสารนั่นเอง
หรือ X = 10 บวกกับ Y = 5 ผลลัพธ์คือ 15 หน่วยนั่นเองครับ 😀

แล้ว L1-Norm ล่ะ คืออะไรหว่า !?

เป็นเหมือนการหาขนาดของ Vector นั่นเองครับ
แต่ขนาดของ Vector ของ L1-Norm นั้นหาได้จาก
สมมติ X มีขนาด 10 หน่วย
Y มีขนาด 5 หน่วย
เราสามารถเขียนในรูป Vector ได้ว่า
v = [ 10, 5 ]
แล้วขนาดของ Vector แบบ L1-Norm หรือ Manhattan Distance
ก็คือการนำแต่ละค่า ในแต่ละแกน
มาลบกับจุดกำเนิดจุดกำเนิดคือจุด 0, 0 ตามที่เราเรียนมานั่นเอง
ถ้ามี 2 แกน ก็เขียน 0, 0
ถ้ามี 5 แกน ก็เขียน 0, 0, 0, 0, 0
ทีนี้เราค่อยๆวัดระยะห่างทีละแกนของ Vector
เทียบกับจุดกำเนิด
Delta ของ X
หรือระยะของ X จะได้ค่าเท่ากับ
Delta ของ X = 10 – 0 = 10
และ
Delta ของ Y = 5 – 0 = 5
หลังจากนั้นจึงนำค่า Delta ที่ได้ของแต่ละแกนมาทำการบวกรวมกัน
เป็นคำตอบของ การหาขนาด Vector ด้วยวิธี L1-Norm นั่นเองครับ 🙃

แค่จะขับรถ Taxi ไปรับผู้โดยสารยังเกิดเป็นฟังก์ชันในการหาระยะทางได้

==============
อธิบายศัพท์เพิ่มเติม
==============

Delta คือการหาระยะห่าง
หรือความแตกต่างของข้อมูลเทียบกัน
เช่น Delta(X2, X1) คือนำ X2 มาลบ กับ X1

Gradient คืออัตราการเปลี่ยนแปลงของฟังก์ชัน
เช่น ฟังก์ชัน f(X) โดยที่ X เปลี่ยนแปลงน้อยๆ
จะได้ d(f(x)) / dxโดยที่เรียก d(f(x)) / dx ได้อีกชื่อว่า Slope นั่นเอง
ยกตัวอย่างเช่น
อัตราการเปลี่ยนแปลงของความเร็วรถ จาก ตำแหน่ง x1 ไปยัง x2
แสดงว่าระยะทางมีการเพิ่มขึ้น = x2-x1
โดยเทียบกับ เวลาที่เปลี่ยนแปลงไปชั่วขณะหนึ่ง
และ Gradient ของความเร็วที่เปลี่ยนแปลง
ต่อ เวลาที่เปลี่ยนแปลงชั่วขณะหนึ่ง ก็คือ ความเร่งนั่นเอง

=========================
ประโยชน์ของ Manhattan Distance
=========================

อาทิเช่น
– ใช้ในระบบการแก้สมการที่มี Infinite Solution(Underdetermined systems)
– ใช้การการคำนวณเล่นหมากรุก !
– ดูความแตกต่างของข้อมูลกลุ่ม Discrete
– ตรวจดูความแตกต่างของรูปร่างโมเลกุล
– การค้นหาคนที่มีพฤติกรรมเหมือนกลุ่มใดกลุ่มหนึ่ง
– การนำเสนอสินค้าที่ใกล้เคียงกับคนแต่ละกลุ่ม
– Classification Model เช่น KNN ใช้การวัดระยะห่างเข้ามาช่วยทำนาย
– และอื่นๆอีกมากมาย

=========================
ขอบคุณทุกท่านที่ติดตามครับ
ฝากไลค์ แชร์ คอมเมนท์ เพื่อเป็นกำลังใจ
Made with Love ❤️ by Boyd
=========================

Series นี้ออกแบบมาให้เพื่อนๆที่สนใจในเรื่องของ Data
หรือเพื่อนๆที่ทำงานสาย Data แต่มีเวลาจำกัดได้อ่านกันครับ
โดยเนื้อหาอาจจะมีสลับกันไปทั้งในเรื่องของความง่าย และยาก
รวมถึงเนื้อหาที่หลากหลายทั้ง Coding, Math, Data, Business, และ Misc- Feedback กันเข้ามาได้นะครับ ว่าชอบหรือไม่ชอบอย่างไร
เพื่อการปรับปรุง Content ให้ดียิ่งขึ้น

– หากผิดพลาดประการใดต้องขออภัยมา ณ ที่นี้ด้วยนะครับ
– ท่านใดมีประสบการณ์การใช้งาน สามารถแชร์ให้เพื่อนๆอ่านได้เลยนะครับ

#BigDataRPG#DataScienceวันละตอน#ManhattanDistance

DAY 02 – Jaccard Similarity

เกริ่นนำ :

ลองเขียน Data Series วันละตอนเนาะ
ครบ 1 ปีน่าจะมี 365 เรื่อง ^^
เป็นเรื่องสั้นๆ อาจจะไม่ยาวมากนะครัช
แต่อ่านแล้วน่าจะเห็นภาพ และการนำไปใช้งานได้บ้าง

=========================
ว่าด้วยการวัดข้อมูลที่เป็น Set กันบ้าง
=========================

ในงานด้าน Data Science หรือด้าน Data ที่เกี่ยวข้องหลายคน
อาจจะรู้จักเครื่องมือ หรือ ฟังก์ชันที่ใช้วัดระยะมาหลากหลายตัว
บางตัวสามารถวัดระยะกับข้อมูลที่เป็น ตัวเลขได้
บางตัวสามารถวัดระยะกับข้อมูลที่ไม่ใช่ตัวเลขได้
อย่างเช่นที่เรารู้จักไปก่อนหน้า
นั่นคือ Hamming Distance
ซึ่งช่วยเราวัดระยะ หรือวัดความเหมือน หรือความแตกต่างของแต่ละคนได้
แต่ Hamming Distance นั้นเราต้องแปลงข้อมูลให้เป็น Binary
และข้อมูลที่เปรียบเทียบนั้นต้องมีขนาดเท่ากัน
หลังจากนั้นถึงสามารถทำข้อมูลมาวัดความเหมือน หรือความแตกต่างกันได้

แต่ถ้าข้อมูลของเราไม่ได้เป็น Binary ล่ะ !???

ยกตัวอย่างเช่น
หากข้อมูลที่เรามีเป็นแบบนี้
นาย A ซื้อสินค้า { แอปเปิ้ล }
นาย B ซื้อสินค้า { ส้ม, กล้วย }
นาย C ซื้อสินค้า { แอปเปิ้ล, ส้ม }
(คล้ายๆ เดิมเลยเนาะ) ! 🤨

============
Jaccard Similarity
============


ทีนี้เวลาเราหาระยะห่างโดยใช้ Jaccard Similarity
เราจะใช้เรื่องของ Set เข้ามาช่วยในการคำนวนจากสูตร
J(A,B) = | Intersect(A, B) | / | Union(A, B) |

ทำความเข้าใจสูตรกันก่อน
| Intersect(A, B) |
คือดูว่าข้อมูลของนาย A และนาย B มีสินค้าไหนที่เหมือนกันบ้าง
และมีจำนวนกี่ชิ้น โดยนับแบบ Unique item คือไม่นับตัวซ้ำ

| Union(A, B) |
คือดูว่าข้อมูลของนาย A และนาย B มีข้อมูลรวมกันจำนวนกี่ชิ้นโดยนับแบบ Unique item คือไม่นับตัวซ้ำ และมีจำนวนกี่ชิ้นหลังจากนั้นจึงนำค่าที่ได้จากทั้งคู่มาหารกันเพื่อได้ค่า Jaccard Similarity !!!
แท่น แท่น แท๋นนนนน 😀

มาลองคำนวนกันดู 🙂

นาย A ซื้อสินค้า { แอปเปิ้ล }
นาย B ซื้อสินค้า { ส้ม, กล้วย }
นาย C ซื้อสินค้า { แอปเปิ้ล, ส้ม }


คิดนาย A และ B
| Intersect(A, B) | = 0 (ไม่มีอะไรตรงกันเลย)
| Union(A, B) | = 3 (พบ item 3 ชนิด)
J(A, B) = 0/3 = 0 (นาย A เหมือน นาย B 0%)

คิดนาย A และ C
| Intersect(A, C) | = 1 (ตรงกันแค่แอปเปิ้ล)
| Union(A, C) | = 2 (พบ item 2 ชนิด)
J(A, C) = 1/2 = 0.5 (นาย A เหมือน นาย C 50%)

คิดนาย B และ C
| Intersect(B, C) | = 1 (ตรงกันแค่ส้ม)
| Union(B, C) | = 3 (พบ item 3 ชนิด)
J(B, C) = 1/3 = 0 (นาย B เหมือน นาย C 33.3%)

ถึงจุดนี้มาลองดูผลลัพธ์อีกทีครับ

นาย A, นาย B เหมือนกัน = 0.00 %
นาย A, นาย C เหมือนกัน = 50.0 % 🤨!!
นาย B, นาย C เหมือนกัน = 33.3 %

เห็นความแตกต่างของผลลัพธ์เมื่อเทียบกับ Hamming ไหมเอ่ยครับ !!!

ให้เวลาเพื่อนๆนึกก่อน !!

อันนี้ผลของ Hamming Distance ครับ
นาย A, นาย B เหมือนกัน = 0.00 %
นาย A, นาย C เหมือนกัน = 66.6 %
นาย B, นาย C เหมือนกัน = 33.3 %

นึกออกหรือยังเอ่ย !!

.

.

.

.

งั้นเฉลยละน้าาาา

เราจะเห็นว่า Hamming Distance
เราต้องทำการเรียงข้อมูลแต่ละ item ให้ตรงก่อน
ถูกไหมเอ่ย !
และทำการเช็คแต่ละตำแหน่งว่าตรงกันหรือไม่
ถึงนับเป็นคะแนนความแตกต่าง
และการวัด Hamming Distance นั้นจะต้องวัดจากจำนวน item ที่เท่ากัน
เช่นในระบบของเรามีสินค้า 5 ชิ้น
Array เราก็จะมีขนาด 5
ดังนั้น ส่วนของการคตำนวนจึงเท่ากับ 5
เป็นการคิดความเหมือนโดยอิงจากระบบ Global
หรือมองภาพรวมของระบบ

ส่วน Jaccard Similarity นั้นจะเห็นว่าเป็นการคิดแบบ Set แบบ Pair คู่ จากตัวอย่าง
คิดนาย A และ C | Intersect(A, C) | = 1 (ตรงกันแค่แอปเปิ้ล)
| Union(A, C) | = 2 (พบ item 2 ชนิด)
J(A, C) = 1/2 = 0.5 (นาย A เหมือน นาย C 50%)

จะเห็นว่าพบ item เพียงแค่ 2 ชนิดทำให้ตัวหารมีค่าขนาด Array เพียงแค่ 2
ซึ่งไม่ได้ Represent หรือสื่อถึงจำนวนที่แท้จริงทั้งหมดของระบบ
เช่นถ้าเรามี 5 ก็จะคิดแค่ 2
ซึ่งจริงๆ ถ้าเรารู้ว่าระบบเรามี 5 items
ก็อาจจะ modify สมการของ Union ให้เป็น 5 ได้
(Math ไม่ยากงับ ถ้าเราเข้าใจที่มาก็ modify ได้แบบเข้าใจ)

ทีนี้เราจะเห็นว่า Hamming Distance ข้อมูลต้องจัดในรูป Binary Vector ก่อนส่วน Jaccard Similarity นั้นสามารถคิดได้จาก Set ของ Item โดยตรงเลย
แล้วถ้า Set ของเราไม่ได้เป็นข้อมูลชนิด Discrete ได้ไหม

* Discrete คือข้อมูลที่ไม่ได้เป็นตัวเลขที่หา Ratio ได้
เช่น
จำนวนนักศึกษาในห้อง (นักศึกษาเป็นเศษส่วนไม่ได้)
หรือหน้าของลูกเต๋าที่ทอยออกมาได้ (หน้าลูกเต๋าออกมาเป็น 1/9 ไม่ได้ ถ้าไม่ได้ทอยแรงจนลูกเต๋าแตกอะนะ !)

สำหรับเจ้า Jaccard Similarity
ยังสามารถคำนวนหาความเหมือน หรือแตกต่างกันจากข้อมูลที่เป็น Ratio
ได้ด้วยนะเออ เรียกว่า Probability Jaccard
Link Paper: https://academic.oup.com/sysbio/article-pdf/45/3/380/19501760/45-3-380.pdf
และเจ้าฟังก์ชันวัดความเหมือนนี้ยังมีแตกแยกย่อยอีกมากมายเลยล่ะ 😀

====================
ประโยชน์ของ Jaccard Similarity
====================

อาทิเช่น
– การจัดกลุ่มลูกค้า
– หาความคล้ายกันของชื่อคน
– เช็คคุณภาพของข้อความ
– การค้นหาเอกสาร
– การค้นหา Intent ของ Chatbot
– เช็คความเหมือนกันของรูปภาพ
– การค้นหาคนที่มีพฤติกรรมเหมือนกลุ่มใดกลุ่มหนึ่ง
– การนำเสนอสินค้าที่ใกล้เคียงกับคนแต่ละกลุ่ม
– การแนะนำสินค้าโดยอิงจากความใกล้เคียงกันของกลุ่ม
– การส่งแคมเปญการตลาดให้แต่ละกลุ่ม
– การทำโปรไฟลล์ลูกค้า
– ใช้เป็น 1 ใน ตัววัดประสิทธิภาพโมเดลในโจทย์ปัญหา Multilabel-Classification
– และอื่นๆอีกมากมาย

=========================
ขอบคุณทุกท่านที่ติดตามครับ
ฝากไลค์ แชร์ คอมเมนท์ เพื่อเป็นกำลังใจ
Made with Love ❤️ by Boyd
=========================

Series นี้ออกแบบมาให้เพื่อนๆที่สนใจในเรื่องของ Data
หรือเพื่อนๆที่ทำงานสาย Data แต่มีเวลาจำกัดได้อ่านกันครับ
โดยเนื้อหาอาจจะมีสลับกันไปทั้งในเรื่องของความง่าย และยาก
รวมถึงเนื้อหาที่หลากหลายทั้ง Coding, Math, Data, Business, และ Misc-

Feedback กันเข้ามาได้นะครับ ว่าชอบหรือไม่ชอบอย่างไร
เพื่อการปรับปรุง Content ให้ดียิ่งขึ้น

– หากผิดพลาดประการใดต้องขออภัยมา ณ ที่นี้ด้วยนะครับ
– ท่านใดมีประสบการณ์การใช้งาน สามารถแชร์ให้เพื่อนๆอ่านได้เลยนะครับ

#BigDataRPG #DataScienceวันละตอน #JaccardSimilarity

Day 01 – Hamming Distance

เกริ่นนำ :

ลองเขียน Data Series วันละตอนเนาะ
ครบ 1 ปีน่าจะมี 365 เรื่อง ^^
เป็นเรื่องสั้นๆ อาจจะไม่ยาวมากนะครัช
แต่อ่านแล้วน่าจะเห็นภาพ และการนำไปใช้งานได้บ้าง

==================
ว่าด้วยเรื่องของการวัดระยะ
==================

คงปฎิเสธได้ยากในการทำงานสาย Data
ว่าในแทบทุกวันเรามักจะอยู่กับข้อมูล
และข้อมูลเองก็มีทั้งชนิดที่เป็นทั้งตัวเลข และไม่ใช่ตัวเลข
แน่นอนว่าเพื่อนๆอาจจะคุ้นกับข้อมูลที่เป็นตัวเลขกัน
ซึ่งข้อมูลที่เป็นตัวเลข เราก็คงคำนวณได้ไม่ยากนัก
หรือสามารถคำนวนใจใจได้เลย

เช่น
นาย A โทรศัพท์ นาน 2 นาที
นาย B โทรศัพท์ นาน 2 นาที 1 วินาที
นาย C โทรศัพท์ นาน 1 นาที

ก็แสดงว่านาย A และ นาย B มีความใกล้กันในมุมมองของเวลาที่ใช้ในการโทรศัพท์

แต่กลับกัน
นาย A และ นาย B มีความไกลกันจากนาย C ในมุมมองของเวลาที่ใช้ในการโทรศัพท์

ทีนี้ถ้าข้อมูลไม่ใช่ตัวเลข เราจะคิดอย่างไรดี !?

ก็คงต้องหา logic ต่างๆมาช่วยหาคำตอบเช่น
หากข้อมูลที่เรามีเป็นแบบนี้
นาย A ซื้อสินค้า { แอปเปิ้ล }
นาย B ซื้อสินค้า { ส้ม, กล้วย }
นาย C ซื้อสินค้า { แอปเปิ้ล, ส้ม }

โดยที่เราสนใจเฉพาะการเกิดของสิ่งของที่ถูกซื้อ
ถ้าเราแทน { แอปเปิ้ล, ส้ม, กล้วย }
ด้วยตัวเลข [ 1, 1, 1 ]
โดยที่เลข 1 แสดงถึงการซื้อสินค้าตำแหน่งนั้นๆไปและเลข 0 แสดงว่าไม่พบข้อมูลการซื้อสินค้าชนิดนั้นๆเราสามารถจัดรูปการเขียนได้ใหม่เป็น
นาย A ซื้อสินค้า [ 1, 0, 0 ]
นาย B ซื้อสินค้า [ 0, 1, 1 ]
นาย C ซื้อสินค้า [ 1, 1, 0 ]

แล้วเราจะวัดอย่างไรต่อดีน้าา !???

=============
Hamming Distance
=============

Hamming Distance เป็นเครื่องมือวัดระยะรูปแบบหนึ่ง
ที่ช่วยเราวัดข้อมูลที่มีลักษณะเป็น Binary Vector หรือ { 0, 1 }
(คือมีข้อมูลแค่ 2 ชนิด ศูนย์ และหนึ่ง)
ดูแล้วก็คล้ายๆกับเลขบิทหรือเลขฐานสองเลยเนาะ !
โดยวิธีการวัดความใกล้กันนั้น
ถ้าข้อมูลของนาย X = [ 1, 1, 1 ]
ถ้าข้อมูลของนาย Y = [ 1, 1, 1 ]
ดูด้วยตาก็คงเทียบได้เลยว่าตรงกันเป๊ะๆ
มี 1 เหมือนกันทั้งค่า และตำแหน่ง

ทีนี้กลับมาดูกันที่ความห่างกันของ นาย A และนาย B กันบ้าง
นาย A = [ 1, 0, 0 ]
นาย B = [ 0, 1, 1 ]
เริ่มต้นโดยทำการ Check ทีละตำแหน่งว่ามีตัวไหนต่างกันบ้าง
ปรากฎว่า ต่างกันทุกตำแหน่งเลย !!!
นาย A, นาย B ต่างกัน = 3

ลองคำนวนทั้งสามคนดู
นาย A, นาย C ต่างกัน = 1
นาย B, นาย C ต่างกัน = 2
ตอนนี้เราก็รู้ละว่าแต่ละคนมีระยะห่างกันเท่าไหร่
นาย A, นาย B ต่างกัน = 3
นาย A, นาย C ต่างกัน = 1
นาย B, นาย C ต่างกัน = 2

ดังนั้นหากเรา เพิ่มการคำนวนเล็กน้อยลองคิดเป็น %
ความเหมือนเราก็สามารถหาได้โดยหาค่าเฉลี่ยความแตกต่างก่อน
โดยนำจำนวน Items ทั้งหมดมาหาร
นาย A, นาย B ต่างกัน = 3/3
นาย A, นาย C ต่างกัน = 1/3
นาย B, นาย C ต่างกัน = 2/3

จะได้
ความแตกต่างโดยเฉลี่ยต่อตำแหน่ง
นาย A, นาย B ต่างกัน = 1.00
นาย A, นาย C ต่างกัน = 0.33
นาย B, นาย C ต่างกัน = 0.66

เราคิดเป็น % ความเหมือนหรือความใกล้กันโดยนำ 1 มาลบ แล้ว คูณ 100
จะได้
นาย A, นาย B เหมือนกัน = 0.00 %
นาย A, นาย C เหมือนกัน = 66.6 %
นาย B, นาย C เหมือนกัน = 33.3 %

และจากประโยชน์ดังกล่าว
เราเองก็สามารถนำไปใช้งานในมุมมองอื่นๆต่อได้อีกเยอะเลย
อาทิเช่น

– การจัดกลุ่มลูกค้า
– การค้นหาคนที่มีพฤติกรรมเหมือนกลุ่มใดกลุ่มหนึ่ง
– การนำเสนอสินค้าที่ใกล้เคียงกับคนแต่ละกลุ่ม
– การแนะนำสินค้าโดยอิงจากความใกล้เคียงกันของกลุ่ม
– การส่งแคมเปญการตลาดให้แต่ละกลุ่ม
– การทำโปรไฟลล์ลูกค้า
– ใช้เป็น 1 ใน ตัววัดประสิทธิภาพโมเดลในโจทย์ปัญหา Multilabel-Classification
– ใช้วัด Error จากการสื่อสาร
– และอื่นๆอีกมากมาย

=========================
ขอบคุณทุกท่านที่ติดตามครับ
ฝากไลค์ แชร์ คอมเมนท์ เพื่อเป็นกำลังใจ
Made with Love ❤️ by Boyd
=========================

Series นี้ออกแบบมาให้เพื่อนๆที่สนใจในเรื่องของ Data
หรือเพื่อนๆที่ทำงานสาย Data แต่มีเวลาจำกัดได้อ่านกันครับ
โดยเนื้อหาอาจจะมีสลับกันไปทั้งในเรื่องของความง่าย และยาก
รวมถึงเนื้อหาที่หลากหลายทั้ง Coding, Math, Data, Business, และ Misc-

Feedback กันเข้ามาได้นะครับ ว่าชอบหรือไม่ชอบอย่างไร
เพื่อการปรับปรุง Content ให้ดียิ่งขึ้น

– หากผิดพลาดประการใดต้องขออภัยมา ณ ที่นี้ด้วยนะครับ
– ท่านใดมีประสบการณ์การใช้งาน สามารถแชร์ให้เพื่อนๆอ่านได้เลยนะครับ

#BigDataRPG #DataScienceวันละตอน #HammingDistance