这里就不描述ID3算法了。
关于如何使用java实现,其实网上也不少,只是感觉没有拿来就直接能用的,而且,就我搜索到的实现,并没有能够将属性值以及最后的结果加入进来。
算是一个小小的加强版吧。
整个项目已经上传上来了。 项目截图如下:
值得说的有几个地方:
1. 从arff之中解析出属性
public static final String ATTR_PARSE_PATTERN = "@attribute(.*)[{](.*?)[}]";
使用的是正则来进行解析的。这样的解析方式 无法解析数字类型的属性, 比如 属性为numeric or Real的时候就不行了~
2. 就我学到的ID3, 熵的计算只有两个计算因子,即 p+ 跟 p-
我看到有的文章说 熵的计算可以是 p1 p2 ... pn 感觉很奇怪。 因为类似的公式计算出来的熵值居然>1 !
我计算熵值的代码如下:
public static double entropy(int positiveCount, int negativeCount) { int sum = positiveCount + negativeCount; double positiveP = (double)positiveCount / (double)sum ; double negativeP = (double)negativeCount / (double)sum; return Math.abs(positiveP * log2(positiveP) + negativeP * log2(negativeP) ); }
3. 最后解释一下运行的结果:(数据来源是weka自带的weather.arff)
{ "attribute": "outlook", "options": { "rainy": { "attribute": "windy", "options": { }, "subLeafs": { "FALSE": { "count": 3, "attributeValue": "yes", "option": "FALSE" }, "TRUE": { "count": 2, "attributeValue": "no", "option": "TRUE" } } }, "sunny": { "attribute": "humidity", "options": { }, "subLeafs": { "normal": { "count": 2, "attributeValue": "yes", "option": "normal" }, "high": { "count": 3, "attributeValue": "no", "option": "high" } } } }, "subLeafs": { "overcast": { "count": 4, "attributeValue": "yes", "option": "overcast" } } }
attribute是属性的名字,option表示这个属性的分支条件,比如
attribute = outlook, option = rainy 这个分支对应的属性应该是 windy
每个树节点(TreeNode)下都应该跟至少一个叶子节点TreeLeaf 表示这条分支的结束
写了好几个小时终于写出来了。。。 就是现在还不能图形化的显示。。。
[2014-02-15] 增加了一个预测方法:
/** * 使用决策树进行预测 * @param dataSource <br> * HashMap: <br> * key: attribute name * value: attribute value * @param decistionTree * @return <br> * 预测结果 */ public String predict(Map<String, String> dataSource, TreeNode decistionTree) { String result = null; if(dataSource.containsKey(decistionTree.attribute)) { String currentAttributeValue = dataSource.get(decistionTree.attribute); if(decistionTree.options.containsKey(currentAttributeValue)) { return predict(dataSource, decistionTree.options.get(currentAttributeValue)); } else if(decistionTree.subLeafs.containsKey(currentAttributeValue)){ result = decistionTree.subLeafs.get(currentAttributeValue).attributeValue; } } return result; }
PS: 写得不够规范吧,当前目标是能写得出来 写得不好的地方还请各位看官指正
相关推荐
现在我们主要探讨的是如何使用Java实现ID3算法。 在Java中实现ID3算法,我们需要以下几个关键步骤: 1. **数据预处理**:首先,你需要将数据集转换成适合ID3算法处理的格式。数据集通常包含实例(样本)和属性...
在Java中实现ID3算法,我们需要理解其核心原理,并将其转化为可执行的代码。 ID3算法基于信息熵和信息增益来选择最优特征进行节点划分。熵是衡量数据纯度的指标,信息增益则是通过比较特征划分前后的熵变化来评估...
文件名`ID3`可能是指包含了整个决策树ID3算法实现的Java源代码文件。在阅读和理解代码时,要关注如何计算信息熵、信息增益,以及如何根据这些值选择最佳属性进行划分,同时注意树的构建和预测过程。 总的来说,ID3...
总的来说,用Java实现ID3算法涉及数据结构设计、信息熵与信息增益计算以及递归算法的运用。这个过程可以帮助我们理解决策树的构建原理,并为其他机器学习算法提供基础。同时,通过控制台输出或UI显示,可以让用户...
本文介绍了如何使用Java实现决策树ID3算法,包括算法原理、实现细节及代码解析。通过这种方式,可以更好地理解ID3算法的工作机制,并掌握其实现方法。此外,文件读取部分也是实现决策树算法的重要组成部分,确保了...
在Java中实现ID3算法可以帮助我们构建基于数据的决策树模型,用于预测未知数据的类别。以下是关于ID3算法及其Java实现的一些关键知识点: 1. **决策树基础**:决策树是一种直观易懂的机器学习模型,通过一系列问题...
4. **Java实现**:在Java中实现ID3算法,我们需要定义数据结构来存储训练集、特征和类别信息,以及计算信息熵和信息增益的函数。同时,需要实现决策树的构建过程,包括节点的创建、划分和终止条件判断。代码中应该...
在本案例中,我们将探讨如何用Java实现ID3算法,这是一种早期的决策树学习算法,由Ross Quinlan于1986年提出。 ID3(Iterative Dichotomiser 3)算法基于信息熵和信息增益来选择最优特征进行分裂。信息熵是度量数据...
总的来说,这个Java实现为理解ID3算法提供了一个实践平台,同时也为其他数据挖掘任务提供了基础。学习和理解这个实现,有助于深入掌握决策树分类的原理,并能应用于实际项目中。对于数据挖掘初学者来说,这是一个很...
这个例子来源于Quinlan的论文。 假设,有种户外活动。该活动能否正常进行与各种天气因素有关。不同的天气因素组合会产生两种后果,也就是分成2类:能进行活动或不能。我们用P表示该活动可以进行,N表示该活动无法...
在"research_encrypt-code"这个压缩包中,很可能包含了Java实现同态加密算法的源代码,包括密钥管理、加密、解密和操作加密数据的函数。通过研究这些代码,我们可以深入了解如何在实际应用中利用Java来构建安全的...
4. **Java实现**:在`ID3.java`文件中,开发者可能实现了ID3算法的类,包括读取数据(可能从`app.arff`文件中,这是一个常见的数据格式,用于存储WEKA等机器学习库的数据),计算信息熵、信息增益,以及构建和遍历...
在Java中实现FP树算法,我们可以按照以下步骤进行: 1. **数据预处理**:首先,我们需要对原始数据进行预处理,将交易数据转换为事务ID和项ID的形式,即每条记录表示一个交易,其中包含交易中出现的所有项。 2. **...
在这个Java实现中,我们将深入探讨ID3算法的基本原理、步骤以及如何在Java编程环境中进行实现。 ID3算法的核心思想是信息熵和信息增益。熵是用来衡量数据集合纯度的一个指标,信息增益则是通过选择最佳属性来减少熵...
本篇将深入探讨如何使用Java来实现数据挖掘算法,重点关注决策树和粗糙集两种方法。 首先,我们要了解决策树这一机器学习中的经典算法。决策树通过一系列规则和条件对数据进行分割,最终形成一个树状结构,用于预测...
总之,HS和LCR算法是分布式系统中实现领导者选举的基础,通过Java实现这些算法,可以理解和掌握分布式系统中的核心概念,为构建高可用、强一致性的分布式应用打下坚实基础。在实际工程实践中,我们还需要根据具体...
在Java编程语言中,我们可以利用面向对象的特点来实现这一算法。 ### 1. 死锁概念 在多任务环境下,如果两个或更多的进程互相等待对方释放资源,而它们都无法继续执行,就形成了死锁。银行家算法的出现就是为了...
实验中提供了Java实现的ID3算法代码,主要涉及以下几个关键函数: 1. **getClassList**:获取数据集中所有实例的目标属性(即评价类别)的集合。 2. **getSubMap**:根据指定列号,获取属性的取值及其出现次数。 3....
4. **GUI.java**:图形化界面的实现,可能使用了Java Swing或JavaFX库,显示当前系统状态,如资源分配情况、进程状态等,并提供交互功能,如启动算法、模拟进程请求等。 5. **Util.java**:辅助工具类,可能包含一些...