机器学习算法与编程--郑捷 C45D算法 python3实现 修改部分

此算法需要更改的地方出除了上篇写到的loadDataSet函数,在课本中getBestFeat()函数中信息增益计算公式处给出的矩阵相除在py3无法运行需要改为dot(A,B.T)形式

具体代码

 def getBestFeat(self,dataSet):
        Num_Feats=len(dataSet[0][:-1])
        totality=len(dataSet)
        BaseEntropy=self.computeEntropy(dataSet)
        ConditionEntropy=[]
        splitInfo=[]
        allFeatVList=[]
        for f in range(Num_Feats):
            featList=[example[f] for example in dataSet]
            [splitI,featureValueList]=self.computeSplitInfo(featList)
            allFeatVList.append(featureValueList)
            splitInfo.append(splitI)
            resultGain=0.0
            for value in featureValueList:
                subSet=self.splitDataSet(dataSet,f,value)
                appearNum=float(len(subSet))
                subEntropy=self.computeEntropy(subSet)
                resultGain+=(appearNum/totality)*subEntropy
            ConditionEntropy.append(resultGain)
        infoGainArray=BaseEntropy*ones(Num_Feats)-array(ConditionEntropy)
       # infoGainRatio=infoGainArray/array(splitInfo)#py2可以这样做但是py3不行
        infoGainRatio=dot(infoGainArray,array(splitInfo).T)#py3这种用法更贴近线性代数中矩阵除法形式
        bestFeatureIndex=argsort(-infoGainRatio)[0]
        return bestFeatureIndex,allFeatVList[bestFeatureIndex]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值