def setUp(self): self.dataset = { 'Lisa Rose': { 'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5, 'The Night Listener': 3.0 }, 'Gene Seymour': { 'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 3.5 }, 'Michael Phillips': { 'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0, 'Superman Returns': 3.5, 'The Night Listener': 4.0 }, 'Claudia Puig': { 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'The Night Listener': 4.5, 'Superman Returns': 4.0, 'You, Me and Dupree': 2.5 }, 'Mick LaSalle': { 'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 2.0 }, 'Jack Matthews': { 'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5 }, 'Toby': { 'Snakes on a Plane': 4.5, 'You, Me and Dupree': 1.0, 'Superman Returns': 4.0 } } self.wrapper = DataWrapper(self.dataset)
def __init__(self, data=dict(), numRecommendations=1, db=None, metric="rating", school="gatech"): self.dataset = DataWrapper(instances=data, db=db, school=school, metric=metric) self.updated = False self.sparsedata = None self.sparseifyData() try: self.svd = TruncatedSVD(n_components=numRecommendations) self.model = self.svd.inverse_transform( self.svd.fit_transform(self.sparsedata)) except ValueError: self.svd = None self.model = None raise ValueError("Not enough ratings for predictions")
def __init__(self, data=dict(), numRecommendations=1, db=None, metric="rating", school="gatech"): self.dataset = DataWrapper(instances=data, db=db, school=school, metric=metric) self.updated = False self.sparsedata = None self.sparseifyData() try: self.svd = TruncatedSVD(n_components=numRecommendations) self.model = self.svd.inverse_transform(self.svd.fit_transform(self.sparsedata)) except ValueError: self.svd = None self.model = None raise ValueError("Not enough ratings for predictions")
def setUp(self): self.dataset = { 'Lisa Rose': { 'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5, 'The Night Listener': 3.0 }, 'Gene Seymour': { 'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 3.5 }, 'Michael Phillips': { 'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0, 'Superman Returns': 3.5, 'The Night Listener': 4.0 }, 'Claudia Puig': { 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'The Night Listener': 4.5, 'Superman Returns': 4.0, 'You, Me and Dupree': 2.5 }, 'Mick LaSalle': { 'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 2.0 }, 'Jack Matthews': { 'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5 }, 'Toby': { 'Snakes on a Plane':4.5, 'You, Me and Dupree':1.0, 'Superman Returns':4.0 } } self.wrapper = DataWrapper(self.dataset)
class CollaborativeFilter: #This takes in a matrix def __init__(self, data=dict(), numRecommendations=1, db=None, metric="rating", school="gatech"): self.dataset = DataWrapper(instances=data, db=db, school=school, metric=metric) self.updated = False self.sparsedata = None self.sparseifyData() try: self.svd = TruncatedSVD(n_components=numRecommendations) self.model = self.svd.inverse_transform( self.svd.fit_transform(self.sparsedata)) except ValueError: self.svd = None self.model = None raise ValueError("Not enough ratings for predictions") def getRecommendation(self, instances): if (self.updated): self.sparseifyData() self.model = self.svd.inverse_transform( self.svd.fit_transform(self.sparsedata)) self.updated = False ret = {} for instance in instances: values = {} for feature in instances[instance]: try: row = self.dataset.getRow(instance) column = self.dataset.getColumn(feature) values[feature] = self.model[row][column] except KeyError: values[feature] = None ret[instance] = values return ret def updateValues(self, instances): self.dataset.addData(instances) self.updated = True def forceModelUpdate(self): self.updated = False self.sparseifyData() self.model = self.svd.inverse_transform( self.svd.fit_transform(self.sparsedata)) def sparseifyData(self): data = self.dataset.getData() sparsematrix = sparse.dok_matrix((len(data), len(data[0]))) for i in range(len(data)): for j in range(len(data[i])): if data[i][j] is not None: sparsematrix[i, j] = data[i][j] self.sparsedata = sparsematrix def getSparseData(self): return self.sparsedata def getModel(self): return self.model def getData(self, *args): if len(args) == 2: return self.dataset.getData(args[0], args[1]) else: return self.dataset.getData() def getUpdated(self): return self.updated def getDataDict(self): return self.dataset.getDataDict()
class TestDataWrapper(unittest.TestCase): def setUp(self): self.dataset = { 'Lisa Rose': { 'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5, 'The Night Listener': 3.0 }, 'Gene Seymour': { 'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 3.5 }, 'Michael Phillips': { 'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0, 'Superman Returns': 3.5, 'The Night Listener': 4.0 }, 'Claudia Puig': { 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'The Night Listener': 4.5, 'Superman Returns': 4.0, 'You, Me and Dupree': 2.5 }, 'Mick LaSalle': { 'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 2.0 }, 'Jack Matthews': { 'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5 }, 'Toby': { 'Snakes on a Plane': 4.5, 'You, Me and Dupree': 1.0, 'Superman Returns': 4.0 } } self.wrapper = DataWrapper(self.dataset) def test_create_lookups(self): temp = {} self.assertIsInstance(self.wrapper.getInstanceLookup(), type(temp)) self.assertIsInstance(self.wrapper.getFeatureLookup(), type(temp)) def test_getters(self): temp = {} self.assertIsInstance(self.wrapper.getInstanceLookup(), type(temp)) self.assertNotEqual(self.wrapper.getInstanceLookup(), type(temp)) self.assertIsInstance(self.wrapper.getFeatureLookup(), type(temp)) self.assertNotEqual(self.wrapper.getFeatureLookup(), type(temp)) self.assertEqual(self.wrapper.getDataDict(), self.dataset) self.assertNotEqual( self.wrapper.getData(), [[None], [None], [None], [None], [None], [None], [None]]) def test_add_data(self): tempData = copy.deepcopy(self.wrapper.getData()) tempDataDict = copy.deepcopy(self.wrapper.getDataDict()) instance = { 'Casey': { 'Snakes on a Plane': 5.0, 'Superman Returns': 3.4 } } instance['Lisa Rose'] = {'The Night Listener': 5.0} self.wrapper.addData(instance) self.assertNotEqual(tempDataDict, self.wrapper.getDataDict()) self.assertNotEqual(tempData, self.wrapper.getData()) def test_convert_data(self): self.assertNotEqual( self.wrapper.getData(), [[None], [None], [None], [None], [None], [None], [None]])
class CollaborativeFilter: #This takes in a matrix def __init__(self, data=dict(), numRecommendations=1, db=None, metric="rating", school="gatech"): self.dataset = DataWrapper(instances=data, db=db, school=school, metric=metric) self.updated = False self.sparsedata = None self.sparseifyData() try: self.svd = TruncatedSVD(n_components=numRecommendations) self.model = self.svd.inverse_transform(self.svd.fit_transform(self.sparsedata)) except ValueError: self.svd = None self.model = None raise ValueError("Not enough ratings for predictions") def getRecommendation(self, instances): if(self.updated): self.sparseifyData() self.model = self.svd.inverse_transform(self.svd.fit_transform(self.sparsedata)) self.updated = False ret = {} for instance in instances: values = {} for feature in instances[instance]: try: row = self.dataset.getRow(instance) column = self.dataset.getColumn(feature) values[feature] = self.model[row][column] except KeyError: values[feature] = None ret[instance] = values return ret def updateValues(self, instances): self.dataset.addData(instances) self.updated = True def forceModelUpdate(self): self.updated = False self.sparseifyData() self.model = self.svd.inverse_transform(self.svd.fit_transform(self.sparsedata)) def sparseifyData(self): data = self.dataset.getData() sparsematrix = sparse.dok_matrix((len(data), len(data[0]))) for i in range(len(data)): for j in range(len(data[i])): if data[i][j] is not None: sparsematrix[i, j] = data[i][j] self.sparsedata = sparsematrix def getSparseData(self): return self.sparsedata def getModel(self): return self.model def getData(self, *args): if len(args) == 2: return self.dataset.getData(args[0], args[1]) else: return self.dataset.getData() def getUpdated(self): return self.updated def getDataDict(self): return self.dataset.getDataDict()
class TestDataWrapper(unittest.TestCase): def setUp(self): self.dataset = { 'Lisa Rose': { 'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5, 'The Night Listener': 3.0 }, 'Gene Seymour': { 'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 3.5 }, 'Michael Phillips': { 'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0, 'Superman Returns': 3.5, 'The Night Listener': 4.0 }, 'Claudia Puig': { 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'The Night Listener': 4.5, 'Superman Returns': 4.0, 'You, Me and Dupree': 2.5 }, 'Mick LaSalle': { 'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 2.0 }, 'Jack Matthews': { 'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5 }, 'Toby': { 'Snakes on a Plane':4.5, 'You, Me and Dupree':1.0, 'Superman Returns':4.0 } } self.wrapper = DataWrapper(self.dataset) def test_create_lookups(self): temp = {} self.assertIsInstance(self.wrapper.getInstanceLookup(), type(temp)) self.assertIsInstance(self.wrapper.getFeatureLookup(), type(temp)) def test_getters(self): temp = {} self.assertIsInstance(self.wrapper.getInstanceLookup(), type(temp)) self.assertNotEqual(self.wrapper.getInstanceLookup(), type(temp)) self.assertIsInstance(self.wrapper.getFeatureLookup(), type(temp)) self.assertNotEqual(self.wrapper.getFeatureLookup(), type(temp)) self.assertEqual(self.wrapper.getDataDict(), self.dataset) self.assertNotEqual(self.wrapper.getData(), [[None],[None],[None],[None],[None],[None],[None]]) def test_add_data(self): tempData = copy.deepcopy(self.wrapper.getData()) tempDataDict = copy.deepcopy(self.wrapper.getDataDict()) instance = {'Casey' : { 'Snakes on a Plane': 5.0, 'Superman Returns' : 3.4}} instance['Lisa Rose'] = {'The Night Listener' : 5.0} self.wrapper.addData(instance) self.assertNotEqual(tempDataDict, self.wrapper.getDataDict()) self.assertNotEqual(tempData, self.wrapper.getData()) def test_convert_data(self): self.assertNotEqual(self.wrapper.getData(), [[None],[None],[None],[None],[None],[None],[None]])