无标题文章

2016-09-18  本文已影响0人  讳莫如深Jason

'''

def chooseBestFeatureToSplit(dataSet):

numFeatures=len(dataSet[0])-1  #每组的特征值数量,去掉了最后的标签

baseEntropy=calcShannonEnt(dataSet) #计算数据集的原始香农熵

bestInfoGain=0.0;bestFeature =  -1

for i in range(numFeatures):

featList=[example[i] for example in dataSet] #相同位置的第i个特征值

uniqueVals=set(featList) #set(集合):获取list中所有不重复的元素值

newEntropy=0.0

for value in uniqueVals:

subDataSet=splitDataSet(dataSet,i,value)  #针对当前的value划分出新的数据集

prob=len(subDataSet)/float(len(dataSet))  #新数据集所占比例

newEntropy+=prob*calcShannonEnt(subDataSet) #这里用加权求和,求出新的熵值

infoGain=baseEntropy-newEntropy                #新旧相减,得到信息增益

if (infoGain>bestInfoGain):    #随着i的增加逐次进行减法,结果为正说明熵减,则infogain越大越好

bestInfoGain=infoGain

bestFeature=i              #逐次比较,得到最大的信息增益

return bestFeature

'''

上一篇 下一篇

猜你喜欢

热点阅读