Esempio n. 1
0
 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)
Esempio n. 2
0
 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")
Esempio n. 3
0
 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")
Esempio n. 4
0
 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)
Esempio n. 5
0
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()
Esempio n. 6
0
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]])
Esempio n. 7
0
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()
Esempio n. 8
0
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]])