当前位置:   article > 正文

AI算法之决策树_决策式ai 常用于

决策式ai 常用于

       信息增益作为决策树的节点决策基础,因为训练集不涉及到连续值,本文采取的是ID3算法

在信息增益中,衡量标准是看特征能够为分类系统带来多少信息,带来的信息越多,该特征越重要。对一个特征而言,系统有它和没它时信息量将发生变化,而前后信息量的差值就是这个特征给系统带来的信息量。所谓信息量,就是熵。假如有变量X,其可能的取值有n种,每一种取到的概率为Pi,那么X的熵就定义为:

                                                                 H(x)=i=1np(xi)logp(xi)

(1)根节点的信息熵代码实现                                                                    

  1. from math import log
  2. def CalRootEntropy(dataset):#计算根节点的熵
  3. Num=len(dataset)
  4. labels={}
  5. for i in dataset:
  6. currentlabel=i[-1]
  7. if currentlabel not in labels.keys():
  8. labels[currentlabel]=0
  9. labels[currentlabel]+=1
  10. RootEntropy=0.0
  11. for i in labels:
  12. Cali=float(labels[i])/Num
  13. RootEntropy-=Cali*log(Cali,2)
  14. return RootEntropy

(2)按照某个特征值分割数据集,列表存储

  1. def splitDataset(dataset,axis,value):
  2. ReturnList=[]
  3. for i in (dataset):
  4. if i[axis]==value:
  5. ReturnSingle=i[:axis]
  6. ReturnSingle.extend(i[axis+1:])
  7. ReturnList.append(ReturnList)
  8. return ReturnList

(3)选择决策树的节点分支

  1. def choose(dataset):
  2. NumOfFeature=len(dataset[0])-1
  3. RootEntropy=CalRootEntropy(dataset)
  4. BestP=0.0
  5. bestfeature=-1
  6. for i in range(NumOfFeature):
  7. ListLabel=[L[i] for L in dataset]
  8. UniqLabel=set(ListLabel)
  9. newEntropy=0.0
  10. for j in UniqLabel:
  11. SD=splitDataset(dataset, i, j)
  12. prob=len(SD)/float(len(dataset))
  13. newEntropy+=prob*CalRootEntropy(SD)
  14. BestHA=RootEntropy-newEntropy
  15. if(BestHA>BestP):
  16. BestP=BestHA
  17. bestfeature=i
  18. return bestfeature

(4)叶节点的多数决策方法

  1. def major(classlist):
  2. classcount={}
  3. for i in classlist:
  4. if i not in classcount.keys():
  5. classcount[i]=0
  6. classcount[i]+=1
  7. sortedClass=sorted(classcount.iteritems(),key=operator.itemgetter[1],reverse=True)
  8. return sortedClass[0][0]

(5)决策树的最终构建

这段代码比较高深,涉及到字典嵌套和迭代函数

  1. def createTree(dataset,labels):
  2. classList=[i[-1] for i in dataset]
  3. if classList.count(classList[0]==len(classList)):
  4. return classList[0]
  5. if len(dataset[0])==1:
  6. return major(classList)
  7. bestFeat=choose(dataset)
  8. bestFeatLabel=labels[bestFeat]
  9. myTree={bestFeatLabel:{}}
  10. del(labels[bestFeat])
  11. featValues=[E[bestFeat] for E in dataset]
  12. Uniq=set(featValues)
  13. for value in Uniq:
  14. subLabels=labels[:]
  15. myTree[bestFeatLabel][value]=createTree(splitDataset(dataset, bestFeat, value), subLabels)
  16. return myTree

上述完成了决策树的构建过程,ID3算法存在着很多问题,最常见的就是过拟合,C4.5以及CART算法对其进行了改进。

 

 

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/330764
推荐阅读
相关标签
  

闽ICP备14008679号