首页IT科技python写决策树(python决策树算法的实现步骤)

python写决策树(python决策树算法的实现步骤)

时间2025-06-19 06:55:13分类IT科技浏览3495
导读:步骤...

步骤

1            、计算数据集S中的每个属性的熵 H(xi)

2                 、选取数据集S中熵值最小(或者信息增益           ,两者等价)的属性

3      、在决策树上生成该属性节点

4      、使用剩余结点重复以上步骤生成决策树的属性节点

实例

importnumpyasnp importmath fromcollectionsimportCounter #创建数据 defcreate_data(): X1=np.random.rand(50,1)*100 X2=np.random.rand(50,1)*100 X3=np.random.rand(50,1)*100 deff(x): return2ifx>70else1ifx>40else0 y=X1+X2+X3 Y=y>150 Y=Y+0 r=map(f,X1) X1=list(r) r=map(f,X2) X2=list(r) r=map(f,X3) X3=list(r) x=np.c_[X1,X2,X3,Y] returnx,[courseA,courseB,courseC] #计算集合信息熵的函数 defcalculate_info_entropy(dataset): n=len(dataset) #我们用Counter统计一下Y的数量 labels=Counter(dataset[:,-1]) entropy=0.0 #套用信息熵公式 fork,vinlabels.items(): prob=v/n entropy-=prob*math.log(prob,2) returnentropy #实现拆分函数 defsplit_dataset(dataset,idx): #idx是要拆分的特征下标 splitData=defaultdict(list) fordataindataset: #这里删除了idx这个特征的取值                  ,因为用不到了 splitData[data[idx]].append(np.delete(data,idx)) returnlist(splitData.values()),list(splitData.keys()) #实现特征的选择函数 defchoose_feature_to_split(dataset): n=len(dataset[0])-1 m=len(dataset) #切分之前的信息熵 entropy=calculate_info_entropy(dataset) bestGain=0.0 feature=-1 foriinrange(n): #根据特征i切分 split_data,_=split_dataset(dataset,i) new_entropy=0.0 #计算切分后的信息熵 fordatainsplit_data: prob=len(data)/m new_entropy+=prob*calculate_info_entropy(data) #获取信息增益 gain=entropy-new_entropy ifgain>bestGain: bestGain=gain feature=i returnfeature #决策树创建函数 defcreate_decision_tree(dataset,feature_names): dataset=np.array(dataset) counter=Counter(dataset[:,-1]) #如果数据集值剩下了一类      ,直接返回 iflen(counter)==1: returndataset[0,-1] #如果所有特征都已经切分完了           ,也直接返回 iflen(dataset[0])==1: returncounter.most_common(1)[0][0] #寻找最佳切分的特征 fidx=choose_feature_to_split(dataset) fname=feature_names[fidx] node={fname:{}} feature_names.remove(fname) #递归调用                  ,对每一个切分出来的取值递归建树 split_data,vals=split_dataset(dataset,fidx) fordata,valinzip(split_data,vals): node[fname][val]=create_decision_tree(data,feature_names[:]) returnnode #决策树节点预测函数 defclassify(node,feature_names,data): #获取当前节点判断的特征 key=list(node.keys())[0] node=node[key] idx=feature_names.index(key) #根据特征进行递归 pred=None forkeyinnode: #找到了对应的分叉 ifdata[idx]==key: #如果再往下依然还有子树      ,那么则递归     ,否则返回结果 ifisinstance(node[key],dict): pred=classify(node[key],feature_names,data) else: pred=node[key] #如果没有对应的分叉                  ,则找到一个分叉返回 ifpredisNone: forkeyinnode: ifnotisinstance(node[key],dict): pred=node[key] break returnpred

以上就是python决策树算法的实现步骤            ,希望对大家有所帮助            。更多Python学习指路:Python基础教程

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
nodejs常用框架(【node进阶】浅析Koa框架—ejs模板|文件上传|操作mongoDB)