def test01(): print("Test 01") # number of recommended items N: int = 5 methodsResultDict: dict = { "method1": pd.Series([0.9, 0.5, 0.4, 0.2], [1, 2, 3, 4], name="rating"), "method2": pd.Series([0.2, 0.9, 0.01], [3, 4, 5], name="rating"), "method3": pd.Series([0.01, 0.9, 0.9], [5, 6, 7], name="rating") } # methods parametes methodsParamsData: List[tuple] = [['method1', 5, 10, 1, 1], ['method2', 5, 12, 1, 1], ['method3', 6, 13, 1, 1]] modelDF: DataFrame = pd.DataFrame( methodsParamsData, columns=["methodID", "r", "n", "alpha0", "beta0"]) modelDF.set_index("methodID", inplace=True) #modelDF:DataFrame = DataFrame({"votes": [0.5, 0.4, 0.1]}, index=["method1", "method2", "method3"]) #print(modelDF) userID: int = 0 aggr: AggrDHondtDirectOptimizeThompsonSampling = AggrDHondtDirectOptimizeThompsonSampling( HistoryDF(""), { AggrDHondtDirectOptimizeThompsonSampling.ARG_SELECTOR: TheMostVotedItemSelector({}), AggrDHondtDirectOptimizeThompsonSampling.ARG_DISCOUNT_FACTOR: "uniform" }) itemIDs: List[tuple] = aggr.run(methodsResultDict, modelDF, userID, N) print("itemIDs:" + str(itemIDs)) aggr: AggrDHondtDirectOptimizeThompsonSampling = AggrDHondtDirectOptimizeThompsonSampling( HistoryDF(""), { AggrDHondtDirectOptimizeThompsonSampling.ARG_SELECTOR: TheMostVotedItemSelector({}), AggrDHondtDirectOptimizeThompsonSampling.ARG_DISCOUNT_FACTOR: "DCG" }) itemIDs: List[tuple] = aggr.run(methodsResultDict, modelDF, userID, N) print("itemIDs:" + str(itemIDs)) aggr: AggrDHondtDirectOptimizeThompsonSampling = AggrDHondtDirectOptimizeThompsonSampling( HistoryDF(""), { AggrDHondtDirectOptimizeThompsonSampling.ARG_SELECTOR: TheMostVotedItemSelector({}), AggrDHondtDirectOptimizeThompsonSampling.ARG_DISCOUNT_FACTOR: "PowerLaw" }) itemIDs: List[tuple] = aggr.run(methodsResultDict, modelDF, userID, N) print("itemIDs:" + str(itemIDs))
def getContextFuzzyDHondtDirectOptimizeINF(): # taskID:str = "Web" + "ContextFuzzyDHondtDirectOptimizeINF" + "Roulette1" taskID:str = "Web" + "ContextFuzzyDHondtDirectOptimizeINF" + "Fixed" dataset:ADataset = DatasetST.readDatasets() # selector:ADHondtSelector = RouletteWheelSelector({RouletteWheelSelector.ARG_EXPONENT: 1}) selector:ADHondtSelector = TheMostVotedItemSelector({}) pToolOLin0802HLin1002:APenalization = PenalizationToolDefinition.exportProbPenaltyToolOLin0802HLin1002( InputSimulatorDefinition.numberOfAggrItems) rIDs, rDescs = InputRecomSTDefinition.exportPairOfRecomIdsAndRecomDescrs() history:AHistory = HistoryHierDF(taskID) # Init eTool evalTool:AEvalTool = EvalToolContext({ EvalToolContext.ARG_ITEMS: dataset.serialsDF, # ITEMS EvalToolContext.ARG_EVENTS: dataset.eventsDF, # EVENTS (FOR CALCULATING HISTORY OF USER) EvalToolContext.ARG_DATASET: "st", # WHAT DATASET ARE WE IN EvalToolContext.ARG_HISTORY: history}) # empty instance of AHistory is OK for ST dataset aDescDHont:AggregationDescription = InputAggrDefinition.exportADescDContextHondtDirectOptimizeINF(selector, pToolOLin0802HLin1002, evalTool) pDescr:Portfolio1AggrDescription = Portfolio1AggrDescription( taskID, rIDs, rDescs, aDescDHont) port:APortfolio = pDescr.exportPortfolio(taskID, history) port.train(history, dataset) model:DataFrame = PModelDHondt(pDescr.getRecommendersIDs()) return (taskID, port, model, evalTool, history)
def getFuzzyDHontINF(): #taskID:str = "Web" + "FuzzyDHondtINF" + "Roulette1" taskID:str = "Web" + "FuzzyDHondt" + "Fixed" dataset:ADataset = DatasetST.readDatasets() #selector:ADHondtSelector = RouletteWheelSelector({RouletteWheelSelector.ARG_EXPONENT: 1}) selector:ADHondtSelector = TheMostVotedItemSelector({}) pToolOLin0802HLin1002:APenalization = PenalizationToolDefinition.exportPenaltyToolOLin0802HLin1002( InputSimulatorDefinition.numberOfAggrItems) aDescDHont:AggregationDescription = InputAggrDefinition.exportADescDHondtINF(selector, pToolOLin0802HLin1002) rIDs, rDescs = InputRecomSTDefinition.exportPairOfRecomIdsAndRecomDescrs() pDescr:Portfolio1AggrDescription = Portfolio1AggrDescription( taskID, rIDs, rDescs, aDescDHont) history:AHistory = HistoryHierDF(taskID) port:APortfolio = pDescr.exportPortfolio(taskID, history) port.train(history, dataset) model:DataFrame = PModelDHondt(pDescr.getRecommendersIDs()) evalTool:AEvalTool = EvalToolDHondt({EvalToolDHondt.ARG_LEARNING_RATE_CLICKS: 0.03, EvalToolDHondt.ARG_LEARNING_RATE_VIEWS: 0.03 / 500}) return (taskID, port, model, evalTool, history)
def getFuzzyDHontThompsonSamplingINF(): taskID:str = "Web" + "FuzzyDHondtThompsonSamplingINF" + "Fixed" + "OLin0802HLin1002" selector:ADHondtSelector = TheMostVotedItemSelector({}) penalization:APenalization = PenalizationToolDefinition.exportProbPenaltyToolOLin0802HLin1002(20) aDescDHont:AggregationDescription = InputAggrDefinition.exportADescDHondtThompsonSamplingINF(selector, penalization) rIDs, rDescs = InputRecomSTDefinition.exportPairOfRecomIdsAndRecomDescrs() pDescr:Portfolio1AggrDescription = Portfolio1AggrDescription( taskID, rIDs, rDescs, aDescDHont) history:AHistory = HistoryHierDF(taskID) dataset:ADataset = DatasetST.readDatasets() port:APortfolio = pDescr.exportPortfolio(taskID, history) port.train(history, dataset) model:DataFrame = PModelDHondtBanditsVotes(pDescr.getRecommendersIDs()) evalTool:AEvalTool = EvalToolDHondtBanditVotes({}) return (taskID, port, model, evalTool, history)
def test01(): print("Test 01") # number of recommended items N:int = 5 methodsResultDict:dict = { "method1":pd.Series([0.5, 0.5, 0.4, 0.2],[1,2,3,4],name="rating"), "method2":pd.Series([0.9, 0.5, 0.1],[5,1,6],name="rating"), "method3":pd.Series([0.7, 0.3, 0.9], [3, 4, 6], name="rating") } # methods parametes modelDF:DataFrame = DataFrame({"votes": [0.5, 0.4, 0.1]}, index=["method1", "method2", "method3"]) #print(modelDF) userID:int = 0 aggr:AggrFuzzyDHondtDirectOptimize = AggrFuzzyDHondtDirectOptimize({ AggrFuzzyDHondtDirectOptimize.ARG_SELECTOR:TheMostVotedItemSelector({}) }) #itemIDs:List[tuple] = aggr.runWithResponsibility(methodsResultDict, modelDF, userID, N) # [1, 3, 5, 2, 4] itemIDs:List[tuple] = aggr.run(methodsResultDict, modelDF, userID, N) print("itemIDs:" + str(itemIDs))
def getSelectorParameters(self): selectorRoulette1: ADHondtSelector = RouletteWheelSelector( {RouletteWheelSelector.ARG_EXPONENT: 1}) selectorRoulette2: ADHondtSelector = RouletteWheelSelector( {RouletteWheelSelector.ARG_EXPONENT: 2}) selectorRoulette3: ADHondtSelector = RouletteWheelSelector( {RouletteWheelSelector.ARG_EXPONENT: 3}) selectorRoulette4: ADHondtSelector = RouletteWheelSelector( {RouletteWheelSelector.ARG_EXPONENT: 4}) selectorRoulette5: ADHondtSelector = RouletteWheelSelector( {RouletteWheelSelector.ARG_EXPONENT: 5}) selectorFixed: ADHondtSelector = TheMostVotedItemSelector({}) aDict: Dict[str, object] = {} aDict[BatchDefMLFuzzyDHondtDirectOptimize. SLCTR_ROULETTE1] = selectorRoulette1 aDict[BatchDefMLFuzzyDHondtDirectOptimize. SLCTR_ROULETTE2] = selectorRoulette2 aDict[BatchDefMLFuzzyDHondtDirectOptimize. SLCTR_ROULETTE3] = selectorRoulette3 aDict[BatchDefMLFuzzyDHondtDirectOptimize. SLCTR_ROULETTE4] = selectorRoulette4 aDict[BatchDefMLFuzzyDHondtDirectOptimize. SLCTR_ROULETTE5] = selectorRoulette5 aDict[BatchDefMLFuzzyDHondtDirectOptimize.SLCTR_FIXED] = selectorFixed aSubDict: Dict[str, object] = { selIdI: aDict[selIdI] for selIdI in aDict.keys() if selIdI in self.selectorIds } return aSubDict
def test01(): print("Test 01") # number of recommended items N = 120 #a = observationalLinearProbabilityFnc(0.1, 0.9, 5) #print(a) uBehaviourDesc: UserBehaviourDescription = UserBehaviourDescription( observationalLinearProbabilityFnc, [0.1, 0.9]) # method results, items=[1,2,4,5,6,7,8,12,32,64,77] methodsResultDict: dict[str, pd.Series] = { "metoda1": pd.Series([0.2, 0.1, 0.3, 0.3, 0.1], [32, 2, 8, 1, 4], name="rating"), "metoda2": pd.Series([0.1, 0.1, 0.2, 0.3, 0.3], [1, 5, 32, 6, 7], name="rating"), "metoda3": pd.Series([0.3, 0.1, 0.2, 0.3, 0.1], [7, 2, 77, 64, 12], name="rating") } #print(methodsResultDict) # methods parametes methodsParamsData: List[tuple] = [['metoda1', 100], ['metoda2', 80], ['metoda3', 60]] methodsParamsDF: DataFrame = pd.DataFrame(methodsParamsData, columns=["methodID", "votes"]) methodsParamsDF.set_index("methodID", inplace=True) #print(methodsParamsDF) userID: int = 0 itemID: int = 7 historyDF: AHistory = HistoryDF("test01") historyDF.insertRecommendation(userID, itemID, 1, True, None) historyDF.insertRecommendation(userID, itemID, 1, True, None) historyDF.insertRecommendation(userID, itemID, 1, True, None) historyDF.print() #ignoringValue:float = historyDF.getIgnoringValue(userID, itemID, limit=3) #print("IgnoringValue: " + str(ignoringValue)) penalization: APenalization = PenalUsingReduceRelevance( penaltyLinear, [0.8, 0.2, 3], penaltyLinear, [1.0, 0.2, 3], 3) aggr: AggrFuzzyDHondt = AggrFuzzyDHondtINF( historyDF, { AggrFuzzyDHondtINF.ARG_SELECTOR: TheMostVotedItemSelector({}), AggrFuzzyDHondtINF.ARG_PENALTY_TOOL: penalization }) itemIDs: List[tuple] = aggr.runWithResponsibility(methodsResultDict, methodsParamsDF, userID, N) print(itemIDs)
def getSelectorParameters(self): selectorRoulette1: ADHondtSelector = RouletteWheelSelector( {RouletteWheelSelector.ARG_EXPONENT: 1}) selectorRoulette3: ADHondtSelector = RouletteWheelSelector( {RouletteWheelSelector.ARG_EXPONENT: 3}) selectorFixed: ADHondtSelector = TheMostVotedItemSelector({}) aDict: dict = {} aDict[BatchFuzzyDHondt.SLCTR_ROULETTE1] = selectorRoulette1 aDict[BatchFuzzyDHondt.SLCTR_ROULETTE2] = selectorRoulette3 aDict[BatchFuzzyDHondt.SLCTR_FIXED] = selectorFixed return aDict
def test01(): print("Simulation: RR Dynamic") lrClick: float = 0.03 #lrView:float = lrClick / 300 lrViewDivisor: float = 250 jobID: str = "Fixed" + "Clk" + str(lrClick).replace( ".", "") + "ViewDivisor" + str(lrViewDivisor).replace(".", "") selector: ADHondtSelector = TheMostVotedItemSelector({}) rIDs, rDescs = InputRecomRRDefinition.exportPairOfRecomIdsAndRecomDescrs() p1AggrDescr: Portfolio1AggrDescription = Portfolio1AggrDescription( "FDHont" + jobID, rIDs, rDescs, InputAggrDefinition.exportADescDHondt(selector)) recommenderID: str = "TheMostPopular" rDescr: RecommenderDescription = RecommenderDescription( RecommenderTheMostPopular, {}) pDescr: APortfolioDescription = PortfolioDynamicDescription( "Dynamic" + "FDHontPersStat" + jobID, recommenderID, rDescr, "FDHondt", p1AggrDescr) batchID: str = "rrDiv90Ulinear0109R1" dataset: DatasetRetailRocket = DatasetRetailRocket.readDatasetsWithFilter( minEventCount=50) behaviourFile: str = BehavioursRR.getFile(BehavioursRR.BHVR_LINEAR0109) behavioursDF: DataFrame = BehavioursRR.readFromFileRR(behaviourFile) model: DataFrame = PModelDHondtPersonalisedStat( p1AggrDescr.getRecommendersIDs()) eTool: AEvalTool = EvalToolDHondtPersonal({ EvalToolDHondt.ARG_LEARNING_RATE_CLICKS: lrClick, EvalToolDHondt.ARG_LEARNING_RATE_VIEWS: lrClick / lrViewDivisor }) # simulation of portfolio simulator: Simulator = Simulator(batchID, SimulationRR, argsSimulationDict, dataset, behavioursDF) simulator.simulate([pDescr], [model], [eTool], [HistoryHierDF(pDescr.getPortfolioID())])
def getAllSelectors(self): selectorRoulette1:ADHondtSelector = RouletteWheelSelector({RouletteWheelSelector.ARG_EXPONENT:1}) selectorRoulette2:ADHondtSelector = RouletteWheelSelector({RouletteWheelSelector.ARG_EXPONENT:2}) selectorRoulette3:ADHondtSelector = RouletteWheelSelector({RouletteWheelSelector.ARG_EXPONENT:3}) selectorRoulette4:ADHondtSelector = RouletteWheelSelector({RouletteWheelSelector.ARG_EXPONENT:4}) selectorRoulette5:ADHondtSelector = RouletteWheelSelector({RouletteWheelSelector.ARG_EXPONENT:5}) selectorFixed:ADHondtSelector = TheMostVotedItemSelector({}) aDict:Dict[str,object] = {} aDict[BatchDefMLFuzzyDHondt.SLCTR_ROULETTE1] = selectorRoulette1 aDict[BatchDefMLFuzzyDHondt.SLCTR_ROULETTE2] = selectorRoulette2 aDict[BatchDefMLFuzzyDHondt.SLCTR_ROULETTE3] = selectorRoulette3 aDict[BatchDefMLFuzzyDHondt.SLCTR_ROULETTE4] = selectorRoulette4 aDict[BatchDefMLFuzzyDHondt.SLCTR_ROULETTE5] = selectorRoulette5 aDict[BatchDefMLFuzzyDHondt.SLCTR_FIXED] = selectorFixed return aDict
def test01(): print("Test 01") # number of recommended items N = 120 # method results, items=[1,2,4,5,6,7,8,12,32,64,77] methodsResultDict: dict[str, pd.Series] = { "metoda1": pd.Series([0.2, 0.1, 0.3, 0.3, 0.1], [32, 2, 8, 1, 4], name="rating"), "metoda2": pd.Series([0.1, 0.1, 0.2, 0.3, 0.3], [1, 5, 32, 6, 7], name="rating"), "metoda3": pd.Series([0.3, 0.1, 0.2, 0.3, 0.1], [7, 2, 77, 64, 12], name="rating") } print(methodsResultDict) # methods parametes portfolioModelData: List[tuple] = [['metoda1', 100], ['metoda2', 80], ['metoda3', 60]] portfolioModel: DataFrame = pd.DataFrame(portfolioModelData, columns=["methodID", "votes"]) portfolioModel.set_index("methodID", inplace=True) sumMethodsVotes: float = portfolioModel["votes"].sum() for methodIdI in portfolioModel.index: portfolioModel.loc[ methodIdI, "votes"] = portfolioModel.loc[methodIdI, "votes"] / sumMethodsVotes aggr: AggrFuzzyDHondt = AggrFuzzyDHondt( HistoryDF(""), {AggrFuzzyDHondt.ARG_SELECTOR: TheMostVotedItemSelector({})}) #itemIDs:int = aggr.run(methodsResultDict, methodsParamsDF, N) #print(itemIDs) userID: int = 101 itemIDs: List[tuple] = aggr.runWithResponsibility(methodsResultDict, portfolioModel, userID, N) print(itemIDs)
def test03(): # First get Dataset Data dataset: ADataset = DatasetST.readDatasets() events = dataset.eventsDF serials = dataset.serialsDF # I created some dummy data, but each key,value pair should be result list from a recommender # (=what recommender recommended) methodsResultDict: dict = { "metoda1": pd.Series([0.2, 0.1, 0.3, 0.3, 0.1], [32, 2, 8, 1, 4], name="rating"), "metoda2": pd.Series([0.1, 0.1, 0.2, 0.3, 0.3], [1, 5, 32, 6, 7], name="rating") } # init votes for each recommender portfolioModelData = [['metoda1', 0.6], ['metoda2', 0.4]] portfolioModelDF: DataFrame = pd.DataFrame(portfolioModelData, columns=["methodID", "votes"]) portfolioModelDF.set_index("methodID", inplace=True) userID = 1 itemID = 20 historyDF: AHistory = HistoryDF("test01") # WHAT EVALUATIOR NEEDS into dictionary! evaluationDict: dict = { EvalToolContext.ARG_USER_ID: userID, EvalToolContext.ARG_ITEM_ID: itemID, # ITEMID (not mandatory if EvalToolContext.ARG_PAGE_TYPE != "zobrazit") EvalToolContext.ARG_SENIORITY: 5, # SENIORITY OF USER EvalToolContext.ARG_PAGE_TYPE: "zobrazit", # TYPE OF PAGE ("zobrazit", "index" or "katalog) EvalToolContext.ARG_ITEMS_SHOWN: 10 # HOW MANY ITEMS ARE SHOWN TO USER } # Init eTool eToolContext = EvalToolContext({ EvalToolContext.ARG_ITEMS: serials, # ITEMS EvalToolContext.ARG_EVENTS: events, # EVENTS (FOR CALCULATING HISTORY OF USER) EvalToolContext.ARG_DATASET: "st", # WHAT DATASET ARE WE IN EvalToolContext.ARG_HISTORY: historyDF } # empty instance of AHistory is OK for ST dataset ) aggr: AggrContextFuzzyDHondt = AggrContextFuzzyDHondt( historyDF, { # empty instance of AHistory is OK for ST dataset AggrContextFuzzyDHondt.ARG_EVAL_TOOL: eToolContext, # eTool AggrContextFuzzyDHondt.ARG_SELECTOR: TheMostVotedItemSelector( {}) # ? FuzzyDHondt needs this, not contextAggr }) # Get data from aggregator rItemsWithResponsibility = aggr.runWithResponsibility( methodsResultDict, portfolioModelDF, userID, numberOfItems=5, argumentsDict=evaluationDict) # call click & displayed methods l1 = eToolContext.displayed(rItemsWithResponsibility, portfolioModelDF, evaluationDict) # rItemsWithResponsibility[0][0] is clicked item print(rItemsWithResponsibility) l1 = eToolContext.click(rItemsWithResponsibility, rItemsWithResponsibility[0][0], portfolioModelDF, evaluationDict) # ... # ... # ... # user is now on "index" page type, so we have to change page type in evaluationDict (!) evaluationDict[EvalToolContext.ARG_PAGE_TYPE] = "index" # same as before # Get data from aggregator rItemsWithResponsibility = aggr.runWithResponsibility( methodsResultDict, portfolioModelDF, userID, numberOfItems=5, argumentsDict=evaluationDict) # call click & displayed methods l1 = eToolContext.displayed(rItemsWithResponsibility, portfolioModelDF, evaluationDict) # rItemsWithResponsibility[0][0] is clicked item l1 = eToolContext.click(rItemsWithResponsibility, rItemsWithResponsibility[0][0], portfolioModelDF, evaluationDict)
def test02(repetitions=1): N = 100 # get dataset itemsDF: DataFrame = Items.readFromFileMl1m() usersDF: DataFrame = Users.readFromFileMl1m() ratingsDF: DataFrame = Ratings.readFromFileMl1m() ratingsDFTrain = ratingsDF[:50000] ratingsDFUpdate: DataFrame = ratingsDF.iloc[50001:50100] trainDataset: ADataset = DatasetML("ml", ratingsDFTrain, usersDF, itemsDF) historyDF: AHistory = HistoryDF("test01") # train KNN rec1: ARecommender = RecommenderItemBasedKNN("run", {}) rec1.train(HistoryDF("test01"), trainDataset) # train Most Popular rec2: ARecommender = RecommenderTheMostPopular("run", {}) rec2.train(historyDF, trainDataset) # methods parametes methodsParamsData: List[tuple] = [['ItembasedKNN', 0.4], ['MostPopular', 0.6]] methodsParamsDF: DataFrame = pd.DataFrame(methodsParamsData, columns=["methodID", "votes"]) methodsParamsDF.set_index("methodID", inplace=True) userID = 352 ratingsDFuserID = ratingsDF[ratingsDF['userId'] == userID] itemID = ratingsDFuserID.iloc[0]['movieId'] historyDF: AHistory = HistoryDF("test01") historyDF.insertRecommendation(userID, itemID, 1, True, 10) r1: Series = rec1.recommend(userID, N, {}) r2: Series = rec2.recommend(userID, N, {}) methodsResultDict: dict = {"ItembasedKNN": r1, "MostPopular": r2} evaluationDict: dict = { EvalToolContext.ARG_USER_ID: userID, EvalToolContext.ARG_RELEVANCE: methodsResultDict } evalToolDHondt = EvalToolContext({ EvalToolContext.ARG_USERS: usersDF, EvalToolContext.ARG_ITEMS: itemsDF, EvalToolContext.ARG_DATASET: "ml", EvalToolContext.ARG_HISTORY: historyDF }) aggr: AggrContextFuzzyDHondt = AggrContextFuzzyDHondt( historyDF, { AggrContextFuzzyDHondt.ARG_EVAL_TOOL: evalToolDHondt, AggrContextFuzzyDHondt.ARG_SELECTOR: TheMostVotedItemSelector({}) }) aggrInit: AggrFuzzyDHondt = AggrFuzzyDHondt( historyDF, {AggrFuzzyDHondt.ARG_SELECTOR: TheMostVotedItemSelector({})}) l1 = aggrInit.runWithResponsibility(methodsResultDict, methodsParamsDF, userID, N) import random print("l1:" + str(l1)) evalToolDHondt.displayed(l1, methodsParamsDF, evaluationDict) evalToolDHondt.click(l1, random.choice(l1)[0], methodsParamsDF, evaluationDict) timestamp = 10 counter = 0 r1c = 0 r2c = 0 for _ in range(repetitions): for index, row in ratingsDFuserID.iterrows(): r1: Series = rec1.recommend(userID, N, {}) r2: Series = rec2.recommend(userID, N, {}) methodsResultDict: dict = {"ItembasedKNN": r1, "MostPopular": r2} evalDict = {"a": 1} historyDF.insertRecommendation(userID, row['movieId'], 1, True, timestamp) timestamp += 1 l1 = aggr.runWithResponsibility(methodsResultDict, methodsParamsDF, userID, argumentsDict=evalDict, numberOfItems=N) import random randomItem = random.choice(l1)[0] if randomItem in r1.index: r1c += 1 if randomItem in r2.index: r2c += 1 evaluationDict: dict = { EvalToolContext.ARG_USER_ID: userID, EvalToolContext.ARG_RELEVANCE: methodsResultDict } print("votes Items: ", r1c) print("votes mostPopular ", r2c) evalToolDHondt.displayed(l1, methodsParamsDF, evaluationDict) evalToolDHondt.click(l1, randomItem, methodsParamsDF, evaluationDict) rec1.update(ratingsDFuserID.loc[[index]], {}) # rec2.update(ratingsDFuserID.loc[index]) Not implemented #print("Counter = ", counter, "; All = ", len(ratingsDFuserID.iloc[800:]), "; Index: ", index) print(methodsParamsDF) counter += 1
def test01(): print("Test 01") recommenderID: str = "TheMostPopular" pRDescr: RecommenderDescription = RecommenderDescription( RecommenderTheMostPopular, {}) selectorFixed: ADHondtSelector = TheMostVotedItemSelector({}) aDescDHont: AggregationDescription = InputAggrDefinition.exportADescDHondtDirectOptimizeThompsonSampling( selectorFixed) rIDs: List[str] rDescs: List[AggregationDescription] rIDs, rDescs = InputRecomRRDefinition.exportPairOfRecomIdsAndRecomDescrs() rIDs = [recommenderID] rDescs = [pRDescr] p1AggrDescrID: str = "p1AggrDescrID" p1AggrDescr: Portfolio1AggrDescription = Portfolio1AggrDescription( p1AggrDescrID, rIDs, rDescs, aDescDHont) pProbTool: APenalization = PenalizationToolDefinition.exportProbPenaltyToolOLin0802HLin1002( InputSimulatorDefinition.numberOfAggrItems) pProbTool: APenalization = PenalizationToolDefinition.exportPenaltyToolOStat08HLin1002( InputSimulatorDefinition.numberOfAggrItems) aHierDescr: AggregationDescription = AggregationDescription( AggrD21, {AggrD21.ARG_RATING_THRESHOLD_FOR_NEG: 2.0}) pHierDescr: PortfolioHierDescription = PortfolioHierDescription( "pHierDescr", recommenderID, pRDescr, p1AggrDescrID, p1AggrDescr, aHierDescr, pProbTool) userID: int = 1 dataset: ADataset = DatasetRetailRocket.readDatasetsWithFilter( minEventCount=50) history: AHistory = HistoryDF("test") history.insertRecommendation(userID, 45, 1, False) history.insertRecommendation(userID, 45, 2, False) history.insertRecommendation(userID, 78, 3, False) p: APortfolio = pHierDescr.exportPortfolio("test", history) portFolioModel: DataFrame = PModelDHondtBanditsVotes( p1AggrDescr.getRecommendersIDs()) p.train(history, dataset) #df:DataFrame = DataFrame([[1, 555]], columns=[Events.COL_USER_ID, Events.COL_OBJECT_ID]) #p.update(ARecommender.UPDT_CLICK, df) args = { APortfolio.ARG_NUMBER_OF_AGGR_ITEMS: 20, APortfolio.ARG_ITEM_ID: 1, APortfolio.ARG_NUMBER_OF_RECOMM_ITEMS: 100, AggrD21.ARG_RATING_THRESHOLD_FOR_NEG: 0.5 } r, rp = p.recommend(userID, portFolioModel, args) print(r)