Content-based filtering helps recommend items by looking at what you like. It finds similar things based on item features.
Content-based filtering in ML Python
1. Collect features of items (like genre, keywords). 2. Represent items as vectors using these features. 3. For a user, find items similar to those they liked by comparing vectors. 4. Recommend the most similar items.
Features can be simple tags or complex descriptions.
Similarity is often measured using cosine similarity or distance metrics.
# Example: Item features as keywords item1 = ['action', 'adventure'] item2 = ['action', 'thriller'] # Compare similarity based on shared keywords
# Example: Using TF-IDF vectors for item descriptions from sklearn.feature_extraction.text import TfidfVectorizer items = ['fast car racing', 'slow romantic movie'] vectorizer = TfidfVectorizer() vectors = vectorizer.fit_transform(items)
This program shows how to recommend items similar to one the user liked using content-based filtering. It uses text descriptions and cosine similarity.
from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # Sample items with descriptions items = [ 'action adventure hero', 'romantic comedy love', 'action thriller spy', 'romantic drama relationship' ] # User liked item index 0 (action adventure hero) user_liked_index = 0 # Convert item descriptions to vectors vectorizer = TfidfVectorizer() vectors = vectorizer.fit_transform(items) # Calculate similarity of all items to the liked item similarities = cosine_similarity(vectors[user_liked_index], vectors).flatten() # Get indices of items sorted by similarity (excluding the liked item itself) recommended_indices = similarities.argsort()[::-1][1:3] # Print recommended items print('User liked:', items[user_liked_index]) print('Recommended items:') for i in recommended_indices: print(f'- {items[i]} (similarity: {similarities[i]:.2f})')
Content-based filtering only needs data about items, not other users.
It works well when item features are clear and descriptive.
It may recommend items similar to what the user already knows, limiting diversity.
Content-based filtering recommends items by comparing their features.
It uses item descriptions or tags to find similar items.
This method personalizes recommendations based on what the user liked before.
Practice
content-based filtering in recommendation systems?Solution
Step 1: Understand content-based filtering concept
Content-based filtering uses the features of items a user liked to find similar items.Step 2: Compare with other recommendation methods
Unlike collaborative filtering, it does not rely on other users' preferences but on item features.Final Answer:
It recommends items similar to what the user liked before based on item features. -> Option BQuick Check:
Content-based filtering = Recommend similar items [OK]
- Confusing content-based with collaborative filtering
- Thinking recommendations are random
- Assuming popularity drives recommendations
Solution
Step 1: Identify correct data structure for features
Features should be numeric vectors representing item properties, stored in a dictionary keyed by item IDs.Step 2: Check each option
item_features = {'item1': [0.2, 0.8], 'item2': [0.5, 0.5]} uses a dictionary with lists of numbers, suitable for feature vectors. Others are lists or strings, not suitable for numeric features.Final Answer:
item_features = {'item1': [0.2, 0.8], 'item2': [0.5, 0.5]} -> Option DQuick Check:
Features as numeric vectors = item_features = {'item1': [0.2, 0.8], 'item2': [0.5, 0.5]} [OK]
- Using strings instead of numeric vectors
- Using simple lists without keys
- Confusing item labels with features
import numpy as np
item_features = {'A': np.array([1, 0]), 'B': np.array([0, 1]), 'C': np.array([1, 1])}
user_likes = np.array([1, 0])
similarities = {item: np.dot(user_likes, features) for item, features in item_features.items()}
recommended = max(similarities, key=similarities.get)
print(recommended)Solution
Step 1: Calculate dot products for similarity
Dot product with user_likes [1,0]: - A: [1,0]·[1,0] = 1 - B: [1,0]·[0,1] = 0 - C: [1,0]·[1,1] = 1Step 2: Find item with max similarity
Items A and C both have similarity 1, but max() returns the first max key, which is 'A'.Final Answer:
A -> Option CQuick Check:
Max dot product = 'A' [OK]
- Assuming 'C' is chosen because it has more features
- Confusing dot product with sum
- Expecting an error due to dictionary comprehension
item_features = {'X': [1, 0], 'Y': [0, 1]}
user_profile = [1, 0]
similarities = {}
for item in item_features:
similarities[item] = user_profile * item_features[item]
print(similarities)Solution
Step 1: Understand the operation on lists
Multiplying two Python lists with '*' is invalid and causes a TypeError.Step 2: Correct the operation to compute similarity
Use numpy.dot or equivalent to compute dot product between vectors for similarity.Final Answer:
Replace '*' with a dot product function like numpy.dot -> Option AQuick Check:
List multiplication invalid, use dot product [OK]
- Trying to multiply lists directly
- Using '+' which concatenates lists, not similarity
- Ignoring error messages
Solution
Step 1: Understand content-based filtering with genre tags
Content-based filtering uses item features (genres) to find similar items to what the user liked.Step 2: Choose method that compares genre overlap
Counting overlapping genres directly measures similarity between user preferences and candidate movies.Final Answer:
Calculate similarity by counting overlapping genres between user liked movies and candidate movies. -> Option AQuick Check:
Genre overlap similarity = Calculate similarity by counting overlapping genres between user liked movies and candidate movies. [OK]
- Using popularity instead of user preferences
- Confusing collaborative filtering with content-based
- Random recommendations ignoring user data
Ready to prove it?
Pass the test and this pattern moves unknown
