首页 > 解决方案 > 如何解决 c = cov(x, y, rowvar) RuntimeWarning:python 3.8 中切片错误的自由度 <= 0?

问题描述

我正在按照教程从以下链接在 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)

在此处输入图像描述

有人可以帮我解决这个问题吗?

标签: pythonpandasnumpyrecommendation-enginepython-3.8

解决方案


我认为问题是不可能计算corrwith阿甘正传和电影 X 之间的 Pearson 相关性(默认相关方法),除非至少有 2 个用户同时评价了阿甘正传和电影 X。你会收到警告,因为数据很可能不满足所有电影的条件。

实际上,您可以对评级矩阵进行一些过滤:

  • 删除未评价《阿甘正传》的用户。

    user_movie_rating = user_movie_rating[user_movie_rating.get('Forrest Gump (1994)').notnull()]
    
  • 删除没有至少 2 个评分的电影。在此之后,所有电影将至少有 2 个来自也评价过《阿甘正传》的用户的评分,因为在上一步之后,每个人都评价过《阿甘正传》。

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

推荐阅读