lsquaremaster's picture
Create app.py
9658bdb
Raw History Blame Contribute Delete
1.64 kB
import numpy as np
import gradio as gr
# Create a toy user-movie ratings matrix (replace this with your real data)
# Rows represent users, columns represent movies
# Use NaN for missing ratings
ratings_matrix = np.array([
[5, 3, 0, 0, 2],
[4, 0, 0, 0, 1],
[1, 1, 0, 0, 0],
[1, 0, 0, 0, 0],
[0, 1, 5, 4, 0],
])
# Collaborative filtering model function
def collaborative_filtering(user_id):
# Get the ratings of the user
user_ratings = ratings_matrix[user_id]
# Calculate the similarity between the user and all other users
similarities = []
for other_user_ratings in ratings_matrix:
similarity = np.dot(user_ratings, other_user_ratings) / (
np.linalg.norm(user_ratings) * np.linalg.norm(other_user_ratings)
)
similarities.append(similarity)
# Find the most similar user (excluding the user itself)
most_similar_user_id = np.argmax(similarities)
# Get the movie ratings of the most similar user
movie_ratings = ratings_matrix[most_similar_user_id]
# Predict the ratings for the user based on the most similar user's ratings
predicted_ratings = np.where(user_ratings == 0, movie_ratings, 0)
# Get the indices of the top recommended movies
top_movie_indices = np.argsort(predicted_ratings)[::-1][:5]
return top_movie_indices.tolist()
# Create a Gradio interface
iface = gr.Interface(
fn=collaborative_filtering,
inputs="number",
outputs="text",
title="Movie Recommendation System",
description="Enter a user ID (0-4) to get movie recommendations.",
)
# Launch the Gradio interface
iface.launch()