《构建决策树公开课.docx》由会员分享,可在线阅读,更多相关《构建决策树公开课.docx(8页珍藏版)》请在第一文库网上搜索。
1、构建决策树课程标准与教学目标适应的课程标准:42通过剖析具体案例,了解人工智能的核心算法,熟悉智能技术应用的基本过程和实现原理。所针对的教材内容:第二章算法与模型第4节决策树第二课时教室环境:有教学控制软件的网络机房,每台机器都要确保安装Python及相关库和Weka软件预it课时:1课时教学目标: 复习计算计算信息峭和信息增益 利用信息增益指标(ID3算法)构建简单的决策树 借助python和ID3代码,体验计算程序构建决策树过程所指向的核心素养:计算思维:(1)能够采用计兜机科学领域的思想方法界定问题、抽象特征、建立结构模型、合理组织数据;(2)通过判断、分析与综合各种信息资源,运用合理的
2、算法形成解决问题的方案。数字化学习与创新:运用数字化工具建构知识评价设计过程性评价 在学生讨论过程中,对学生的技术基础、组织协调能力、理解能力、表达能力进行观察和记录。 通过计算信息炳、信息增益、构建决策树过程观察,发现典型的理解误区,确定点评对象。 学习结束后,通过程序作品了解学生们的掌握情况终结性评价:利用信息增益指标构建决策树、利用PythOn代码完成拓展任务,重点掌握信息嫡和信息增益在构建决策树过程中的应用学习活动设计(1课时)教学环节教学过程设计意图导入(2,)引入:介绍香农与信息燧的故事,复习信息燧和信息增益计算公式复习回顾,同时集中注意力进入新内容的学习。小组探究(10,)给出西
3、瓜数据:给出机器学习领域周志华老师较为有名的西瓜数据,让学生巩固信息境和信息增益的计算过程。编号色泽根蒂敲声纹理脐部触感好瓜1青绿蜷缩浊响清晰凹陷硬滑是2乌黑蜷缩沉闷清晰凹陷硬滑是3乌黑蜷缩浊响清晰凹陷硬滑是4百绿蜷缩沉闷清晰凹陷硬滑是5浅白蜷缩浊响清晰凹陷硬滑是6音绿稍蜷浊响清晰稍凹软粘是7乌黑稍蜷浊响稍糊稍凹软粘是8乌黑稍蜷浊响清晰稍凹硬滑是9乌黑稍蜷沉闷梢糊梢凹硬滑10音绿硬挺清脆清晰平坦软粘否11浅白硬挺清脆模糊平坦硬滑否12浅白蜷缩浊响模糊平坦软粘否13青绿稍蜷浊响稍糊凹陷硬滑否14浅白稍蜷沉闷稍糊凹陷硬滑否15乌黑梢蜷浊响清晰稍凹软粘否16浅白蜷缩浊响模糊平坦硬滑否17青绿蜷缩沉闷
4、稍糊稍凹硬滑否分6个小组计算Gain(D,色泽)、Gain(D,根蒂)、Gain(D,敲声)、Gain(D,纹理)、Gain(D,脐部)、Gain(D,触感)比较哪个小组计算又快又准确原理讲解(8,)通过计算我们发现纹理的信息增?择纹理作为划分节点做出对根节纹理;?挖(Gain(D,纹理)最大,我们选工的划分。如图:糊教师可以通过小组总结回答,尽可能了解学生对决策树的理解程度,从而进行误区的纠正、易混淆点的强调等。在最终的总结时,必须确保概念的明确。D1(1,2,3,4,5,6,8,10,15D2(7,9,13,14,17)D311,12,16接下来,我们对D1集合中的9个样本计算他们剩余除色
5、泽外五个属性的信息增益,再划分下一个节点。实践体验(I(T)生成决策树需要多次递归计算不同属性的信息增益,重复计算工作量比较大,我们能否借助计算机用程序设计来完成决策树的递归过程?教师提供基于信息增益的生成西瓜数据决策树的Python代码,学生可以体验过程。有能力的班级建议设计成程序填空形式。代码如下:frommathimport1og2importpandasaspdimportmatp1ot1ib.pyp1otaspitfrommatp1ot1ib.font_managerimportFontProperties#统计IabeI出现次数defget_counts(data):决策树ID3算
6、法的实现需要较强的代码能力,课堂上的时间主要集中在阅读代码,从而理解递归生成决策树的整体流程,可以通过分模块阅读分析,来辅助理解程序。tota1=Ien(data)resu1ts=fordindata:resu1tsd-1=resu1ts.get(d-1,0)+1returnresu1ts,tota1#计算信息燧defca1cu_entropy(data):resu1ts,tota1=getcounts(data)ent=sum(-1.0*vtota1*1og2(v/tota1)forvinresu1ts,va1ues()returnent# 计算每个feature的信息增益defca1cue
7、achgain(co1umn,updatedata):tota1=Ien(co1umn)grouped=update_data.i1oc:,-1.groupby(by=co1umn)temp=sum(1en(g1)/tota1*ca1cu_entropy(g1)forginIistCgrouped)returnca1cuentropy(updatedata,iIoc:,-1)-temp# 获取最大的信息增益的featuredefget_max_gain(temp_data):co1umns_entropy=(co1,ca1cu_each_gain(temp_dataco1,temp_data)
8、forco1intemp-data.i1oc:,:-1co1umns_entropy=sorted(co1umns_entropy,key=1ambdaf:f1,reverse=True)returnco1umns_entropy0# 去掉数据中已存在的列属性内容defdrop_exist_feature(data,best_feature):attr=pd.unique(databest_feature)new_data=(nd,datadatabest_feature=nd)forndinattrnewdata=(n0,n1.drop(best_feature,axis=1)forninn
9、ew_datareturnnew_data# 获得出现最多的IabeIdefget_most_1abe1(1abe1_1ist):Iabe1diCt=for1in1abe1_1ist:1abe1dict1=1abe1diet,get(1,0)+1sorted_1abe1=sorted(1abe1_dict.itemsO,key=1ambda11:111,reverse=True)returnSorteC11abeI00# 创建决策树defcreatetree(dataset,co1umncount):1abe1_1ist=data_set.i1oc:,-1ifIen(pd.unique(1ab
10、e1_1ist)=1:return1abe1_1ist.va1ues0ifa11(1en(pd.unique(dataseti)=1foriindataset,i1oc:,:-1.co1umns):returnget_most_1abe1(1abe1_1ist)best-attr=get_raax_gain(data_set)0tree=best-attr:existattr=pd.unique(datasetbestattr)if1en(exist_attr)!=1en(co1umn_countbest_attr):no_exist_attr=set(co1umn_countbest_att
11、r)-set(exist_attr)forneainno_exist_attr:treebest_attrnea=get_most_1abe1(1abe1_1ist)foritemindrop_exist_feature(data_set,best_attr):treebest_attritem0=create_tree(item1,co1umn_count)returntree# 决策树绘制基本参考机器学习实战书内的代码以及博客:http:/b1og,c406495762artic1e/detai1s/76262487# 获取树的叶子节点数目defget_num_1eafs(decision
12、_tree):num_1eafs=0firststr=next(iter(decisiontree)second_dict=decision_treefirst_strforkinsecond_dict.keys():ifisinstance(second_dictk,diet):num_1eafs+=get_num_1eafs(second_dictk)e1se:num_1eafs+=1returnnum_1eafs* 获取树的深度defgettreedepth(decisiontree):max_depth=0first_str=next(iter(decision_tree)SeCOnd
13、_dict=decision_treefirst_strforkinseconddiet,keys():ifisinstance(second_dictk,diet):this_depth=1+get_tree_depth(second_dictk)e1se:thisdepth=1ifthis_depthmax_depth:raax_depth=this_depthreturnmax_depth* 绘制节点defp1ot_node(node_txt,center_pt,parent_pt,node_type):arrow_args=diet(arrowstyIe=,)font=FontProp
14、erties(fname=r,C:WindowsFontsSTXINGKA.TTF,size=15)createp1ot.ax1.annotate(nodetxt,xy=parentpt,xycoords,axesfraction*,XyteXt=Center-pt,textcoords,axesfraction,va=*center*,ha=center”,bbox=node_type,arrowprops=arrow_args,FontProperties=font)* 标注划分属性defp1otmidtext(cntrpt,parentpt,txtstr):font=FontProperties(fname=r,C:WindowsFontsMSYH.TTC,