Spaces:
Runtime error
Runtime error
File size: 2,259 Bytes
edc4276 946af09 01e4bba c4d5407 946af09 6868cdb 401d1a7 946af09 edc4276 946af09 a4492f7 85af53b 78e9b61 85af53b ff3aa08 78e9b61 a4492f7 ff3aa08 85af53b c18e3ad 946af09 577a126 78e9b61 3246224 f47cfde 3246224 4b6c2b9 3246224 9652cc9 3246224 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
import streamlit as st
import numpy as np
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing.sequence import pad_sequences
import joblib
import pandas as pd
from sklearn.neighbors import NearestNeighbors
from sklearn.preprocessing import StandardScaler
# Load the KNN model
knn_model = joblib.load('knn_model.joblib')
# Load the dataset
df = pd.read_csv('df1.csv')
# Preprocess for KNN
audio_feature_columns = ['danceability', 'energy', 'key', 'loudness', 'mode', 'speechiness',
'acousticness', 'instrumentalness', 'liveness', 'valence', 'tempo',
'duration_ms', 'time_signature']
audio_features = df[audio_feature_columns]
mood_cats = df[['mood_cats']]
mood_cats_df = pd.DataFrame(mood_cats)
# Normalize audio features for KNN
scaler_knn = StandardScaler()
audio_features_scaled_knn = scaler_knn.fit_transform(audio_features)
audio_features_df_knn = pd.DataFrame(audio_features_scaled_knn, columns=audio_feature_columns)
combined_features_knn = pd.concat([mood_cats_df, audio_features_df_knn], axis=1)
# Function for KNN-based recommendation
def recommend_knn(query_index, n_recommendations=5):
distances, indices = knn_model.kneighbors(combined_features_knn.iloc[query_index].values.reshape(1, -1), n_neighbors=n_recommendations)
recommended_songs = df.iloc[indices.flatten()].copy()
# Convert distances to scores
recommended_songs['score'] = 1 / (1 + distances.flatten()) # Inverse of distance
return recommended_songs
# Set up the title of the app
st.title('KNN Recommender App')
# Get song index from user input
song_index_to_recommend = st.number_input('Enter song index:', min_value=0, max_value=len(df)-1, value=0)
# Combine emotion and audio features for recommendation
# combined_features = np.concatenate([emotion, audio_features_scaled_knn[song_index_to_recommend]])
# Get KNN recommendations
knn_recs = recommend_knn(song_index_to_recommend)
# Display KNN recommendations
st.write("KNN Recommendations:")
if not knn_recs.empty:
for index in knn_recs.index:
st.write(f"Song Index: {index}, Title: {df.iloc[index]['track_name']}, Artist: {df.iloc[index]['track_artist']}, Score: {knn_recs.loc[index, 'score']}")
else:
st.write("No recommendations found.") |