ஆஹா என்னே பொருத்தம் – Cosine Similarity

அன்புடையீர் வணக்கம் !

நம்முடைய தினசரி பணிகளில் ஒப்பிட்டு பார்த்தல் (Similarity check) பலமுறை செய்கிறோம். உணவு அருந்தும்போது சுவை மதிப்பிடறோம். எதோ ஒரு புதிய Gadget வாங்கணும்னா, நமக்கு வேண்டிய வசதிகள் எதுல இருக்குனு அலசி ஆராய்ந்து வாங்குறோம். அதே மாதிரி ஒரு Salesman ஒரு பொருள விற்பனை செய்ய அதோடு தொடர்புடைய மற்ற பொருளின் சிறப்பம்சங்களை சொல்லி ஒப்பிட்டு , ஒரு பொருள விற்பனை செய்யறார். இப்படி பல நேரம் நமக்கு ஒப்பிட்டு பார்க்கும் தருணம் இருக்கு. இந்த ஒப்பிடும் முறைகள, ஒன்றான Cosine Similarity பற்றி காண்போம்.


வருடம் 2020 – இப்போ  ஒரு மடிக்கணினி வாங்கணும். சரினு கடைக்கு சென்று உடனே வாங்கிடுவோமா.!!!  இல்லைல்ல  !!!

அப்போ என்ன செய்யறோம் !!

என்னென்ன மாதிரி இருக்குனு பார்க்குறோம். 

  1. ஒரு விலை [X, X+y ]  ல தேடுவோம்,  Xக்கும் y க்கும்  ஒரு எண் நிரப்புங்க. 
  2. என்ன மாதிரி processor  –  1st gen , 2nd gen , etc …
  3. என்ன அளவு RAM
  4. ஹார்ட் டிஸ்க் அளவு 
  5. அப்புறம் என்ன Camera இருக்கானு பாப்போம், அதுல அது என்ன  அளவு Pixels அதை பாப்போம்
  6. மடிக்கணனி னால  Battery Charge  எவ்ளோ நேரம் நிக்கும்னு பார்ப்போம்.

இன்னும் வேற வசதிகள்/ சௌகரியம்/ அசௌகரியம் அப்படினு பார்ப்போம்.

எடுத்துக்கத்துக்கு 100 மாதிரி மடிக்கணினினு  வச்சிக்கோங்க.

 அப்புறம் 2) 3) 4) 5) … இந்த ஆராய்ச்சிக்கு பிறகு நம்ம ஒரு முடிவு எடுத்து ஒரு மடிக்கணினி வாங்கிட்டோம்னு வச்சுக்கங்க..

இங்க என்ன செய்தோம் !!

நம்ம மனசுல என்னோட கணினி இந்த வசதியெல்லாம் இருக்கனும் அப்படினு ஒரு அனுமானம் செய்து இருந்தோம்.

இது ஒரு Vector-அ கணக்குல சொல்லலாம். அதாவது வேண்டிய வசதிகள்/அம்சங்கள்/features.

அதைமாதிரி கடைகளில் நாம பார்த்த (கற்பனை பண்ணுங்க ) ஒவ்வொரு  மாதிரி கணிணிக்கும் ஒரு Vector ல வசதிகள்/அம்சங்கள்/features,அ சொல்லலாம்.   எல்லா கணினியையும் சேர்த்து சொன்ன Matrix-ல சொல்லலாம்.

சரி ஒரு பக்கம் ஒரு Vector – நாம தேடுற அம்சங்கள். 

இன்னொரு பக்கம் ஒரு Matrix – மற்ற மாதிரிகள் உள்ள அம்சங்கள்.

சில அம்சங்கள் – இருக்கா இல்லயான்னு பார்ப்போம். சிலவற்றை என்ன அளவுல இருக்குனு பார்ப்போம்.

அடுத்து திருமண வரன் பார்க்கும் பொது ஜோதிடர் வச்சி 10 அம்சங்கள் கணிப்பாங்க.

இணையத்தில் காணொலி கண்ட பிறகு, அதை ஒத்த காணொலி நமக்கு  சிபாரிசு செய்யப்படுகிறது. 

“இந்த மாறி பல இடங்களில் நாம் ஒரு _____   மற்ற ______  களிடம் எவ்வளவு ஒத்து போகிறது என்று கணிப்போம்.”

“இந்த மாறி பல இடங்களில் நாம் ஒரு Vector  மற்ற Vector களிடம் எவ்வளவு ஒத்து போகிறது என்று கணிப்போம்.”


கணிதத்தில் ஒப்பிட்டு பார்த்தல் முறைகளில் ஒன்று தான் , Cosine Similarity.
அதற்கான சமன்பாடு இங்கே காண்க:

CosineSimilarity


Cosine Similarity Demo

In [1]:
import numpy as np
In [2]:
features = ['camera is present', 'Processor 64 bit', 'RAM Size in GB', 'Hard Disk Size in TB']
In [3]:
required_laptop_feature = [1, 1, 16, 2]
SNo camera is present Processor 64 bit RAM Size in GB Hard Disk Size in TB
1 1 1 16 2
In [4]:
available_laptop_features = [[1, 1, 8, 1], [1, 0, 32, 2], [1, 1, 8, 2]]
SNo camera is present Processor 64 bit RAM Size in GB Hard Disk Size in TB
1 1 1 8 1
2 1 0 32 2
3 1 1 8 2
In [5]:
feature_vector = np.array(required_laptop_feature).reshape(-1,1)
In [6]:
feature_vector.shape
Out[6]:
(4, 1)
In [7]:
print(feature_vector)
[[ 1]
 [ 1]
 [16]
 [ 2]]
In [8]:
available_laptops_features_matrix = np.asarray(available_laptop_features)
In [9]:
print(available_laptops_features_matrix)
[[ 1  1  8  1]
 [ 1  0 32  2]
 [ 1  1  8  2]]
In [10]:
available_laptops_features_matrix.shape
Out[10]:
(3, 4)

Cosine Similarity

cos(\pmb x, \pmb y) = \frac {\pmb x \cdot \pmb y}{||\pmb x|| \cdot ||\pmb y||}

where
Dot Product is represented as {\pmb x \cdot \pmb y}

Norm of x is represented as ||\pmb x||

In [11]:
norm_of_available_laptops_features_matrix = np.linalg.norm(available_laptops_features_matrix)
In [12]:
norm_of_available_laptops_features_matrix
Out[12]:
34.14674215792775
In [13]:
np.sqrt(sum(sum(available_laptops_features_matrix*available_laptops_features_matrix)))
Out[13]:
34.14674215792775
In [14]:
norm_of_feature_vector = np.linalg.norm(feature_vector)
In [15]:
norm_of_feature_vector
Out[15]:
16.186414056238647
In [16]:
cosine_similarity = np.dot(available_laptops_features_matrix, feature_vector) /(norm_of_available_laptops_features_matrix * norm_of_feature_vector)
In [17]:
cosine_similarity
Out[17]:
array([[0.23882182],
       [0.93538548],
       [0.24244034]])
SNo Cosine Similarity Rank
1 0.23882182 3
2 0.93538548 1
3 0.24244034 2
  • Cosine Similarity value ranges from 0 to 1
  • 1 indicates very high similarity
  • 0 indicates very less similarity
In [ ]:
 

WordPress conversion from Cosine_Similarity.ipynb by nb2wp v0.3.1


மேலும் Cosine Similarity பற்றி சில தகவல்களை , அடுத்த பதிவில் காண்போம்.

தொடரும்…

நன்றி !
இங்ஙனம்
ராஜேஷ்குமார் பொதியப்பன்

gprkumar [at] gmail [dot] com

 

%d bloggers like this: