weka2
2015-09-07 14:44
211 查看
GridSearch(源码)
主要参数设置:m_MinX m_MaxX m_StepX
m_LabelX m_X_Basem_MinY
m_MaxYm_StepY
m_LabelY m_Y_Base
classifier evaluation等等
主要函数:
public void buildClassifier(Instances data){...}
|
protected PointDouble findBest(){...}
|
protected PointDouble determineBestInGrid(Grid grid, Instances inst, int cv){...}
|
public EvaluationTask(GridSearch owner, SetupGenerator generator,Instances inst, PointDouble values, int folds, int eval) {...}
buildClassifier-> findBest()->determineBestInGrid->EvaluationTask
重要的程序:
findBest :
result = determineBestInGrid(m_Grid, sample, 2);
确定了m_MinX等参数后可以生成一个网格grid,对网格中每一对点对(x,y)先用2折交叉验证选出其中performance最好的那一对点对,即result。
判断result在网格中的位置center是否在边界上,如果在边界上并且可以扩展的话,得到新的center,然后再以新的center为中心的邻域组成的grid进行10折交叉验证,找出
其中更最优的点对result。如果新的result和旧的相同,那么退出,否则继续上述过程,具体程序如下:
findBest :
finished=false;
if (!finished) {
do {
iteration++;
resultOld = (PointDouble) result.clone();
center = m_Grid.getLocation(result); //获得在grid中的位置
if (m_Grid.isOnBorder(center)) {
log("Center is on border of grid.");
if (getGridIsExtendable()) {
if (m_GridExtensionsPerformed == getMaxGridExtensions()) {
log("Maximum number of extensions reached!\n");
finished = true;
} else {
m_GridExtensionsPerformed++;
m_Grid = m_Grid.extend(result); //扩展
center = m_Grid.getLocation(result);
log("Extending grid (" + m_GridExtensionsPerformed + "/"
+ getMaxGridExtensions() + "):\n" + m_Grid + "\n");
}
} else {
finished = true;
}
}
if (!finished) {
neighborGrid = m_Grid.subgrid((int) center.getY() + 1,
(int) center.getX() - 1, (int) center.getY() - 1,
(int) center.getX() + 1);
result = determineBestInGrid(neighborGrid, sample, 10);
log("\nResult of Step 2/Iteration " + (iteration) + ":\n" + result);
finished = m_UniformPerformance;
if (result.equals(resultOld)) {
finished = true;
log("\nNo better point found.");
}
}
} while (!finished);
}
determineBestInGrid:
Collections.sort(m_Performances, new PerformanceComparator(m_Evaluation)); //排序
result = m_Performances.get(m_Performances.size() - 1).getValues(); //选择最大值所对应的点对
EvaluationTask:
x = m_Generator.evaluate(m_Values.getX(), true); //计算x的值
y = m_Generator.evaluate(m_Values.getY(), false); //计算y的值
classifier = (Classifier) m_Generator.setup(m_Classifier, x, y);
eval = new Evaluation(data);
eval.crossValidateModel(classifier, data, m_Folds, new Random(m_Owner.getSeed())); //交叉验证
performance = new Performance(m_Values, eval);
m_Owner.addPerformance(performance, m_Folds); //
整个程序最主要就是这几个函数。
相关文章推荐
- 生产者/消费者问题的多种Java实现方式
- 【转】file_get_contents无法请求https连接的解决方法
- 获取手机信息,型号,版本等
- 去掉字符的首部和尾部字符串的空格以及去掉中间连续的空格为一个空格
- POJ1118解题报告
- android cts测试失败项以及原因
- 如何在cisco router完美删除单条ACL?
- Axure的全局变量
- Scala中Infix Type实战详解之Scala学习笔记-45
- 局域网不同用户同时登录同一个网站,会出现session乱窜的问题
- JavaMail 发送Email(含附件)
- 学习之路
- linux编译安装git
- c++:批量把数据写入同一文件夹下不同文件
- Vagrant Quickstart
- openURL
- IOS彩票第二天设置界面(1)
- Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
- OpenGL和Mesa的关系
- svn: E000017: Can't create directory '/home/cmcc/.svn/tmp': File exists