ImageVerifierCode 换一换
格式:RTF , 页数:10 ,大小:19.46KB ,
资源ID:238721      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/238721.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据挖掘决策树算法Java实现.rtf)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据挖掘决策树算法Java实现.rtf

1、import java.util.HashMap;import java.util.HashSet;import java.util.LinkedHashSet;import java.util.Iterator;/调试过程中发现4个错误,感谢宇宙无敌的调试工具print/1、selectAtrribute中的一个数组下标出错 2、两个字符串相等的判断/3、输入的数据有一个错误 4、selectAtrribute中最后一个循环忘记了i+/决策树的树结点类class TreeNode String element;/该值为数据的属性名称String value;/上一个分裂属性在此结点的值Lin

2、kedHashSet childs;/结点的子结点,以有顺序的链式哈希集存储public TreeNode()this.element=null;this.value=null;this.childs=null;public TreeNode(String value)this.element=null;this.value=value;this.childs=null;public String getElement()return this.element;public void setElement(String e)this.element=e;public String getVal

3、ue()return this.value;public void setValue(String v)this.value=v;public LinkedHashSet getChilds()return this.childs;public void setChilds(LinkedHashSet childs)this.childs=childs;/决策树类class DecisionTree TreeNode root;/决策树的树根结点public DecisionTree()root=new TreeNode();public DecisionTree(TreeNode root)

4、this.root=root;public TreeNode getRoot()return root;public void setRoot(TreeNode root)this.root=root;public String selectAtrribute(TreeNode node,String deData,boolean flags,LinkedHashSet atrributes,HashMap attrIndexMap)/Gain数组存放当前结点未分类属性的Gain值double Gain=new doubleatrributes.size();/每条数据中归类的下标,为每条数据

5、的最后一个值int class_index=deData0.length-1;/属性名,该结点在该属性上进行分类String return_atrribute=null;/计算每个未分类属性的 Gain值int count=0;/计算到第几个属性for(String atrribute:atrributes)/该属性有多少个值,该属性有多少个分类int values_count,class_count;/属性值对应的下标int index=attrIndexMap.get(atrribute);/存放属性的各个值和分类值LinkedHashSet values=new LinkedHashSe

6、t();LinkedHashSet classes=new LinkedHashSet();for(int i=0;i deData.length;i+)if(flagsi=true)values.add(deDataiindex);classes.add(deDataiclass_index);values_count=values.size();class_count=classes.size();int values_vector=new intvalues_count*class_count;int class_vector=new intclass_count;for(int i=0

7、;i deData.length;i+)if(flagsi=true)int j=0;for(String v:values)if(deDataiindex.equals(v)break;else j+;int k=0;for(String c:classes)if(deDataiclass_index.equals(c)break;else k+;values_vectorj*class_count+k+;class_vectork+;/*/输出各项统计值for(int i=0;i values_count*class_count;i+)System.out.print(values_vec

8、tori+);System.out.println();for(int i=0;i class_count;i+)System.out.print(class_vectori+);System.out.println();*/计算InforDdouble InfoD=0.0;double class_total=0.0;for(int i=0;i class_vector.length;i+)class_total+=class_vectori;for(int i=0;i class_vector.length;i+)if(class_vectori=0)continue;else doubl

9、e d=Math.log(class_vectori/class_total)/Math.log(2.0)*class_vectori/class_total;InfoD=InfoD-d;/计算InfoAdouble InfoA=0.0;for(int i=0;i values_count;i+)double middle=0.0;double attr_count=0.0;for(int j=0;j class_count;j+)attr_count+=values_vectori*class_count+j;for(int j=0;j max)max=Gaini;return_atrrib

10、ute=atrribute;i+;return return_atrribute;/node:在当前结点构造决策树/deData:数据集/flags:指示在当前结点构造决策树时哪些数据是需要的/attributes:未分类的属性集/attrIndexMap:属性与对应数据下标public void buildDecisionTree(TreeNode node,String deData,boolean flags,LinkedHashSet attributes,HashMap attrIndexMap)/如果待分类属性已空if(attributes.isEmpty()=true)/从数据集

11、中选择多数类,遍历符合条件的所有数据HashMap classMap=new HashMap();int classIndex=deData0.length-1;for(int i=0;i deData.length;i+)if(flagsi=true)if(classMap.containsKey(deDataiclassIndex)int count=classMap.get(deDataiclassIndex);classMap.put(deDataiclassIndex,count+1);else classMap.put(deDataiclassIndex,1);/选择多数类Stri

12、ng mostClass=null;int mostCount=0;Iterator it=classMap.keySet().iterator();while(it.hasNext()String strClass=(String)it.next();if(classMap.get(strClass)mostCount)mostClass=strClass;mostCount=classMap.get(strClass);/对结点进行赋值,该结点为叶结点node.setElement(mostClass);node.setChilds(null);System.out.println(yez

13、hi:+node.getElement()+:+node.getValue();return;/如果待分类数据全都属于一个类int class_index=deData0.length-1;String class_name=null;HashSet classSet=new HashSet();for(int i=0;i deData.length;i+)if(flagsi=true)class_name=deDataiclass_index;classSet.add(class_name);/则该结点为叶结点,设置有关值,然后返回if(classSet.size()=1)node.setE

14、lement(class_name);node.setChilds(null);System.out.println(leaf:+node.getElement()+:+node.getValue();return;/给定的分枝没有元组,是不是有这种情况?/选择一个分类属性String attribute=selectAtrribute(node,deData,flags,attributes,attrIndexMap);/设置分裂结点的值node.setElement(attribute);/System.out.println(attribute);if(node=root)System.

15、out.println(root:+node.getElement()+:+node.getValue();else System.out.println(branch:+node.getElement()+:+node.getValue();/生成和设置各个子结点int attrIndex=attrIndexMap.get(attribute);LinkedHashSet attrValues=new LinkedHashSet();for(int i=0;i deData.length;i+)if(flagsi=true)attrValues.add(deDataiattrIndex);L

16、inkedHashSet childs=new LinkedHashSet();for(String attrValue:attrValues)TreeNode tn=new TreeNode(attrValue);childs.add(tn);node.setChilds(childs);/在候选分类属性中删除当前属性attributes.remove(attribute);/在各个子结点上递归调用本函数if(childs.isEmpty()!=true)for(TreeNode child:childs)/设置子结点待分类的数据集boolean newFlags=new booleandeData.length;for(int i=0;i deData.length;i+)newFlagsi=flagsi;if(deDataiattrIndex!=child.getValue()newFlagsi=false;/设置子结点待分类的属性集LinkedHashSet newAttributes=new LinkedHashSet();for(String attr:attributes

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1