ASSearch                 搜索算法类

ASEvaluation              特征结果集评价算法类。该类有接口接受样本输入

AttributeEvaluation        单个特征的评价类

AttributeSetEvaluation    特征集的评价类

AttributeSelection          特征选择类, 接受ASSearch与ASEvaluation作为输入

AttributeTransformer     数据转换类

Best First Search:

m_bestMerit, 记录评价最高的得分

m_cacheSize, 已评价了多少组不同的特征; lookup记录已评价属性集及其评价分的集合

m_searchDirection, 搜索方向:正向,后向,双向

m_starting, 初始结果集

m_totalEvals, 已评价次数>= m_cacheSize

1)    初始化

如果已给出初始结果集,则此轮结果集就是初始结果集;若未给出初始结果集且为双向搜索,则此轮结果集就是所有的属性集。

计算此轮结果集的评价得分, 将该结果集与得分放入已查数据中; 将该结果集放入待搜索队列中

2)    迭代搜索

迭代退出条件是, 如果连续多次扩展得到的结果集都没有比当前最好的更优,则退出,Stale < m_max_stale;  或者待扩展队列已为空。

2.0)取得待扩展队列头

2.1)根据搜索方向扩展该属性集得到新的属性集:顺序扫描每个属性,如果未处理过该属性, 则将该属性增加到待扩展集中。(如果是backward搜索, 则是将该属性从待扩展集中移除;后面类同)

2.2)如果该新的属性集未曾处理过, 则计算其评价分、将其增加到lookup中; 将该属性集加入到待扩展集中。 判断此次扩展是否比当前最好的更优、更优则记录相关信息。

2.3)恢复到迭代2.0)状态时的属性集,迭代2.1)中扫描下一个未曾处理的属性

Notes:如果是双向搜索时,则步骤2中,都是在步骤2.0)的基础之上先正向对所有属性做测试;然后逆向对所有属性做测试。就是把双向分为了先正向后逆向两个完全分开的过程。

3)步骤2退出时, 得到了最佳属性集合

code

while (stale < m_maxStale) { added = false; if (m_searchDirection == SELECTION_BIDIRECTIONAL) { // bi-directional search done = 2; sd = SELECTION_FORWARD; } else { done = 1; } // finished search? if (bfList.size() == 0) { stale = m_maxStale; break; } // copy the attribute set at the head of the list tl = bfList.getLinkAt(0); temp_group = (BitSet)(tl.getData()[0]); temp_group = (BitSet)temp_group.clone(); // remove the head of the list bfList.removeLinkAt(0); // count the number of bits set (attributes) //TODO 计算temp_group中已处理过的属性个数 size do { for (i = 0; i < m_numAttribs; i++) { //测试第i个属性是否已处理过。 z==true时表示未处理过、待处理 if (sd == SELECTION_FORWARD) { z = ((i != m_classIndex) && (!temp_group.get(i))); } else { z = ((i != m_classIndex) && (temp_group.get(i))); } if (z) { // set the bit (attribute to add/delete) // 如果待处理, 则对正向搜索而言就是增加到属性集中; 逆向搜索就是从属性集中删除 if (sd == SELECTION_FORWARD) { temp_group.set(i); size++; } else { temp_group.clear(i); size--; } /* if this subset has been seen before, then it is already in the list (or has been fully expanded) */ //如果该扩展后的属性集已见过,则取出其评价分; 未见过则处理: tt = (BitSet)temp_group.clone(); hashC = tt.toString(); if (lookup.containsKey(hashC) == false) { merit = ASEvaluator.evaluateSubset(temp_group); m_totalEvals++; } else { merit = ((Double)lookup.get(hashC)).doubleValue(); cacheHits++; } // insert this one in the list。 增加到待扩展集中 Object[] add = new Object[1]; add[0] = tt.clone(); bfList.addToList(add, merit); // is this better than the best? if (sd == SELECTION_FORWARD) { z = ((merit - best_merit) > 0.00001); } else if (merit == best_merit) { z = (size < best_size); } else { z = (merit > best_merit); } } if (z) //比当前最佳更好, 则记录相关信息 { added = true; stale = 0; best_merit = merit; best_size = size; best_group = (BitSet)(temp_group.clone()); } // unset this addition(deletion) //重置当前选择, 以便进行下一个属性测试 if (sd == SELECTION_FORWARD) { temp_group.clear(i); size--; } else { temp_group.set(i); size++; } }end for if (done == 2) { sd = SELECTION_BACKWARD; } done--; } while (done > 0); ///end do /* if we haven't added a new attribute subset then full expansion of this node hasen't resulted in anything better */ if (!added) { stale++; } }///end while m_bestMerit = best_merit; return attributeList(best_group);

weka: best first search相关推荐

  1. Java机器学习库ML之二Feature Selection(特征选择)

    机器学习中训练模型的前提必备工作就是特征选择,起到降维和降低计算开销的目的,当然在获取尽可能小的特征子集的同时,应不显著降低分类精度.不影响类分布.保持特征子集的稳定适应性强等. ML库提供了特征选择 ...

  2. 《Python程序设计》python常用的格式转换

    #字典 tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} tinydict['Age'] = 8 # 更新 tinydict['Schoo ...

  3. 【printf函数】vprintf使用参数列表(va_list)传递参数

    [二进制漏洞]PWN学习之格式化字符串漏洞 Linux篇 格式化输出函数 printf函数族功能介绍 printf参数 type(类型) flags(标志) number(宽度) precision( ...

  4. weka: exhaustive search

    穷举搜索. 假设10个属性, 需要找出2^^10 种可能情形中, 那种的merit最优. 每次直接根据迭代次数space产生属性集 code: //best_group 初始为空 //best_mer ...

  5. Weka学习四(属性选择)

    在这一节我们看看属性选择.在数据挖掘的研究中,通常要通过距离来计算样本之间的距离,而样本距离是通过属性值来计算的.我们知道对于不同的属性,它们在样本空间的权重是不一样的,即它们与类别的关联度是不同的, ...

  6. 使用Weka进行数据挖掘

    1.简介 数据挖掘.机器学习这些字眼,在一些人看来,是门槛很高的东西.诚然,如果做算法实现甚至算法优化,确实需要很多背景知识.但事实是,绝大多数数据挖掘工程师,不需要去做算法层面的东西.他们的精力,集 ...

  7. 【weka】Use weka in your java code

    http://quweiprotoss.blog.163.com/blog/static/40882883200931113314795/ 最常用的组件(components)是: l  Instan ...

  8. Weka数据挖掘——选择属性

    如果你现在还不努力,那么将来的你会过的更加吃力. 1 选择属性 属性选择是通过搜索数据中所有可能的属性组合,以找到预测效果最好的属性子集.手工选择属性既繁琐又容易出错,为了帮助用户事项选择属性自动化. ...

  9. 数据科学工具Weka的学习路径

    在这个R和Python主宰数据科学的时代,我们来看一下另一个叫做Weka的数据科学工具.Weka已经出现了一段时间,是在Waitako大学为了研究的目的而内部发展的.简单的学习曲线使得Weka具有尝试 ...

最新文章

  1. [转]优化Flash性能
  2. MySQL 命令行下执行.sql脚本
  3. 纯php mysql_【总结】纯php 操作 mysql 数据库
  4. SpringMvc 注解 @InitBinder 表单多对象精准绑定接收
  5. 网页载入动画 php,网站页面加载动画代码
  6. Symfony2博客应用程序教程:第四部分(续)-测试安全页
  7. java lambda表达式详解_Java8新特性:Lambda表达式详解
  8. 对接海外faceid
  9. dhcp网络服务的搭建和配置
  10. avl树 php,PHP实现平衡二叉树(AVL树)
  11. 如何在html中写json格式数据类型,html中如何美化展示json格式数据
  12. HeadFirstJava
  13. 从软件的价值体系开始向技术的反向分析
  14. 采用生产者消费者模式爬取毛豆新车网
  15. Matlab中plot函数一共能调用颜色字母
  16. RHCE认证考试介绍
  17. HDU - 3174(计算几何)
  18. Git篇:使用Git将代码库更新到本地(完整版)
  19. html制作多媒体课件,多媒体课件设计与制作 教师课件制作平台
  20. invoke调用成员方法(无参和有参):

热门文章

  1. vs2010利用属性表自动配置OpenCV(win7的64位系统,opencv版本是2.4.10)
  2. Vue.js 状态过渡
  3. Java反射最佳实践
  4. Git Workflow工作流示意图
  5. 决策树算法介绍及应用
  6. 压缩感知(I) A Compressed Sense of Compressive Sensing (I)
  7. 利用Matlab优化工具箱解数独问题
  8. GMM、fisher vector、SIFT与HOG特征资料
  9. word或wps中mathtype在工具栏/菜单栏消失的解决方法
  10. 尾递归对时间与空间复杂度的影响(上)