python 底层原理_决策树的基本原理与Python实现

原标题:决策树的基本原理与Python实现

1、决策树长啥样?

决策树其实就是一个多层的if then结构,如下图所示(这里就不画了,引用百度图片)

30d45982a5e14763b041e36c54b04c56.jpeg

2、决策树中的节点如何确定?

a、熵的具体含义

熵代表着信息的混乱情况,熵越小,代表信息越纯,相应事件的发生概率越大,反之,熵越大,代表信息越混乱,相应事件的发生概率越小,具体公式如下所示:

dd2c8042bdbe443a913b047a200a75a1.png

b、什么是条件熵

条件熵是指在x的随机条件下对于y的不确定性表述,其计算公式如下所示:

8d6a41c7ea7643779c844f237e54cade.jpeg

c、信息增益

信息增益=熵-条件熵

g(y,x)=H(y)-H(y|x)

信息增益是指通过决策树分支对于信息混乱减少的程度;

d、信息增益率

g_r(y|x)=g(y,x)/h(x)

为了防止当特征的取值较多时,通过信息增益比较容易划分到纯度较高的子集,导致节点更偏向于取值较多的特征,因此常用信息增益率作为分支标准。

e、Gini指数

a0d89ef7e0b84e3195a4ccab60926120.png

c、d、e不同的分支标准在决策树中分别对应着ID3、C4.5、CART算法;

3、Python实现

这里仅实现ID3方法且没使用递归,仅用来理解如何使用编程语言来表达数学公式,如下所示

#__Author__:随心

importpandas aspd

importnumpy asnp

importmath

data =pd.read_excel ("d:决策树示例.xlsx")

defH_Y(data ):

labelcount ={}

h =0.0

foreachAct indata :

ifeachAct [-1]inlabelcount :

labelcount [eachAct [-1]]+=1

else:

labelcount [eachAct [-1]]=1

forkey_index inlabelcount :

h +=-float(labelcount [key_index ])/len(data )*math.log (float(labelcount [key_index ])/len(data ), 2)

returnh

defH_X(data,index,value ):

x_count ={}

forline indata :

ifline [index ]inx_count :

x_count [line [index ]]+=1

else:

x_count [line [index ]]=1

h =0

forx_key inx_count :

y_label ={}

foreachAct indata :

ifeachAct [-1]==value andeachAct [index ]==x_key :

ifvalue iny_label :

y_label [value ]+=1

else:

y_label [value ]=1

try:

y_label [value ]

except:

y_label [value ]=0.00001

h +=x_count [x_key ]/len(data )*((-y_label [value ]/(x_count [x_key ]))*math.log ((y_label [value ])/(x_count [x_key ]), 2)-((x_count [x_key ]-y_label [value ])/(x_count [x_key ]))*math.log ((x_count [x_key ]-y_label [value ]+0.00001)/(x_count [x_key ]), 2))

returnh

#根节点

g_max =[]

data1 =data.as_matrix ()

feature_index =["年龄", "有无工作", "有无房子", "信用情况"]

fori inrange(data1.shape [1]-1):

g_max.append (H_Y (data1 )-H_X (data1,i, "是"))

print("根节点为%s"%feature_index [np.argmax (np.array (g_max ))])

#第二层节点

g_max2 =[]

data2 =data [(data [feature_index [np.argmax (np.array (g_max ))]]!='有')].as_matrix ()

data_2 =data2 [:, [0, 1, 3, 4]]

feature_index1 =["年龄", "有无工作", "信用情况"]

forj inrange(data_2.shape [1]-1):

g_max2.append (H_Y (data_2 )-H_X (data_2, j, "是"))

print("第二层节点为%s"%feature_index1 [np.argmax (np.array (g_max2 ))])

欢迎加群一起讨论学习~

cb7a3a4f8fff4df0a664b833fc93c786.gif

www.vbafans.com返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的纺织品企业财务管理系统,源码+数据库+毕业论文+视频演示 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升,也为了对纺织品企业财务信息进行更好的维护,纺织品企业财务管理系统的出现就变得水到渠成不可缺少。通过对纺织品企业财务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 纺织品企业财务管理系统通过MySQL数据库与Spring Boot框架进行开发,纺织品企业财务管理系统能够实现对财务人员,员工,收费信息,支出信息,薪资信息,留言信息,报销信息等信息的管理。 通过纺织品企业财务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。 关键字:纺织品企业财务管理系统,薪资信息,报销信息;SpringBoot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值