File size: 2,119 Bytes
edc4276
946af09
01e4bba
 
c4d5407
 
946af09
6868cdb
401d1a7
946af09
 
edc4276
946af09
 
cabce56
a4492f7
85af53b
78e9b61
 
 
 
 
 
 
 
85af53b
ff3aa08
78e9b61
 
 
 
 
 
 
 
 
 
 
a4492f7
ff3aa08
85af53b
c18e3ad
946af09
 
577a126
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
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')
df = df.dropna()

# 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)

# 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.")