def predictLikes(userLikes): postIds = pickle.load(open ("postIds","rb")) indexes = pickle.load(open ("indexes","rb")) numberOfPosts = len(postIds) indexesHashMap = pickle.load(open ("indexesHashMap","rb")) numberOfNeighbors = len(indexesHashMap) usersVectorsArr,usersArr = createArr(indexesHashMap,numberOfNeighbors) nearestNumber = 7 neighbors = findNearestNeighbors(userLikes, numberOfNeighbors,nearestNumber,usersVectorsArr,usersArr) fullUsersHashMap = pickle.load(open ("fullUsersHash","rb")) averages = [None]*numberOfPosts for j in range(numberOfPosts): average = 0 weight = nearestNumber for i in range(nearestNumber): neighbor = neighbors[i] average += fullUsersHashMap[str(neighbor[1])][j]*weight weight -= 1 averages[j] = (average/28) #averages[j] = (average/nearestNumber) print(averages) testLikes = [None]*numberOfPosts counter = 0 for i in indexes: testLikes[i] = userLikes[counter] counter += 1 newIndexes =[] lastIndexes=[] filterNum = 0.0 while (len(newIndexes)<6): filterNum += 0.1 newIndexes = [] for num in range(numberOfPosts): if num not in indexes: if (averages[num]>= (1-filterNum)): newIndexes.append(num) #testLikes[num] = 1 #else: #testLikes[num] = 0 if len(newIndexes)>20: newIndexes = newIndexes[:20] print (filterNum) return newIndexes
sample = list(random.sample(range(1,18315),5)) for numberOfTests in sample: tmpFullUsersHashmap = deepcopy(fullUsersHashmap) #print(numberOfTests) #test user userLikes = tmpUsersVectorsArr[numberOfTests] #print(userLikes) fullTestUser = tmpUsersArr[numberOfTests] #create temp arr without the test user tmpUsersVectorsArr.pop(numberOfTests) testArr = deepcopy(tmpUsersVectorsArr) tmpUsersArr.pop(numberOfTests) fullTestArr = deepcopy(tmpUsersArr) #find nearestNeighbors of the test user neighbors = findNearestNeighbors(userLikes, numberOfNeighbors-1,nearestNumber,testArr,fullTestArr) testUserLikes = tmpFullUsersHashmap[fullTestUser[1]] #summing the average number of likes #i = 0 #summing = 0 #for key in newUsersHashMap: # for like in newUsersHashMap[key]: # summing += like # if summing>4.5: # i += summing # summing = 0 #print (i) #delete the testUser from the hashmap del tmpFullUsersHashmap[fullTestUser[1]]