#python #pandas #numpy #nlp #tf-idf
Вопрос:
Я использую TF-IDF для создания системы рекомендаций на основе контента, я получаю эту ошибку при попытке реализовать функцию для вывода фактических рекомендаций модели TF-IDF, которую я построил. Приношу извинения за форматирование, я новичок в этом:
# Build a 1-dimensional array with book titles
titles = new_df['Movie Title']
indices = pd.Series(new_df.index, index=new_df['Movie Title'])
# Function that takes in movie title as input and outputs most similar movies
def get_recommendations(title):
# Get the index of the movie that matches the title
idx = indices[title]
# Get the pairwsie similarity scores of all movies with that movie
sim_scores = list(enumerate(cosine_sim[idx]))
# Sort the movies based on the similarity scores
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
# Get the scores of the 10 most similar movies
sim_scores = sim_scores[1:11]
# Get the movie indices
movie_indices = [i[0] for i in sim_scores]
# Return the top 10 most similar movies
return new_df['Movie Title'].iloc[movie_indices]
Next code block:
get_recommendations('The Hangover')
get_recommendations.head(10)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-23-4e788498ba09> in <module>
----> 1 get_recommendations('The Hangover')
2 get_recommendations.head(10)
<ipython-input-22-98000fdd3df8> in get_recommendations(title)
13
14 # Sort the movies based on the similarity scores
---> 15 sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
16
17 # Get the scores of the 10 most similar movies
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Комментарии:
1. Возможно, вам потребуется проверить значение
x[1]
. В этой статье в блоге есть хорошее объяснение: akashmittal.com/valueerror-truth-value-array-ambiguous2. У него возникают проблемы при
<
сравнении типов значений, которые вы пытаетесь отсортировать. На что этоsim_scores
похоже, или вы предпочитаетеindices
серию, из которой она получена?
Ответ №1:
Эта ошибка может быть, когда есть одно и то же название фильма с разным индексом, то есть, допустим, название фильма «Крестный отец», поэтому возможно, что у него есть :
movie title index
The Godfather 0
The Godfather 1
The Godfather 2
Поэтому, чтобы преодолеть эту проблему, удалите повторяющиеся значения из фрейма данных, а затем запустите программу, которую он должен запустить.
new_df.drop_duplicates(subset=['Movie Title'])