RankLib源码分析(一):主框架
来源:互联网 发布:深圳交通数据采集 编辑:程序博客网 时间:2024/05/24 00:49
Evaluator类分析:
1.main函数的入口:
ciir.umass.edu.eval.Evaluator
2.指定算法
221行:
else if(args[i].compareTo("-ranker")==0)
rankerType = Integer.parseInt(args[++i]);
rankerType = Integer.parseInt(args[++i]);
413行:
Evaluator e = new Evaluator(rType2[rankerType], trainMetric, testMetric);
3.指定数据的输入,划分(指定训练集,校验集和测试集)
Evaluator.evaluate函数(多个该函数,指定了不同的数据输入方式)
4.训练器
evaluate函数里:
RankerTrainer trainer = new RankerTrainer();
Ranker ranker = trainer.train(type, trainingData, validation, features, trainScorer);
Ranker ranker = trainer.train(type, trainingData, validation, features, trainScorer);
5.测试结果
evaluate函数里:
double rankScore = evaluate(ranker, testData);
RankerTrainer类 分析:
1.通过RankerFactory,选定出指定的算法类(统一的基类为:Ranker类),具体有:
new MART(),
new RankBoost(),
new RankNet(),
new AdaRank(),
new CoorAscent(),
new LambdaRank(),
new LambdaMART(),
new ListNet(),
new RFRanker(),
new LinearRegRank()
2.记录训练的时间
Ranker类分析(抽象类):
1.该类为所有的算法的基类,包含了一些通用的方法,
例如,设置训练集,设置检验集,设置feature,设置评价方式,以及给出评分后的排序
public RankList rank(RankList rl)
{
double[] scores = new double[rl.size()];
for(int i=0;i<rl.size();i++)
scores[i] = eval(rl.get(i));
int[] idx = MergeSorter.sort(scores, false);
return new RankList(rl, idx);
}
public List<RankList> rank(List<RankList> l)
{
List<RankList> ll = new ArrayList<RankList>();
for(int i=0;i<l.size();i++)
ll.add(rank(l.get(i)));
return ll;
}
{
double[] scores = new double[rl.size()];
for(int i=0;i<rl.size();i++)
scores[i] = eval(rl.get(i));
int[] idx = MergeSorter.sort(scores, false);
return new RankList(rl, idx);
}
public List<RankList> rank(List<RankList> l)
{
List<RankList> ll = new ArrayList<RankList>();
for(int i=0;i<l.size();i++)
ll.add(rank(l.get(i)));
return ll;
}
2.为具体算法实现保留的方法主要有:
public abstract void init(); //初始化
public abstract void learn(); //学习模型
public double eval(DataPoint p) //给指定点打分
{
return -1.0;
}
public abstract void learn(); //学习模型
public double eval(DataPoint p) //给指定点打分
{
return -1.0;
}
public abstract String model(); //建模
3.具体的实现类只需要考虑学习和评分即可,具体的排序已在该抽象类完成
4.数据格式
3 qid:1 1:1 2:1 3:0 4:0.2 5:0 # 1A
DataPoint:
1.label,评分(1,2,3,4等)相当如bad,good,very good之类
2.id,文档编号;
3.后面全是feature;
要求同一个qid的必须放到一起。
RankList是相同qid的DataPoint的列表,无排序。
0 0
- RankLib源码分析(一):主框架
- RankLib源码分析(二):RankNet
- Ranklib部分源码分析
- RankLib源码分析(三)----LambdaRank
- RankLib源码分析---MART(GBRT)
- RankLib源码分析---RFRanker(随机森林)
- Ranklib分析
- LambdaMART简介——基于Ranklib源码(一 lambda计算)
- LambdaMART简介——基于Ranklib源码(一 lambda计算)
- JDK日志框架源码分析(一)
- skynet框架 源码分析 一
- min3d框架源码分析(一)
- OKHttp框架源码分析(一)
- MINA框架源码分析(一)
- skynet框架 源码分析 一
- 思科VPP源码分析(路由框架分析一)
- 网络服务器开发框架spserver源码分析 (一)
- 集合框架源码分析篇一(接口篇)
- IOS开发之格式化日期时间
- 241 map 在什么情况下会发生死锁;stl 中的 map 是怎么实现的?
- android项目包名修改,5分钟内搞定重新运行
- HTTPS连接的前几毫秒发生了什么
- Android测试QQ群讨论交流内容-自动化测试Case粒度、Case耦合性、robotium和robolectric看法
- RankLib源码分析(一):主框架
- 242 剪刀包袱锤的方式决定谁请客
- HighCharts静态柱状图实现
- 解决wince platform 使用超过180天
- ios推送消息的基本原理
- 用solr自动补全
- CMM概括介绍
- GO语言学习-函数探究
- RankLib源码分析(二):RankNet