`

使用Java实现的ID3算法

阅读更多

这里就不描述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>
 * &nbsp;&nbsp; key: attribute name
 * &nbsp;&nbsp; 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: 写得不够规范吧,当前目标是能写得出来 写得不好的地方还请各位看官指正

  • 大小: 12.3 KB
0
0
分享到:
评论

相关推荐

    决策树ID3算法java实现

    现在我们主要探讨的是如何使用Java实现ID3算法。 在Java中实现ID3算法,我们需要以下几个关键步骤: 1. **数据预处理**:首先,你需要将数据集转换成适合ID3算法处理的格式。数据集通常包含实例(样本)和属性...

    java实现ID3算法

    在Java中实现ID3算法,我们需要理解其核心原理,并将其转化为可执行的代码。 ID3算法基于信息熵和信息增益来选择最优特征进行节点划分。熵是衡量数据纯度的指标,信息增益则是通过比较特征划分前后的熵变化来评估...

    决策树ID3算法(Java实现)

    文件名`ID3`可能是指包含了整个决策树ID3算法实现的Java源代码文件。在阅读和理解代码时,要关注如何计算信息熵、信息增益,以及如何根据这些值选择最佳属性进行划分,同时注意树的构建和预测过程。 总的来说,ID3...

    JAVA实现ID3算法

    总的来说,用Java实现ID3算法涉及数据结构设计、信息熵与信息增益计算以及递归算法的运用。这个过程可以帮助我们理解决策树的构建原理,并为其他机器学习算法提供基础。同时,通过控制台输出或UI显示,可以让用户...

    java实现决策树ID3算法

    本文介绍了如何使用Java实现决策树ID3算法,包括算法原理、实现细节及代码解析。通过这种方式,可以更好地理解ID3算法的工作机制,并掌握其实现方法。此外,文件读取部分也是实现决策树算法的重要组成部分,确保了...

    ID3算法java实现

    在Java中实现ID3算法可以帮助我们构建基于数据的决策树模型,用于预测未知数据的类别。以下是关于ID3算法及其Java实现的一些关键知识点: 1. **决策树基础**:决策树是一种直观易懂的机器学习模型,通过一系列问题...

    ID3算法Java实现

    4. **Java实现**:在Java中实现ID3算法,我们需要定义数据结构来存储训练集、特征和类别信息,以及计算信息熵和信息增益的函数。同时,需要实现决策树的构建过程,包括节点的创建、划分和终止条件判断。代码中应该...

    基于java实现的 决策树之 ID3 算法

    在本案例中,我们将探讨如何用Java实现ID3算法,这是一种早期的决策树学习算法,由Ross Quinlan于1986年提出。 ID3(Iterative Dichotomiser 3)算法基于信息熵和信息增益来选择最优特征进行分裂。信息熵是度量数据...

    ID3分类算法Java实现

    总的来说,这个Java实现为理解ID3算法提供了一个实践平台,同时也为其他数据挖掘任务提供了基础。学习和理解这个实现,有助于深入掌握决策树分类的原理,并能应用于实际项目中。对于数据挖掘初学者来说,这是一个很...

    用java实现的大数据分析 ID3算法

    这个例子来源于Quinlan的论文。 假设,有种户外活动。该活动能否正常进行与各种天气因素有关。不同的天气因素组合会产生两种后果,也就是分成2类:能进行活动或不能。我们用P表示该活动可以进行,N表示该活动无法...

    机器学习 决策树算法(ID3)java实现

    4. **Java实现**:在`ID3.java`文件中,开发者可能实现了ID3算法的类,包括读取数据(可能从`app.arff`文件中,这是一个常见的数据格式,用于存储WEKA等机器学习库的数据),计算信息熵、信息增益,以及构建和遍历...

    FP树增长算法的java实现

    在Java中实现FP树算法,我们可以按照以下步骤进行: 1. **数据预处理**:首先,我们需要对原始数据进行预处理,将交易数据转换为事务ID和项ID的形式,即每条记录表示一个交易,其中包含交易中出现的所有项。 2. **...

    id3算法的实现 java 如果你对数据挖掘

    在这个Java实现中,我们将深入探讨ID3算法的基本原理、步骤以及如何在Java编程环境中进行实现。 ID3算法的核心思想是信息熵和信息增益。熵是用来衡量数据集合纯度的一个指标,信息增益则是通过选择最佳属性来减少熵...

    Java实现数据挖掘算法

    本篇将深入探讨如何使用Java来实现数据挖掘算法,重点关注决策树和粗糙集两种方法。 首先,我们要了解决策树这一机器学习中的经典算法。决策树通过一系列规则和条件对数据进行分割,最终形成一个树状结构,用于预测...

    基于Java实现的同态加密算法的实现

    在"research_encrypt-code"这个压缩包中,很可能包含了Java实现同态加密算法的源代码,包括密钥管理、加密、解密和操作加密数据的函数。通过研究这些代码,我们可以深入了解如何在实际应用中利用Java来构建安全的...

    用java实现HS和LCR选举算法

    总之,HS和LCR算法是分布式系统中实现领导者选举的基础,通过Java实现这些算法,可以理解和掌握分布式系统中的核心概念,为构建高可用、强一致性的分布式应用打下坚实基础。在实际工程实践中,我们还需要根据具体...

    java实现银行家算法

    在Java编程语言中,我们可以利用面向对象的特点来实现这一算法。 ### 1. 死锁概念 在多任务环境下,如果两个或更多的进程互相等待对方释放资源,而它们都无法继续执行,就形成了死锁。银行家算法的出现就是为了...

    决策树ID3算法实验报告广工(附源码java)

    实验中提供了Java实现的ID3算法代码,主要涉及以下几个关键函数: 1. **getClassList**:获取数据集中所有实例的目标属性(即评价类别)的集合。 2. **getSubMap**:根据指定列号,获取属性的取值及其出现次数。 3....

    银行家算法JAVA代码实现,附带图形化界面

    4. **GUI.java**:图形化界面的实现,可能使用了Java Swing或JavaFX库,显示当前系统状态,如资源分配情况、进程状态等,并提供交互功能,如启动算法、模拟进程请求等。 5. **Util.java**:辅助工具类,可能包含一些...

Global site tag (gtag.js) - Google Analytics