I hope that classmates passing by can give the JStarCraft framework a star, which can be regarded as an encouragement to the author!
JStarCraft RNS is a lightweight engine oriented to the field of information retrieval. It follows the Apache 2.0 protocol.
Focus on solving basic problems in the field of information retrieval: recommendation and search.
Provide recommendation engine design and implementation that meets the requirements of industrial-level scenarios.
Provide search engine design and implementation that meets the requirements of industrial-level scenarios.
JStarCraft RNS requires users to have the following environment:
git clone https://github.com/HongZhaoHua/jstarcraft-core.git
mvn install -Dmaven.test.skip=true
git clone https://github.com/HongZhaoHua/jstarcraft-ai.git
mvn install -Dmaven.test.skip=true
git clone https://github.com/HongZhaoHua/jstarcraft-rns.git
mvn install -Dmaven.test.skip=true
<dependency>
<groupId>com.jstarcraft</groupId>
<artifactId>rns</artifactId>
<version>1.0</version>
</dependency>
compile group : ' com.jstarcraft ' , name : ' rns ' , version : ' 1.0 '
Properties keyValues = new Properties ();
keyValues . load ( this . getClass (). getResourceAsStream ( "/data.properties" ));
keyValues . load ( this . getClass (). getResourceAsStream ( "/recommend/benchmark/randomguess-test.properties" ));
Configurator configurator = new Configurator ( keyValues );
RankingTask task = new RankingTask ( RandomGuessModel . class , configurator );
// 训练与评估排序模型
task . execute ();
RatingTask task = new RatingTask ( RandomGuessModel . class , configurator );
// 训练与评估评分模型
task . execute ();
// 获取模型
Model model = task . getModel ();
随着信息技术和互联网的发展,人们逐渐从信息匮乏(Information Underload)的时代走入了信息过载(Information Overload)的时代.
无论是信息消费者还是信息生产者都遇到了挑战:
* 对于信息消费者,从海量信息中寻找信息,是一件非常困难的事情;
* 对于信息生产者,从海量信息中暴露信息,也是一件非常困难的事情;
信息检索的任务就是联系用户和信息,一方面帮助用户寻找对自己有价值的信息,另一方面帮助信息暴露给对它感兴趣的用户,从而实现信息消费者和信息生产者的双赢.
从信息检索的角度:
* 搜索和推荐是获取信息的两种主要手段;
* 搜索和推荐是获取信息的两种不同方式;
* 搜索(Search)是主动明确的;
* 推荐(Recommend)是被动模糊的;
搜索和推荐是两个互补的工具.
JStarCraft-RNS引擎旨在解决推荐与搜索领域的两个核心任务:排序预测(Ranking)和评分预测(Rating).
根据解决基本问题的不同,将算法与评估指标划分为排序(Ranking)与评分(Rating).
两者之间的根本区别在于目标函数的不同.
通俗点的解释:
Ranking算法基于隐式反馈数据,趋向于拟合用户的排序.(关注度)
Rating算法基于显示反馈数据,趋向于拟合用户的评分.(满意度)
关键在于具体场景中,关注度与满意度是否保持一致.
通俗点的解释:
人们关注的东西,并不一定是满意的东西.(例如:个人所得税)
Complete example
Write a BeanShell script to train and evaluate the model and save it to the Model.bsh file
// 构建配置
keyValues = new Properties();
keyValues.load(loader.getResourceAsStream("data.properties"));
keyValues.load(loader.getResourceAsStream("model/benchmark/randomguess-test.properties"));
configurator = new Configurator(keyValues);
// 此对象会返回给Java程序
_data = new HashMap();
// 构建排序任务
task = new RankingTask(RandomGuessModel.class, configurator);
// 训练与评估模型并获取排序指标
measures = task.execute();
_data.put("precision", measures.get(PrecisionEvaluator.class));
_data.put("recall", measures.get(RecallEvaluator.class));
// 构建评分任务
task = new RatingTask(RandomGuessModel.class, configurator);
// 训练与评估模型并获取评分指标
measures = task.execute();
_data.put("mae", measures.get(MAEEvaluator.class));
_data.put("mse", measures.get(MSEEvaluator.class));
_data;
// 获取BeanShell脚本
File file = new File ( ScriptTestCase . class . getResource ( "Model.bsh" ). toURI ());
String script = FileUtils . readFileToString ( file , StringUtility . CHARSET );
// 设置BeanShell脚本使用到的Java类
ScriptContext context = new ScriptContext ();
context . useClasses ( Properties . class , Assert . class );
context . useClass ( "Configurator" , MapConfigurator . class );
context . useClasses ( "com.jstarcraft.ai.evaluate" );
context . useClasses ( "com.jstarcraft.rns.task" );
context . useClasses ( "com.jstarcraft.rns.model.benchmark" );
// 设置BeanShell脚本使用到的Java变量
ScriptScope scope = new ScriptScope ();
scope . createAttribute ( "loader" , loader );
// 执行BeanShell脚本
ScriptExpression expression = new GroovyExpression ( context , scope , script );
Map < String , Float > data = expression . doWith ( Map . class );
Assert . assertEquals ( 0.005825241F , data . get ( "precision" ), 0F );
Assert . assertEquals ( 0.011579763F , data . get ( "recall" ), 0F );
Assert . assertEquals ( 1.2708743F , data . get ( "mae" ), 0F );
Assert . assertEquals ( 2.425075F , data . get ( "mse" ), 0F );
Complete example
Write Groovy scripts to train and evaluate the model and save it to the Model.groovy file
// 构建配置
def keyValues = new Properties ();
keyValues . load(loader . getResourceAsStream( " data.properties " ));
keyValues . load(loader . getResourceAsStream( " recommend/benchmark/randomguess-test.properties " ));
def configurator = new Configurator (keyValues);
// 此对象会返回给Java程序
def _data = [:];
// 构建排序任务
task = new RankingTask ( RandomGuessModel . class, configurator);
// 训练与评估模型并获取排序指标
measures = task . execute();
_data . precision = measures . get( PrecisionEvaluator . class);
_data . recall = measures . get( RecallEvaluator . class);
// 构建评分任务
task = new RatingTask ( RandomGuessModel . class, configurator);
// 训练与评估模型并获取评分指标
measures = task . execute();
_data . mae = measures . get( MAEEvaluator . class);
_data . mse = measures . get( MSEEvaluator . class);
_data;
// 获取Groovy脚本
File file = new File ( ScriptTestCase . class . getResource ( "Model.groovy" ). toURI ());
String script = FileUtils . readFileToString ( file , StringUtility . CHARSET );
// 设置Groovy脚本使用到的Java类
ScriptContext context = new ScriptContext ();
context . useClasses ( Properties . class , Assert . class );
context . useClass ( "Configurator" , MapConfigurator . class );
context . useClasses ( "com.jstarcraft.ai.evaluate" );
context . useClasses ( "com.jstarcraft.rns.task" );
context . useClasses ( "com.jstarcraft.rns.model.benchmark" );
// 设置Groovy脚本使用到的Java变量
ScriptScope scope = new ScriptScope ();
scope . createAttribute ( "loader" , loader );
// 执行Groovy脚本
ScriptExpression expression = new GroovyExpression ( context , scope , script );
Map < String , Float > data = expression . doWith ( Map . class );
Complete example
Write JS scripts to train and evaluate the model and save it to the Model.js file
// 构建配置
var keyValues = new Properties ( ) ;
keyValues . load ( loader . getResourceAsStream ( "data.properties" ) ) ;
keyValues . load ( loader . getResourceAsStream ( "recommend/benchmark/randomguess-test.properties" ) ) ;
var configurator = new Configurator ( [ keyValues ] ) ;
// 此对象会返回给Java程序
var _data = { } ;
// 构建排序任务
task = new RankingTask ( RandomGuessModel . class , configurator ) ;
// 训练与评估模型并获取排序指标
measures = task . execute ( ) ;
_data [ 'precision' ] = measures . get ( PrecisionEvaluator . class ) ;
_data [ 'recall' ] = measures . get ( RecallEvaluator . class ) ;
// 构建评分任务
task = new RatingTask ( RandomGuessModel . class , configurator ) ;
// 训练与评估模型并获取评分指标
measures = task . execute ( ) ;
_data [ 'mae' ] = measures . get ( MAEEvaluator . class ) ;
_data [ 'mse' ] = measures . get ( MSEEvaluator . class ) ;
_data ;
// 获取JS脚本
File file = new File ( ScriptTestCase . class . getResource ( "Model.js" ). toURI ());
String script = FileUtils . readFileToString ( file , StringUtility . CHARSET );
// 设置JS脚本使用到的Java类
ScriptContext context = new ScriptContext ();
context . useClasses ( Properties . class , Assert . class );
context . useClass ( "Configurator" , MapConfigurator . class );
context . useClasses ( "com.jstarcraft.ai.evaluate" );
context . useClasses ( "com.jstarcraft.rns.task" );
context . useClasses ( "com.jstarcraft.rns.model.benchmark" );
// 设置JS脚本使用到的Java变量
ScriptScope scope = new ScriptScope ();
scope . createAttribute ( "loader" , loader );
// 执行JS脚本
ScriptExpression expression = new JsExpression ( context , scope , script );
Map < String , Float > data = expression . doWith ( Map . class );
Complete example
Write a Kotlin script to train and evaluate the model and save it to the Model.kt file
// 构建配置
var keyValues = Properties ( ) ;
var loader = bindings [ "loader" ] as ClassLoader ;
keyValues . load ( loader . getResourceAsStream ( "data.properties" ) ) ;
keyValues . load ( loader . getResourceAsStream ( "model/benchmark/randomguess-test.properties" ) ) ;
var option = Option ( keyValues ) ;
// 此对象会返回给Java程序
var _data = mutableMapOf < String , Float > ( ) ;
// 构建排序任务
var rankingTask = RankingTask ( RandomGuessModel :: class . java , option ) ;
// 训练与评估模型并获取排序指标
val rankingMeasures = rankingTask . execute ( ) ;
_data [ "precision" ] = rankingMeasures . getFloat ( PrecisionEvaluator :: class . java ) ;
_data [ "recall" ] = rankingMeasures . getFloat ( RecallEvaluator :: class . java ) ;
// 构建评分任务
var ratingTask = RatingTask ( RandomGuessModel :: class . java , option ) ;
// 训练与评估模型并获取评分指标
var ratingMeasures = ratingTask . execute ( ) ;
_data [ "mae" ] = ratingMeasures . getFloat ( MAEEvaluator :: class . java ) ;
_data [ "mse" ] = ratingMeasures . getFloat ( MSEEvaluator :: class . java ) ;
_data ;
// 获取Kotlin脚本
File file = new File ( ScriptTestCase . class . getResource ( "Model.kt" ). toURI ());
String script = FileUtils . readFileToString ( file , StringUtility . CHARSET );
// 设置Kotlin脚本使用到的Java类
ScriptContext context = new ScriptContext ();
context . useClasses ( Properties . class , Assert . class );
context . useClass ( "Option" , MapOption . class );
context . useClasses ( "com.jstarcraft.ai.evaluate" );
context . useClasses ( "com.jstarcraft.rns.task" );
context . useClasses ( "com.jstarcraft.rns.model.benchmark" );
// 设置Kotlin脚本使用到的Java变量
ScriptScope scope = new ScriptScope ();
scope . createAttribute ( "loader" , loader );
// 执行Kotlin脚本
ScriptExpression expression = new KotlinExpression ( context , scope , script );
Map < String , Float > data = expression . doWith ( Map . class );
Complete example
Write Lua scripts to train and evaluate the model and save it to the Model.lua file
-- 构建配置
local keyValues = Properties . new ();
keyValues : load ( loader : getResourceAsStream ( " data.properties " ));
keyValues : load ( loader : getResourceAsStream ( " recommend/benchmark/randomguess-test.properties " ));
local configurator = Configurator . new ({ keyValues });
-- 此对象会返回给Java程序
local _data = {};
-- 构建排序任务
task = RankingTask . new ( RandomGuessModel , configurator );
-- 训练与评估模型并获取排序指标
measures = task : execute ();
_data [ " precision " ] = measures : get ( PrecisionEvaluator );
_data [ " recall " ] = measures : get ( RecallEvaluator );
-- 构建评分任务
task = RatingTask . new ( RandomGuessModel , configurator );
-- 训练与评估模型并获取评分指标
measures = task : execute ();
_data [ " mae " ] = measures : get ( MAEEvaluator );
_data [ " mse " ] = measures : get ( MSEEvaluator );
return _data ;
// 获取Lua脚本
File file = new File ( ScriptTestCase . class . getResource ( "Model.lua" ). toURI ());
String script = FileUtils . readFileToString ( file , StringUtility . CHARSET );
// 设置Lua脚本使用到的Java类
ScriptContext context = new ScriptContext ();
context . useClasses ( Properties . class , Assert . class );
context . useClass ( "Configurator" , MapConfigurator . class );
context . useClasses ( "com.jstarcraft.ai.evaluate" );
context . useClasses ( "com.jstarcraft.rns.task" );
context . useClasses ( "com.jstarcraft.rns.model.benchmark" );
// 设置Lua脚本使用到的Java变量
ScriptScope scope = new ScriptScope ();
scope . createAttribute ( "loader" , loader );
// 执行Lua脚本
ScriptExpression expression = new LuaExpression ( context , scope , script );
LuaTable data = expression . doWith ( LuaTable . class );
Complete example
Write Python scripts to train and evaluate the model and save it to the Model.py file
# 构建配置
keyValues = Properties ()
keyValues . load ( loader . getResourceAsStream ( "data.properties" ))
keyValues . load ( loader . getResourceAsStream ( "recommend/benchmark/randomguess-test.properties" ))
configurator = Configurator ([ keyValues ])
# 此对象会返回给Java程序
_data = {}
# 构建排序任务
task = RankingTask ( RandomGuessModel , configurator )
# 训练与评估模型并获取排序指标
measures = task . execute ()
_data [ 'precision' ] = measures . get ( PrecisionEvaluator )
_data [ 'recall' ] = measures . get ( RecallEvaluator )
# 构建评分任务
task = RatingTask ( RandomGuessModel , configurator )
# 训练与评估模型并获取评分指标
measures = task . execute ()
_data [ 'mae' ] = measures . get ( MAEEvaluator )
_data [ 'mse' ] = measures . get ( MSEEvaluator )
// 设置Python环境变量
System . setProperty ( "python.console.encoding" , StringUtility . CHARSET . name ());
// 获取Python脚本
File file = new File ( PythonTestCase . class . getResource ( "Model.py" ). toURI ());
String script = FileUtils . readFileToString ( file , StringUtility . CHARSET );
// 设置Python脚本使用到的Java类
ScriptContext context = new ScriptContext ();
context . useClasses ( Properties . class , Assert . class );
context . useClass ( "Configurator" , MapConfigurator . class );
context . useClasses ( "com.jstarcraft.ai.evaluate" );
context . useClasses ( "com.jstarcraft.rns.task" );
context . useClasses ( "com.jstarcraft.rns.model.benchmark" );
// 设置Python脚本使用到的Java变量
ScriptScope scope = new ScriptScope ();
scope . createAttribute ( "loader" , loader );
// 执行Python脚本
ScriptExpression expression = new PythonExpression ( context , scope , script );
Map < String , Double > data = expression . doWith ( Map . class );
Complete example
Write a Ruby script to train and evaluate the model and save it to the Model.rb file
# 构建配置
keyValues = Properties . new ( )
keyValues . load ( $loader . getResourceAsStream ( "data.properties" ) )
keyValues . load ( $loader . getResourceAsStream ( "model/benchmark/randomguess-test.properties" ) )
configurator = Configurator . new ( keyValues )
# 此对象会返回给Java程序
_data = Hash . new ( )
# 构建排序任务
task = RankingTask . new ( RandomGuessModel . java_class , configurator )
# 训练与评估模型并获取排序指标
measures = task . execute ( )
_data [ 'precision' ] = measures . get ( PrecisionEvaluator . java_class )
_data [ 'recall' ] = measures . get ( RecallEvaluator . java_class )
# 构建评分任务
task = RatingTask . new ( RandomGuessModel . java_class , configurator )
# 训练与评估模型并获取评分指标
measures = task . execute ( )
_data [ 'mae' ] = measures . get ( MAEEvaluator . java_class )
_data [ 'mse' ] = measures . get ( MSEEvaluator . java_class )
_data ;
// 获取Ruby脚本
File file = new File ( ScriptTestCase . class . getResource ( "Model.rb" ). toURI ());
String script = FileUtils . readFileToString ( file , StringUtility . CHARSET );
// 设置Ruby脚本使用到的Java类
ScriptContext context = new ScriptContext ();
context . useClasses ( Properties . class , Assert . class );
context . useClass ( "Configurator" , MapConfigurator . class );
context . useClasses ( "com.jstarcraft.ai.evaluate" );
context . useClasses ( "com.jstarcraft.rns.task" );
context . useClasses ( "com.jstarcraft.rns.model.benchmark" );
// 设置Ruby脚本使用到的Java变量
ScriptScope scope = new ScriptScope ();
scope . createAttribute ( "loader" , loader );
// 执行Ruby脚本
ScriptExpression expression = new RubyExpression ( context , scope , script );
Map < String , Double > data = expression . doWith ( Map . class );
Assert . assertEquals ( 0.005825241096317768D , data . get ( "precision" ), 0D );
Assert . assertEquals ( 0.011579763144254684D , data . get ( "recall" ), 0D );
Assert . assertEquals ( 1.270874261856079D , data . get ( "mae" ), 0D );
Assert . assertEquals ( 2.425075054168701D , data . get ( "mse" ), 0D );
name | Dataset | training (milliseconds) | Prediction (milliseconds) | AUC | MAP | MRR | NDCG | Novelty | Precision | Recall |
---|---|---|---|---|---|---|---|---|---|---|
MostPopular | filmtrust | 43 | 273 | 0.92080 | 0.41246 | 0.57196 | 0.51583 | 11.79295 | 0.33230 | 0.62385 |
RandomGuess | filmtrust | 38 | 391 | 0.51922 | 0.00627 | 0.02170 | 0.01121 | 91.94900 | 0.00550 | 0.01262 |
name | Dataset | training (milliseconds) | Prediction (milliseconds) | AUC | MAP | MRR | NDCG | Novelty | Precision | Recall |
---|---|---|---|---|---|---|---|---|---|---|
AHr | filmtrust | 12448 | 253 | 0.89324 | 0.38967 | 0.53990 | 0.48338 | 21.13004 | 0.32295 | 0.56864 |
AspectRanking | filmtrust | 177 | 58 | 0.85130 | 0.15498 | 0.42480 | 0.26012 | 37.36273 | 0.13302 | 0.31292 |
BHFreeRanking | filmtrust | 5720 | 4257 | 0.92080 | 0.41316 | 0.57231 | 0.51662 | 11.79567 | 0.33276 | 0.62500 |
BPR | filmtrust | 4228 | 137 | 0.89390 | 0.39886 | 0.54790 | 0.49180 | 21.46738 | 0.32268 | 0.57623 |
BUCMRanking | filmtrust | 2111 | 1343 | 0.90782 | 0.39794 | 0.55776 | 0.49651 | 13.08073 | 0.32407 | 0.59141 |
CDAE | filmtrust | 89280 | 376 | 0.91880 | 0.40759 | 0.56855 | 0.51089 | 11.82466 | 0.33051 | 0.61967 |
CliMF | filmtrust | 48429 | 140 | 0.88293 | 0.37395 | 0.52407 | 0.46572 | 19.38964 | 0.32049 | 0.54605 |
DeepFM | filmtrust | 69264 | 99 | 0.91679 | 0.40580 | 0.56995 | 0.50985 | 11.90242 | 0.32719 | 0.61426 |
EALS | filmtrust | 850 | 185 | 0.86132 | 0.31263 | 0.45680 | 0.39475 | 20.08964 | 0.27381 | 0.46271 |
FISMAUC | filmtrust | 2338 | 663 | 0.91216 | 0.40032 | 0.55730 | 0.50114 | 12.07469 | 0.32845 | 0.60294 |
FISMRMSE | filmtrust | 4030 | 729 | 0.91482 | 0.40795 | 0.56470 | 0.50920 | 11.91234 | 0.33044 | 0.61107 |
GBPR | filmtrust | 14827 | 150 | 0.92113 | 0.41003 | 0.57144 | 0.51464 | 11.87609 | 0.33090 | 0.62512 |
HMM | game | 38697 | 11223 | 0.80559 | 0.18156 | 0.37516 | 0.25803 | 16.01041 | 0.14572 | 0.22810 |
ItemBigram | filmtrust | 12492 | 61 | 0.88807 | 0.33520 | 0.46870 | 0.42854 | 17.11172 | 0.29191 | 0.53308 |
ItemKNNRanking | filmtrust | 2683 | 250 | 0.87438 | 0.33375 | 0.46951 | 0.41767 | 20.23449 | 0.28581 | 0.49248 |
LDA | filmtrust | 696 | 161 | 0.91980 | 0.41758 | 0.58130 | 0.52003 | 12.31348 | 0.33336 | 0.62274 |
LambdaFMStatic | game | 25052 | 27078 | 0.87064 | 0.27294 | 0.43640 | 0.34794 | 16.47330 | 0.13941 | 0.35696 |
LambdaFMWeight | game | 25232 | 28156 | 0.87339 | 0.27333 | 0.43720 | 0.34728 | 14.71413 | 0.13742 | 0.35252 |
LambdaFMDynamic | game | 74218 | 27921 | 0.87380 | 0.27288 | 0.43648 | 0.34706 | 13.50578 | 0.13822 | 0.35132 |
ListwiseMF | filmtrust | 714 | 161 | 0.90820 | 0.40511 | 0.56619 | 0.50521 | 15.53665 | 0.32944 | 0.60092 |
PLSA | filmtrust | 1027 | 116 | 0.89950 | 0.41217 | 0.57187 | 0.50597 | 16.01080 | 0.32401 | 0.58557 |
RankALS | filmtrust | 3285 | 182 | 0.85901 | 0.29255 | 0.51014 | 0.38871 | 25.27197 | 0.22931 | 0.42509 |
RankCD | product | 1442 | 8905 | 0.56271 | 0.01253 | 0.04618 | 0.02682 | 55.42019 | 0.01548 | 0.03520 |
RankSGD | filmtrust | 309 | 113 | 0.80388 | 0.23587 | 0.42290 | 0.32081 | 42.83305 | 0.19363 | 0.35374 |
RankVFCD | product | 54273 | 6524 | 0.58022 | 0.01784 | 0.06181 | 0.03664 | 62.95810 | 0.01980 | 0.04852 |
SLIM | filmtrust | 62434 | 91 | 0.91849 | 0.44851 | 0.61083 | 0.54557 | 16.67990 | 0.34019 | 0.63021 |
UserKNNRanking | filmtrust | 1154 | 229 | 0.90752 | 0.41616 | 0.57525 | 0.51393 | 12.90921 | 0.32891 | 0.60152 |
VBPR | product | 184473 | 15304 | 0.54336 | 0.00920 | 0.03522 | 0.01883 | 45.05101 | 0.01037 | 0.02266 |
WBPR | filmtrust | 20705 | 183 | 0.78072 | 0.24647 | 0.33373 | 0.30442 | 17.18609 | 0.25000 | 0.35516 |
WRMF | filmtrust | 482 | 158 | 0.90616 | 0.43278 | 0.58284 | 0.52480 | 15.17956 | 0.32918 | 0.60780 |
RankGeoFM | FourSquare | 368436 | 1093 | 0.72708 | 0.05485 | 0.24012 | 0.11057 | 37.50040 | 0.07866 | 0.08640 |
SBPR | filmtrust | 41481 | 247 | 0.91010 | 0.41189 | 0.56480 | 0.50726 | 15.67905 | 0.32440 | 0.59699 |
name | Dataset | training (milliseconds) | Prediction (milliseconds) | AUC | MAP | MRR | NDCG | Novelty | Precision | Recall |
---|---|---|---|---|---|---|---|---|---|---|
EFMRanking | dc_dense | 2066 | 2276 | 0.61271 | 0.01611 | 0.04631 | 0.04045 | 53.26140 | 0.02387 | 0.07357 |
TFIDF | musical_instruments | 942 | 1085 | 0.52756 | 0.01067 | 0.01917 | 0.01773 | 72.71228 | 0.00588 | 0.03103 |
name | Dataset | training (milliseconds) | Prediction (milliseconds) | MAE | MPE | MSE |
---|---|---|---|---|---|---|
ConstantGuess | filmtrust | 137 | 45 | 1.05608 | 1.00000 | 1.42309 |
GlobalAverage | filmtrust | 60 | 13 | 0.71977 | 0.77908 | 0.85199 |
ItemAverage | filmtrust | 59 | 12 | 0.72968 | 0.97242 | 0.86413 |
ItemCluster | filmtrust | 471 | 41 | 0.71976 | 0.77908 | 0.85198 |
RandomGuess | filmtrust | 38 | 8 | 1.28622 | 0.99597 | 2.47927 |
UserAverage | filmtrust | 35 | 9 | 0.64618 | 0.97242 | 0.70172 |
UserCluster | filmtrust | 326 | 45 | 0.71977 | 0.77908 | 0.85199 |
name | Dataset | training (milliseconds) | Prediction (milliseconds) | MAE | MPE | MSE |
---|---|---|---|---|---|---|
AspectRating | filmtrust | 220 | 5 | 0.65754 | 0.97918 | 0.71809 |
ASVDPlusPlus | filmtrust | 5631 | 8 | 0.71975 | 0.77921 | 0.85196 |
BiasedMF | filmtrust | 92 | 6 | 0.63157 | 0.98387 | 0.66220 |
BHFreeRating | filmtrust | 6667 | 76 | 0.71974 | 0.77908 | 0.85198 |
BPMF | filmtrust | 25942 | 52 | 0.66504 | 0.98465 | 0.70210 |
BUCMRating | filmtrust | 1843 | 30 | 0.64834 | 0.99102 | 0.67992 |
CCD | product | 15715 | 9 | 0.96670 | 0.93947 | 1.62145 |
FFM | filmtrust | 5422 | 6 | 0.63446 | 0.98413 | 0.66682 |
FMALS | filmtrust | 1854 | 5 | 0.64788 | 0.96032 | 0.73636 |
fmsgd | filmtrust | 3496 | 10 | 0.63452 | 0.98426 | 0.66710 |
GPLSA | filmtrust | 2567 | 7 | 0.67311 | 0.98972 | 0.79883 |
IRRG | filmtrust | 40284 | 6 | 0.64766 | 0.98777 | 0.73700 |
ItemKNNRating | filmtrust | 2052 | 27 | 0.62341 | 0.95394 | 0.67312 |
LDCC | filmtrust | 8650 | 84 | 0.66383 | 0.99284 | 0.70666 |
LLORMA | filmtrust | 16618 | 82 | 0.64930 | 0.96591 | 0.76067 |
MFALS | filmtrust | 2944 | 5 | 0.82939 | 0.94549 | 1.30547 |
NMF | filmtrust | 1198 | 8 | 0.67661 | 0.96604 | 0.83493 |
PMF | filmtrust | 215 | 7 | 0.72959 | 0.98165 | 0.99948 |
RBM | filmtrust | 19551 | 270 | 0.74484 | 0.98504 | 0.88968 |
RFRec | filmtrust | 16330 | 54 | 0.64008 | 0.97112 | 0.69390 |
SVDPlusPlus | filmtrust | 452 | 26 | 0.65248 | 0.99141 | 0.68289 |
URP | filmtrust | 1514 | 25 | 0.64207 | 0.99128 | 0.67122 |
UserKNNRating | filmtrust | 1121 | 135 | 0.63933 | 0.94640 | 0.69280 |
RSTE | filmtrust | 4052 | 10 | 0.64303 | 0.99206 | 0.67777 |
SocialMF | filmtrust | 918 | 13 | 0.64668 | 0.98881 | 0.68228 |
SoRec | filmtrust | 1048 | 10 | 0.64305 | 0.99232 | 0.67776 |
SoReg | filmtrust | 635 | 8 | 0.65943 | 0.96734 | 0.72760 |
TimeSVD | filmtrust | 11545 | 36 | 0.68954 | 0.93326 | 0.87783 |
TrustMF | filmtrust | 2038 | 7 | 0.63787 | 0.98985 | 0.69017 |
TrustSVD | filmtrust | 12465 | twenty two | 0.61984 | 0.98933 | 0.63875 |
AssociationRule | filmtrust | 2628 | 195 | 0.90853 | 0.41801 | 0.57777 |
PersonalityDiagnosis | filmtrust | 45 | 642 | 0.72964 | 0.76620 | 1.03071 |
PRankD | filmtrust | 3321 | 170 | 0.74472 | 0.22894 | 0.32406 |
SlopeOne | filmtrust | 135 | 28 | 0.63788 | 0.96175 | 0.71057 |
name | Dataset | training (milliseconds) | Prediction (milliseconds) | MAE | MPE | MSE |
---|---|---|---|---|---|---|
EFMRating | dc_dense | 659 | 8 | 0.61546 | 0.85364 | 0.78279 |
HFT | musical_instruments | 162753 | 13 | 0.64272 | 0.94886 | 0.81393 |
TopicMFAT | musical_instruments | 6907 | 7 | 0.61896 | 0.98734 | 0.72545 |
TopicMFMT | musical_instruments | 6323 | 7 | 0.61896 | 0.98734 | 0.72545 |
name | question | Description/thesis |
---|---|---|
RandomGuess | Ranking Rating | random guess |
MostPopular | Ranking | most popular |
ConstantGuess | Rating | constant guess |
GlobalAverage | Rating | global average |
ItemAverage | Rating | Item average |
ItemCluster | Rating | Item clustering |
UserAverage | Rating | average user |
UserCluster | Rating | User clustering |
name | question | Description/thesis |
---|---|---|
AspectModel | Ranking Rating | Latent class models for collaborative filtering |
BHFree | Ranking Rating | Balancing Prediction and Recommendation Accuracy: Hierarchical Latent Factors for Preference Data |
BUCM | Ranking Rating | Modeling Item Selection and Relevance for Accurate Recommendations |
ItemKNN | Ranking Rating | Item-based collaborative filtering |
UserKNN | Ranking Rating | User-based collaborative filtering |
AHr | Ranking | Improving pairwise learning for item recommendation from implicit feedback |
BPR | Ranking | BPR: Bayesian Personalized Ranking from Implicit Feedback |
CliMF | Ranking | CLiMF: learning to maximize reciprocal rank with collaborative less-is-more filtering |
EALS | Ranking | Collaborative filtering for implicit feedback dataset |
FISM | Ranking | FISM: Factored Item Similarity Models for Top-N Recommender Systems |
GBPR | Ranking | GBPR: Group Preference Based Bayesian Personalized Ranking for One-Class Collaborative Filtering |
HMMForCF | Ranking | A Hidden Markov Model Purpose: A class for the model, including parameters |
ItemBigram | Ranking | Topic Modeling: Beyond Bag-of-Words |
LambdaFM | Ranking | LambdaFM: Learning Optimal Ranking with Factorization Machines Using Lambda Surrogates |
LDA | Ranking | Latent Dirichlet Allocation for implicit feedback |
ListwiseMF | Ranking | List-wise learning to rank with matrix factorization for collaborative filtering |
PLSA | Ranking | Latent semantic models for collaborative filtering |
RankALS | Ranking | Alternating Least Squares for Personalized Ranking |
RankSGD | Ranking | Collaborative Filtering Ensemble for Ranking |
SLIM | Ranking | SLIM: Sparse Linear Methods for Top-N Recommender Systems |
WBPR | Ranking | Bayesian Personalized Ranking for Non-Uniformly Sampled Items |
WRMF | Ranking | Collaborative filtering for implicit feedback datasets |
Rank-GeoFM | Ranking | Rank-GeoFM: A ranking based geographical factorization method for point of interest recommendation |
SBPR | Ranking | Leveraging Social Connections to Improve Personalized Ranking for Collaborative Filtering |
AssociationRule | Ranking | A Recommendation Algorithm Using Multi-Level Association Rules |
PRankD | Ranking | Personalized ranking with diversity |
AsymmetricSVD++ | Rating | Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model |
AutoRec | Rating | AutoRec: Autoencoders Meet Collaborative Filtering |
BPMF | Rating | Bayesian Probabilistic Matrix Factorization using Markov Chain Monte Carlo |
CCD | Rating | Large-Scale Parallel Collaborative Filtering for the Netflix Prize |
FFM | Rating | Field Aware Factorization Machines for CTR Prediction |
GPLSA | Rating | Collaborative Filtering via Gaussian Probabilistic Latent Semantic Analysis |
IRRG | Rating | Exploiting Implicit Item Relationships for Recommender Systems |
MFALS | Rating | Large-Scale Parallel Collaborative Filtering for the Netflix Prize |
NMF | Rating | Algorithms for Non-negative Matrix Factorization |
PMF | Rating | PMF: Probabilistic Matrix Factorization |
RBM | Rating | Restricted Boltzman Machines for Collaborative Filtering |
RF-Rec | Rating | RF-Rec: Fast and Accurate Computation of Recommendations based on Rating Frequencies |
SVD++ | Rating | Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model |
URP | Rating | User Rating Profile: a LDA model for rating prediction |
RSTE | Rating | Learning to Recommend with Social Trust Ensemble |
SocialMF | Rating | A matrix factorization technique with trust propagation for recommendation in social networks |
SoRec | Rating | SoRec: Social recommendation using probabilistic matrix factorization |
SoReg | Rating | Recommender systems with social regularization |
TimeSVD++ | Rating | Collaborative Filtering with Temporal Dynamics |
TrustMF | Rating | Social Collaborative Filtering by Trust |
TrustSVD | Rating | TrustSVD: Collaborative Filtering with Both the Explicit and Implicit Influence of User Trust and of Item Ratings |
PersonalityDiagnosis | Rating | A brief introduction to Personality Diagnosis |
SlopeOne | Rating | Slope One Predictors for Online Rating-Based Collaborative Filtering |
name | question | Description/thesis |
---|---|---|
EFM | Ranking Rating | Explicit factor models for explainable recommendation based on phrase-level sentiment analysis |
TF-IDF | Ranking | Term frequency-inverse document frequency |
HFT | Rating | Hidden factors and hidden topics: understanding rating dimensions with review text |
TopicMF | Rating | TopicMF: Simultaneously Exploiting Ratings and Reviews for Recommendation |
JStarCraft RNS follows the Apache 2.0 protocol, and all derivative works based on it belong to the author of the derivative work.
author | Hong Zhaohua |
---|---|
[email protected], [email protected] |
Special thanks to the LibRec team and the recommendation system QQ group (274750470) for their support and help in recommendation.
Special thanks to Lu Xugang for his support and help in searching.
Special thanks to Hangzhou Chengzi Information Technology Co., Ltd. for donating to the JStarCraft project.