Вы можете найти euclidean distance
между вашим новым пользователем и всеми существующими пользователями во фрейме данных и использовать его как меру различия между ними. И, наконец, вернуть пользователя с минимальным отличием. Однако мы должны убедиться, что все ваши функции нормализованы, поскольку мы не хотим, чтобы функции, измеренные в более широких диапазонах, превосходили возможности, измеренные в более мелких диапазонах.
import pandas as pd
import numpy as np
from sklearn import preprocessing
scaler = preprocessing.Normalizer()
df = df_original.drop(["id"], axis=1) # we don't want `id` to participate in dissimilarity measure
scaled_data = scaler.fit_transform(df)
df_scaled = pd.DataFrame(scaled_data, columns= df.columns)
new_user_original = np.array([999999, 50, 1, 72, 160, 4, 2, 5])
new_user = new_user_original[1:len(new_user_original)]
new_user_scaled = scaler.transform(np.expand_dims(new_user, axis=0))
dist_df = pd.DataFrame(columns=["index", "similarity"])
for _, i in df_scaled.iterrows():
dist = np.linalg.norm(i-np.squeeze(new_user_scaled,0))
dist_df.loc[_,:] = [_, dist]
df_original.loc[_,:] = new_user_original # we are appending the new user to the original df
index_most_similar = df_original.loc[dist_df.similaity.idxmin(),"id"]
Надеюсь, это поможет!