NicolasHug / Surprise

A Python scikit for building and analyzing recommender systems
http://surpriselib.com
BSD 3-Clause "New" or "Revised" License
6.37k stars 1.01k forks source link

Using Cross Validate with a Pandas Dataframe, running into datatype error #450

Open JackRaines opened 1 year ago

JackRaines commented 1 year ago

Description

from future import (absolute_import, division, print_function, unicode_literals)

import pandas as pd

from surprise import SVD from surprise import dataset from surprise import Reader

reader = Reader() model = SVD() ratings_dict=ratings.to_dict('records') ratings_dict

Example output: [{'userId': 1, 'movieId': 31, 'rating': 2.5, 'timestamp': 1260759144}, {'userId': 1, 'movieId': 1029, 'rating': 3.0, 'timestamp': 1260759179}, {'userId': 1, 'movieId': 1061, 'rating': 3.0, 'timestamp': 1260759182}, {'userId': 1, 'movieId': 1129, 'rating': 2.0, 'timestamp': 1260759185},

df = pd.DataFrame.from_dict(ratings_dict)

You'll need to create a dummy reader

reader = Reader(line_format='user item rating', rating_scale=(1, 5))

Also, a dummy Dataset class

class MyDataset(dataset.DatasetAutoFolds):

def __init__(self, df, reader):

    self.raw_ratings = [(uid, iid, r, None) for (uid, iid, r) in
                        zip(df['userId'], df['movieId'], df['rating'])]
    self.reader=reader

data = MyDataset(df, reader)

cross_validate(model,data,measures=['userId', 'movieId', 'rating'],cv=3)

Error Message: AttributeError: module 'surprise.accuracy' has no attribute 'userid' 1 cross_validate(model,data,measures=['userId', 'movieId', 'rating'],cv=3)

Steps/Code to Reproduce

Before running the above code:

ratings=pd.read_csv('ratings_small.csv') ratings.head()

!pip install scikit-surprise from surprise import Reader, Dataset, SVD from surprise.model_selection import cross_validate

Expected Results

Actual Results

Versions