- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据挖掘课程设计报告
ID3算法的改进
摘要:本文基于ID3算法的原有思路,再把属性的重要性程度值纳入了属性选择的度量标准中,以期获得更适合实际应用的分类划分结果。
ID3算法的不足
ID3算法使用信息增益作为属性选择度量值,其倾向于选择具有大量值的属性,但没有考虑到属性在实际应用分类中的重要程度,因为依靠取信息熵最大的属性在现实情况中却并不那么重要,因此可能会得到不太有用的划分结果。举个简单的例子,在对淘宝用户行为进行分析时,尽管依据用户ID可以得到最大的信息增益,但是这并不符合分析的要求,因为,我们需要得到的是用户的购买行为,在分析中,我们会更多的考虑用户曾经浏览过的商品或者已经购买了的商品。在这个情景中,根据信息熵来度量属性的选择就不太合理,所以需要对其进行改进。
二、改进思路
本次设计中在属性选择上加入了属性重要程度值:因为采用信息增益的方法会倾向于选择拥有较多可能属性值的属性,为了弥补这一缺陷,所以在选择时就加入了属性的重要程度值。属性重要程度值考虑了属性在分裂数据中所处的地位。在处理数据的时候,会首先根据经验或需要判断出数据集合里面的属性值的重要程度,例如,在上面淘宝用户行为分析中,我们可能会人为的给予属性(“浏览过的商品”)最高重要程度值:0.8,而给属性(“用户ID”)较低的重要程度值:0.2。在明确了属性重要程度值以后,我们会在计算每个属性信息增益后将信息增益与属性重要程度值相乘,由此来判断最终属性的选择。对于ID3算法的其他内容不做更改。
三、具体实现
以课本《数据挖掘》中193页的例6-1为例。例6-1中各属性的重要程度值即权值未知,我们可先分别假设属性age的重要程度值为0.1,属性income的重要程度值为0.6,属性student的重要程度值为0.2,属性credit_rating的重要程度值为0.1。在引入属性重要程度值以前,每个属性的信息增益为:
Gain(age)=0.246 , Gain(income)=0.029 ,
Gain(student)=0.151 , Gain(credit_rating)=0.048。
在引入属性重要程度值以后,信息增益*属性重要程度值分别为:
0.246*0.1=0.0246
0.029*0.6=0.0174
0.151*0.2=0.0302
0.048*0.1=0.0048
此时,决策树的属性分布就会和之前的不同,income属性会成为决策树的根节点。由此可见,属性的重要程度值会对决策属性的选择有着重要影响。
四、改进算法
因为仅仅只是把属性的重要程度值纳入到决策属性的选择中,所以原ID3算法的大部分代码都是一样的,唯一不同的是:改变了makeTree方法的impurityReduce值。在程序中添加了属性重要程度值数组priority,属性对应的重要程度值依次为priority[i],此处为了方便,其值直接采用Math.random()随机生成,然后将其与computeEntropyReduce(data, data.attribute(i))相乘,记得到新的impurityReduce值,从而影响了决策属性的选择。更改代码部分用淡蓝色标记。
private void makeTree(Instances data) throws Exception
{
if (data.numInstances() == 0) //假如没有
{
m_Attribute = null;
m_Instances = new Instances(data);
return;
}
// Compute attribute with maximum split value.
double impurityReduce = 0;
double maxValue = 0;
int maxIndex = -1;
int h=data.numAttributes();
double[] priority=new double[h];
for (int i = 0; i h; i++)
{
priority[i]=Math.random();
if (i == data.classIndex())
continue;
impurityReduce=computeEntropyReduce(data,data.attribute(i))*priority[i];
if (impurityReduce maxValue)
{
maxValue = impurityReduce;
maxIndex = i;
}
}
// Make leaf if information ga
文档评论(0)