决策树python的实现,不需要掉包。

本文将介绍如何在Python中不依赖外部库,从零开始实现决策树算法,包括数据预处理、节点划分、构建决策树及进行预测等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 算法分析:

A.     ,把数据集的最后一列变为1,2,3,并转换为csv格式。本来没有定义一个TreeNode的类,结果写起来及其复杂,在同学的建议下,建立了一个TreeNode的头文件。

   class TreeNode:

    dim=0

    p=0

    left=0

    right=0

    value =0

    def getdim(self):

        return self.dim

    def getp(self):

        return p

    def setdim(self,a):

        self.dim =a

    def setLeft(self,tree):

        self.left=tree

    def getLeft(self):

        return self.left

    def setRight(self,tree):

        self.right =tree

    def getRight(self):

        return self.right

    def setValue(self,va):

        self.value =va

    def getValue(self):

        return self.value

 

B.  读取csv文件,将它们存在一个dataset的list中:

  def loadcsv(filename):

    file  =csv.reader(open(filename,"rt"))

    dataset =list(file)

    for i in range(len(dataset)):

        dataset[i] =[float(x) for x in dataset[i]]

return dataset

 

C.  计算给定数据集的香农熵ENt =-p*log2p:

 

def Shannonent(dataset):

    numEnt =len(dataset)

    labelCounts ={}

    shannonEnt =0

    for i in range(len(dataset)):

        currentlabel =dataset[i][-1]

        if currentlabel not in labelCounts.keys():

            labelCounts[currentlabel]=0

        labelCounts[currentlabel] +=1

   

    for key in labelCounts:

        prob =float(labelCounts[key])/numEnt

        shannonEnt -= prob* log(prob,2)

return shannonEnt

 

D.  进行数据集的划分,此处借鉴了机器学习实战的离散数据划分的方法,改成了连续数据的划分,dataset为待划分的数据集,axis为要划分的特征,value为特征的返回值也就是信息增益最大的划分点,输出为以该点为划分的左半边数据和右半边数据,看了机器学习实战上,采用了extend方法:

 

   def

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值