Skip to main content

Similarity Matrix in Machine Learning Explained


The technique used here is generally called Similarity-Based Recommendation or Nearest-Neighbor Recommendation. The matrix itself is called a Similarity Matrix. The fact that it is stored as a Compressed Sparse Matrix is an implementation detail used to save memory and improve performance.


1. Similarity Matrix (Core ML Concept)

A similarity matrix stores how similar every pair of movies is.

Avatar Titanic Alien
Avatar 1.00 0.42 0.87
Titanic 0.42 1.00 0.21
Alien 0.87 0.21 1.00

Each value represents the similarity between two movies.

  • 1.0 = Identical movie (itself)
  • 0.9 = Very similar
  • 0.5 = Moderately similar
  • 0.1 = Barely similar
  • 0.0 = Not similar

Similarity matrices are commonly used in:

  • Content-Based Filtering
  • Item-Based Collaborative Filtering
  • k-Nearest Neighbors (k-NN) Recommendation Systems

2. Compressed Sparse Matrix (Storage Technique)

A Sparse Matrix is a matrix where most values are zero. Instead of storing every value, only the non-zero values and their positions are stored.

Normal Matrix

1.0  0.0  0.0  0.8
0.0  1.0  0.0  0.0
0.0  0.0  1.0  0.0
0.8  0.0  0.0  1.0

Sparse Representation

(Row, Column, Value)

(0,0,1.0)
(0,3,0.8)
(1,1,1.0)
(2,2,1.0)
(3,0,0.8)
(3,3,1.0)

This representation dramatically reduces memory usage when most matrix entries are zero.

Common sparse formats include:

  • CSR (Compressed Sparse Row) 
  • CSC (Compressed Sparse Column)
  • COO (Coordinate Format)

3. How is the Similarity Matrix Created?

The similarity matrix is usually computed using one of the following similarity metrics:

  • Cosine Similarity 
  • Pearson Correlation
  • Jaccard Similarity
  • Euclidean Distance (converted into similarity)

For movie recommendation systems, Cosine Similarity is the most popular choice.


Overall Pipeline

Movie Features
      │
      ▼
Vector Representation
(TF-IDF, Embeddings, Ratings, etc.)
      │
      ▼
Cosine Similarity
      │
      ▼
Similarity Matrix
      │
      ▼
Store as Compressed Sparse Matrix (CSR)
      │
      ▼
Load Matrix
      │
      ▼
Find Most Similar Movies

Python Code (using Compressed Sparse Row (CSR))


import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from scipy.sparse import csr_matrix, save_npz, load_npz

# --------------------------------------------------
# Sample Movie Dataset
# (Replace this with pd.read_csv("movies.csv") later)
# --------------------------------------------------

movies = pd.DataFrame({
    "title": [
        "Avatar",
        "Titanic",
        "Alien",
        "Avengers",
        "The Notebook"
    ],

    "genre": [
        "Action Adventure Sci-Fi",
        "Romance Drama",
        "Sci-Fi Horror",
        "Action Superhero Sci-Fi",
        "Romance Drama"
    ],

    "overview": [
        "A marine explores Pandora and fights for the Na'vi.",
        "A tragic love story aboard a sinking ship.",
        "A deadly alien hunts a spaceship crew.",
        "Earth's heroes unite to save humanity.",
        "A romantic love story across many years."
    ]
})

# --------------------------------------------------
# Combine Features
# --------------------------------------------------

movies["features"] = (
    movies["genre"] + " " +
    movies["overview"]
)

# --------------------------------------------------
# Convert text into TF-IDF vectors
# --------------------------------------------------

vectorizer = TfidfVectorizer(stop_words="english")

feature_matrix = vectorizer.fit_transform(movies["features"])

# --------------------------------------------------
# Compute Cosine Similarity
# --------------------------------------------------

similarity = cosine_similarity(feature_matrix)

# --------------------------------------------------
# Convert to CSR Matrix
# --------------------------------------------------

csr_similarity = csr_matrix(similarity)

# --------------------------------------------------
# Save CSR Matrix
# --------------------------------------------------

save_npz("similarity_matrix.npz", csr_similarity)

print("CSR similarity matrix saved.")

# --------------------------------------------------
# Load CSR Matrix
# --------------------------------------------------

loaded_similarity = load_npz("similarity_matrix.npz")

print("CSR matrix loaded.")

# --------------------------------------------------
# Recommendation Function
# --------------------------------------------------

def recommend(movie_title, top_n=5):

    if movie_title not in movies["title"].values:
        print("Movie not found.")
        return

    index = movies[movies["title"] == movie_title].index[0]

    scores = loaded_similarity[index].toarray().flatten()

    similar_indices = scores.argsort()[::-1]

    print(f"\nRecommendations for '{movie_title}':\n")

    count = 0

    for i in similar_indices:

        if i == index:
            continue

        print(
            f"{movies.iloc[i]['title']}"
            f"   Similarity = {scores[i]:.3f}"
        )

        count += 1

        if count == top_n:
            break


# --------------------------------------------------
# Example
# --------------------------------------------------

recommend(input("Enter a movie name: "))
  

Output

Enter a movie name: Avatar Recommendations for 'Avatar': Avengers Similarity = 0.193 Alien Similarity = 0.117 The Notebook Similarity = 0.000 Titanic Similarity = 0.000


Cosine Similarity in Machine Learning

Cosine Similarity is a mathematical technique used to measure how similar two vectors are by calculating the cosine of the angle between them. Instead of comparing their lengths, it compares their direction.


1. Mathematical Formula

Cosine Similarity = (A · B) / (||A|| × ||B||)
Where:
  • A · B = Dot Product of the vectors
  • ||A|| = Magnitude (Length) of vector A
  • ||B|| = Magnitude (Length) of vector B

The result always lies between -1 and 1.

Cosine Similarity Meaning
1 Exactly the same direction (Highly Similar)
0 No similarity (Perpendicular)
-1 Completely opposite direction

2. Example Using Movies

Suppose we represent movies using features:

Feature Avatar Alien
Action 1 1
Sci-Fi 1 1
Romance 0 0
Horror 0 1

Vector A (Avatar)

A = [1, 1, 0, 0]

Vector B (Alien)

B = [1, 1, 0, 1]

3. Step 1 - Dot Product

Multiply corresponding elements and add them.

A · B

= (1×1) + (1×1) + (0×0) + (0×1)

= 1 + 1 + 0 + 0

= 2

4. Step 2 - Magnitude of Each Vector

Magnitude of Avatar vector

||A||

= √(1² + 1² + 0² + 0²)

= √2

Magnitude of Alien vector

||B||

= √(1² + 1² + 0² + 1²)

= √3

5. Step 3 - Calculate Cosine Similarity

Cosine Similarity

= 2 / (√2 × √3)

= 2 / √6

≈ 0.816

Therefore, Avatar and Alien have a cosine similarity of 0.816, indicating that they are quite similar.


6. Why Is It Called Cosine Similarity?

Imagine every movie as an arrow (vector) starting from the origin.

          B
         /
        /
       / θ
------/----------> A

The angle between the vectors is θ.

Cosine Similarity = cos(θ)

Angle Cosine Meaning
0° 1 Exactly the same direction
90° 0 No similarity
180° -1 Completely opposite

7. Cosine Similarity in a Movie Recommendation System

Each movie is converted into a feature vector.

Movie Feature Vector
Avatar [1, 1, 1, 0, 0]
Alien [1, 0, 1, 1, 0]
Titanic [0, 0, 0, 0, 1]

The cosine similarity between every pair of movies is computed.

Avatar Alien Titanic
Avatar 1.00 0.82 0.11
Alien 0.82 1.00 0.05
Titanic 0.11 0.05 1.00

When a user searches for Avatar, the recommender simply selects the movies having the highest cosine similarity score, such as Alien.

Summary

Cosine Similarity measures the angle between two feature vectors instead of their lengths. It is widely used in recommendation systems because movies with similar genres, keywords, or descriptions point in nearly the same direction in vector space. After calculating pairwise cosine similarities, the results are stored in a similarity matrix, often compressed using CSR (Compressed Sparse Row) format for efficient storage and fast retrieval.



Contact Us

Name

Email *

Message *

Popular Posts

Online Simulator for ASK, FSK, and PSK Signal Generation

Interactive Digital Signal Processing (DSP) Tutorial and Simulator for ASK, FSK, and BPSK modulation techniques. Try our new Digital Signal Processing Simulator!   •   Interactive ASK, FSK, and BPSK tools updated for 2025. Start Now Digital Modulation Visualizer: ASK, FSK, & BPSK Simulator Learn and visualize binary modulation techniques (ASK, FSK, BPSK) in real-time with adjustable carrier and sampling parameters. Perfect for DSP students and engineers. 📡 ASK Simulator 📶 FSK Simulator 🎚️ BPSK Simulator 📚 More Topics ASK Modulator FSK Modulator BPSK Modulator Demodulation More Topics 1. ASK (Ampli...

UGC NET Electronic Science Previous Year Question Papers with Solutions

Download Papers and Solutions Exam Pattern Preparation Tips FAQs More Home / Engineering & Other Exams / UGC NET 2026 PYQ 📊 Exam Highlights: Electronic Science (88) Feature Details Junior Research Fellowship (JRF) ₹37,000 + HRA per month Eligibility M.Sc/M.Tech in Electronics (55%) Validity of Certificate JRF (3 Years) | Lectureship (Lifetime) 📥 Download UGC NET Electronics PDFs Complete collection of previous year question papers, answer keys and explanations for Subject Code 88. Start Downloading 📂 View All Question Papers June 2025 - Question Paper Download PDF June 2025 - Sol...

Direction of Arrival (DoA) Online Simulator (using MUSIC)

Interactive DOA Simulator X-axis XY angle (deg): 45 XZ angle (deg): 30 Noise: 0.05 Y-axis XY angle (deg): 60 YZ angle (deg): 45 Noise: 0.05 Z-axis XZ angle (deg): 60 YZ angle (deg): 30 Noise: 0.05 Estimated DOA (deg): 0 Simulation Workflow and Mathematical Background This simulator demonstrates Direction of Arrival (DOA) estimation using three-axis sensor signals (X, Y, Z), Maximal Ratio Combining (MRC) , and the MUSIC algorithm . It allows interactive control of signal angles and noise for teaching purposes. 1. Signal Generation A pure sinewave signal of frequency f is projected onto three axes using user-defined angles in different planes: X-axis: θ XY , θ XZ Y-axis: θ XY , θ YZ Z-axis: θ XZ , θ YZ Mathematically, for each time sample t : x(t) = s(t) * cos(θ_xy_x) * cos(θ_xz_x) + n_x(t) y(t) = s(t) * sin(θ_xy_y) * cos(θ_yz_y) + n_y(t) z(t) = s(t) * sin(θ_xz_z) * sin(θ_yz_z) + n_z(t) wh...

Constellation Diagrams of ASK, PSK, and FSK (with MATLAB Code + Simulator)

Constellation Diagrams: ASK, FSK, and PSK Comprehensive guide to signal space representation, including interactive simulators and MATLAB implementations. 📘 Overview 🧮 Simulator ⚖️ Theory 📈 Q-function 📚 Resources BASK Modulation Transmits one of two signals: 0 or $\sqrt{E_b}$, representing binary 0 and 1. Simple but sensitive to noise. BFSK Modulation Transmits one of two signals: $\sqrt{E_b}$ on the Y-axis or $\sqrt{E_b}$ on the X-axis. These are orthogonal signals. BPSK Modulation Transmits $+\sqrt{E_b}$ or $-\sqrt{E_b}$ (antipodal signaling). Most efficient binary scheme. ...

OFDM Symbols and Subcarriers Explained

This article explains how OFDM (Orthogonal Frequency Division Multiplexing) symbols and subcarriers work. It covers modulation, mapping symbols to subcarriers, subcarrier frequency spacing, IFFT synthesis, cyclic prefix, and transmission. Step 1: Modulation First, modulate the input bitstream. For example, with 16-QAM , each group of 4 bits maps to one QAM symbol. Suppose we generate a sequence of QAM symbols: s0, s1, s2, s3, s4, s5, …, s63 Step 2: Mapping Symbols to Subcarriers Assume N sub = 8 subcarriers. Each OFDM symbol in the frequency domain contains 8 QAM symbols (one per subcarrier): Mapping (example) OFDM symbol 1 → s0, s1, s2, s3, s4, s5, s6, s7 OFDM symbol 2 → s8, s9, s10, s11, s12, s13, s14, s15 … OFDM sym...

Design of CMOS XOR/XNOR Gates

Design of CMOS XOR/XNOR Gates The semiconductor industry has experienced rapid integration of multimedia applications into mobile electronics, leading to very high integration density in CMOS VLSI. As operating frequencies increase, power consumption, speed, silicon area, and reliability become critical considerations. The XOR-XNOR circuits are fundamental building blocks in arithmetic circuits (Full Adders, Multipliers), compressors, comparators, parity checkers, code converters, error-detecting/correcting codes, and phase detectors. Their performance directly impacts the complex circuits they are used in. Design goals include full output voltage swing, low power consumption, reduced transistor count, minimal delay, and simultaneous non-skewed outputs. Static Logic (Static CMOS) Stat...

DSB-SC Modulation and Demodulation

📘 Overview 🧮 DSB-SC Modulator 🧮 DSB-SC Detector 🧮 Comparisons 🧮 Q & A Summary 📚 Further Reading Double-sideband suppressed-carrier transmission (DSB-SC) is transmission in which frequencies produced by amplitude modulation (AM) are symmetrically spaced above and below the carrier frequency and the carrier level is reduced to the lowest practical level, ideally being completely suppressed. In the DSB-SC modulation, unlike in AM, the wave carrier is not transmitted; thus, much of the power is distributed between the sidebands, which implies an increase of the cover in DSB-SC, compared to AM, for the same power use. DSB-SC transmission is a special case of double-sideband reduced carrier transmission. It is used for radio data systems. This model is frequently used in Amateur radio voice communications, especially on High-Frequency bands. Spectrum DSB-SC i...