Как решить c = cov (x, y, rowvar) RuntimeWarning: Степени свободы <= 0 для ошибки среза в Python 3.8? - PullRequest
0 голосов
/ 02 марта 2019

Я следую инструкциям по созданию системы рекомендаций в Python по ссылке ниже.Я использую Python 3.8 для его сборки.

https://stackabuse.com/creating-a-simple-recommender-system-in-python-using-pandas/

import numpy as np
np.seterr(divide='ignore', invalid='ignore')
import pandas as pd
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

ratings_data = pd.read_csv("E:/Python/ml-latest-small//ratings.csv")
ratings_data.head()

movie_names = pd.read_csv("E:/Python/ml-latest-small//movies.csv")  
movie_names.head()

movie_data = pd.merge(ratings_data, movie_names, on='movieId')
movie_data.head()


movie_data.groupby('title')['rating'].mean().head()

movie_data.groupby('title')['rating'].mean().sort_values(ascending=False).head() 

movie_data.groupby('title')['rating'].count().sort_values(ascending=False).head()

ratings_mean_count = pd.DataFrame(movie_data.groupby('title')['rating'].mean())
ratings_mean_count['rating_counts'] = pd.DataFrame(movie_data.groupby('title')['rating'].count())
ratings_mean_count.head()

user_movie_rating = movie_data.pivot_table(index='userId', columns='title', values='rating')
user_movie_rating.head()

forrest_gump_ratings = user_movie_rating['Forrest Gump (1994)']
forrest_gump_ratings.head()

movies_like_forest_gump = user_movie_rating.corrwith(forrest_gump_ratings)

corr_forrest_gump = pd.DataFrame(movies_like_forest_gump, columns=['Correlation'])  
corr_forrest_gump.dropna(inplace=True)  
corr_forrest_gump.head()

Я получаю следующую ошибку из-за этой строки.

movies_like_forest_gump =user_movie_rating.corrwith (forrest_gump_ratings)

enter image description here

Может ли кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 08 апреля 2019

Я полагаю, что проблема в том, что невозможно вычислить корреляцию Пирсона (метод корреляции по умолчанию для corrwith) между Forrest Gump и фильмом X, если нет хотя бы двух пользователей, которые оценили как Forrest Gump, так и фильм X.Вы получаете предупреждение, потому что данные, скорее всего, не удовлетворяют этому условию для всех фильмов.

На практике вы можете выполнить некоторую фильтрацию по матрице оценок:

  • Удалите пользователей, которые не оценили Forrest Gump.

    user_movie_rating = user_movie_rating[user_movie_rating.get('Forrest Gump (1994)').notnull()]
    
  • Удалите фильмы, которые не имеют по крайней мере 2 оценок.После этого все фильмы будут иметь как минимум 2 оценки от пользователей, которые также оценили Forrest Gump, потому что после предыдущего шага все оценили Forrest Gump.

    user_movie_rating = user_movie_rating.dropna(axis='columns', thresh=2)
    
...