还剩6页未读,继续阅读
文本内容:
构建决策树total=lendataresults={}fordindata:resultsEd[-l]]=results.getd[-l]0+1returnresultstotal#计算信息熠defcalcuentropydata:resultstotal=get_countsdataent=sum[-
1.0*v/total*log2v/totalforvinresultsvalues]returnent计算每个feature的信息增益defcalcu_each_gaincolumnupdate_data:total=lencolumngrouped=update_data.iloc[:-1].groupbyby=columntemp=sum[1eng
[1]/total*calcuentropyg
[1]forginlistgrouped]returncalcuentropyupdate_datailoc[:-1]-temp获取最大的信息增益的featuredefget_max_gaintempdata:columns_entropy=[colcalcu_each_gaintemp_data[col]tempdataforcolintempdata.iloc[::T]]columns_entropy=sortedcolumns_entropykey=lambdaf:f
[1]reverse二Truereturncolumns_entropy
[0]并去掉数据中已存在的列属性内容defdrop_exist_featuredatabest_feature:attr=pel.uniquedata[bestfeature]newdata=[nddata[data[best_feature]==nd]forndinattr]newdata=[n
[0]n[l].drop[best_feature]axis=lforninnewdata]returnnewdata获得出现最多的labeldefget_most_labellabel_list:label_dict={}for1inlabellist:label_dict
[1]=label_dict.get10+1sortedlabel=sortedlabeldict.itemskey=lambda11:11
[1]reverse=Truereturnsortedlabel
[0]
[0]创建决策树defcreate_treedata_setcolumn_count:label_list=data_set.iloc[:-1]iflenpd.uniquelabel_list==1:returnlabel_list.values
[0]ifall[lcnpd.uniquedata_set[i]==1foriindataset.iloc[::-1].columns]:returnget_most_labellabel_listbest„attr=get_max_gaindata_set
[0]tree={best_attr:{}}exist_attr=pd.uniquedataset[best_attr]iflenexist_attr!=lencolumn_count[best_attr]:no_exist_attr=setcolumn_count[best_attr]-setcxist_attrforneainno_exist_attr:tree[best_attr][nea]=get_most_labellabel_listforitemindrop_exist_featuredata_setbest_attr:tree[best_attr][item
[0]]=create_treeitem[l]columncountreturntree决策树绘制基本参考《机器学习实战》书内的代码以及博客http://blog.csdn.net/c406495762/article/details/76262487#获取树的叶子节点数目defgetnumleafsdecisiontree:num_leafs=0first_str=nextiterdecisiontreesecond_dict=decision_tree[first_str]forkinseconddict.keys:ifisinstancesccond_dict[k]diet:numleafs+=getnumleafsseconddict[k]else:numleafsreturnnumleafs#获取树的深度defget_tree_depthdecision_tree:maxdepth=0first_str=nextiterdecision_treeseconddict=decisiontree[first_str]forkinseconddict.keysO:ifisinstanceseconddict[k]diet:this_depth=1+get_tree_depthseconddict[k]else:this_depth=1ifthisdepthmaxdepth:max_depth=this_depthreturnmaxdepth#绘制节点defplot_nodenode_txtcenter_ptparent_ptnode_type:arrowargs=dietarrowstyle=,-,font=FontPropertiesfname=r,C:\Windows\Fonts\STXINGKA.TTF,size=15create_plot.axl.annotatenode_txtxy=parent_ptxycoords=axesfractionxytext=center_pttextcoords=axesfraction,va=centerha=center”arrowprops=arrow_argsFontProperties=font#标注划分属性defplotmidtextentrptparentpttxtstr:font=FontPropertiesfname=r,C:\Windows\Fonts\MSYH.TTCsize=10x_mid=parent_pt
[0]-cntr_pt
[0]/
2.0+cntr_pt
[0]y_mid=parent_pt
[1]-cntrpt
[1]/
2.0+cntrpt
[1]create_plot.axl.textx_midy_midtxt_strva=centerha=center”color=redFontProperties=font#绘制决策树defplot_treedecision^treeparent_ptnode_txt:d_node=dietboxstyle二〃sawtooth”fc=〃
0.8〃leaf_node=dietboxstyle二〃round4〃,fc二
0.8numleafs=get_num_leafsdecision_treefirst_str=nextiterdecision_treecntr_pt二plot_tree.xoff+
1.0+floatnum_leafs/
2.0/plot_tree.totalWplot_tree.yoffplotmidtextentrptparent_ptnodetxtplot_nodefirst_strcntr_ptparent_ptd_nodeseconddiet=decisiontree[first_str]plot_tree.yoff=plot_tree.yoff-
1.0/plot_tree.totalDforkinseconddiet.keys:ifisinstanceseconddict[k]diet:plot_treeseconddiet[k]cntr_ptkelse:plot_tree.xoff=plot_tree.xoff+
1.0/plot_tree.totalWplot_nodeseconddict[k]plot_tree.xoffplot_tree.yoffcntr_ptleaf_nodeplot_midtextplot_tree.xoffplot_tree.yoffentrptkplot_tree.yoff=plot_tree.yoff+
1.0/plot_tree.totalDdefcreateplotdtree:fig=pit.figuredfacecolor=,white,fig.elfaxprops=dietxticks=[]yticks=[]create_plot.axl=pit.subplot111frameon=False**axpropsplot_tree.totalW=floatget_num_leafsdtree对差异化教学的考虑决策树是机器学习中非常经典的算法,对学生信息意识和计算思维的挑战是比较大的搜索算法对于参加过奥赛的同学来说是比较基础的知识,而决策树算法对于大多数同学来说可能是第一次接触,要求学生快速掌握又一定的难度,所以算法的学习流程以教师分步骤讲解,层层递进,学生小组合作学习为主.所有同学都要达到基本要求在项目学习中,每位同学都能利用数据计算信息燧和信息增益.对不同情况的学生以个别化指导各组中动手能力强的同学尝试利用代码构造决策树小组合作的过程中,我也进行了较精细化的划分确保每个小组都有一位擅长数学的同学,可以负责辅助讲解计算过程,确保小组整体任务的完成度,同时为其余同学的发挥提供了更多空间教学设计思路整个课堂的思路为了解决策树实例一一观察决策树一一计算信息嫡和信息增益一一构造决策树第一课时主要让学生了解决策树,知道构造决策树需要掌握的基本数学方法让学生在不断发现问题,提出问题,根据教师引导学会计算信息燧和信息增益为构造决策树打基础每个属性信息增益计算过程繁琐,所以可以采用小组合作的形式,分小组计算不同属性的信息增益数值,从而让计算过程在课堂中并行处理,节省课堂时间第二课时建立在第一课时掌握信息增和信息增益计算方法的基础上,如何进一步巩固信息增益的计算过程并根据信息增益手工构建决策树通过教师引导,让学生了解构建决策树是一个递归过程,可以借助计算机程序来实现,从而由手工绘制决策树过度到体验了解程序绘制决策树的过程针对核心素养培养的设计考虑在算法思想的学习中,学习者本身就置于解决实际问题的情境中,其信息素养、数字化学习与创新、计算思维都在学习过程中有所体现依据本章的教学目标,我更多地将课堂和学生的目标集中在“计算思维”的培养与体现上,而让其他核心素养在学生学习过程中自然而然地获得为了计算思维的激发,我采用了以下活动.以互联网上较流行的西瓜分类数据为导入用数据,给出探究任务.在算法原理学习过程中强调对信息熠和信息增益计算培养,让学生了解机器学习中数学思维的重要性也让学生了解到掌握原理和代码实现并不是简单的等价关系,考虑到部分学生的代码能力并不足以在一节课内完成程序,所以采用小组合作、代码借鉴、程序功能添加等多种手段,促使学生在掌握利用信息增益构造决策树的基础上了解递归构造的程序.用较多的时间让学生们自主阅读、思考、讨论与分享在这个过程中,学生们必然会经历提出问题、阅读理解、寻求答案、模拟和构造决策树等过程,他们需要在不同的观点和对策之间判断优劣,寻求最佳解决方案课程标准与教学目标适应的课程标准
4.2通过剖析具体案例,了解人工智能的核心算法,熟悉智能技术应用的基本过程和实现原理所针对的教材内容第二章算法与模型第4节决策树第二课时教室环境有教学控制软件的网络机房,每台机器都要确保安装Python及相关库和Weka软件预计课时1课时教学目标复习计算计算信息端和信息增益利用信息增益指标ID3算法构建简单的决策树借助python和ID3代码,体验计算程序构建决策树过程所指向的核心素养计算思维1能够采用计算机科学领域的思想方法界定问题、抽象特征、建立结构模型、合理组织数据;2通过判断、分析与综合各种信息资源,运用合理的算法形成解决问题的方案数字化学习与创新运用数字化工具建构知识评价设计过程性评价在学生讨论过程中,对学生的技术基础、组织协调能力、理解能力、表达能力进行观察和记录通过计算信息嫡、信息增益、构建决策树过程观察,发现典型的理解误区,确定点评对象学习结束后,通过程序作品了解学生们的掌握情况终结性评价•利用信息增益指标构建决策树、利用python代码完成拓展任务,重点掌握信息焙和信息增益在构建决策树过程中的应用学习活动设计1课时教学环节教学过程设计意图导入2引入介绍香农与信息嫡的故事,复习信息燧和信息增益计算公式复习回顾,同时集中注意力进入新内容的学习小组探究10给出西瓜数据给出机器学习领域周志华老师较为有名的西瓜数据,让学生巩固信息烯和信息增益的计算过程编号色泽根蒂敲声纹理脐部触感好瓜1青绿蜷缩浊响清晰凹陷硬滑是2乌黑蜷缩沉闷清晰凹陷硬滑是3乌黑蜷缩浊响清晰凹陷硬滑是4青绿蜷缩沉闷清晰凹陷硬滑是5浅白蜷缩浊响清晰凹陷硬滑是6青绿稍蜷浊响清晰稍凹软粘是7乌黑稍蜷浊响稍糊稍凹软粘是8乌黑稍蜷浊响清晰稍凹硬滑是9乌黑稍蜷沉闷稍糊稍凹硬滑否10青绿硬挺清脆清晰平坦软粘否11浅白硬挺清脆模糊平坦硬滑否12浅白蜷缩浊响模糊平坦软粘否13青绿稍蜷浊响稍糊凹陷硬滑否14浅白稍蜷沉闷稍糊凹陷硬滑否15乌黑稍蜷浊响清晰稍凹软粘否16浅白蜷缩浊响模糊平坦硬滑否17青绿蜷缩沉闷稍糊稍凹硬滑否分6个小组计算Gain(D色泽)、Gain(D根蒂)、Gain(D敲声)、Gain(D纹理)、Gain(D脐部)、Gain(D触感)比较哪个小组计算又快又准确原理讲解⑻D1{1234通过计算我们发现纹理的信息增择纹理作为划分节点做出对根节F纹理二?5681015}D2(79131J汽(Gain(D纹理))最大,我们选与的划分如图,1*17)D3{111216)▲、教帅可以通过小组总结回答,尽可能了解学生对决策树的理解程度,从而进行误区的纠正、易混淆点的强调等在最终的总结时.,必须确[保概念的明确✓接下来,我们对D1集合中的9个样本计算他们剩余除色泽外五个属性的信息增益,再划分下一个节点实践体验
(10).生成决策树需要多次递归计算不同属性的信息增益,重复计算工作量比较大,我们能否借助计算机用程序设计来完成决策树的递归过程?教师提供基于信息增益的生成西瓜数据决策树的python代码,学生可以体验过程有能力的班级建议设计成程序填空形式代码如下frommathimportlog2importpandasaspdimportmatplotlib.pyplotaspitfrommatplotlib.font_managerimportFontProperties#统计label出现次数defget_counts(data):决策树ID3算法的实现需要较强的代码能力,课堂上的时间主要集中在阅读代码,从而理解递归生成决策树的整体流程,可以通过分模块阅读分析,来辅助理解程序plot_tree.totalD=floatget_tree_depthdtreeplot_tree.xoff=-
0.5/plot_tree.totalWplottreeyoff=
1.0plot_treedtree
0.
51.0pit.showif_name_=_main_:my_data=pd.read_csvJ./watermelon
2.
0.csvencoding=gbkcolumncount-diet[dslistpd.uniquemy_data[ds]fordsinmy_data.iloc[:-l].columns]dtree=createtreemydatacolumncountcreate_plotd_tree教师小结构建决策树的一种方法就是选择信息增益增益最大的属性,然后,我们对每一个分支节点做进一步划分,每次都选择最大信息增益的属性,得到决策树总结归纳利用信息增益构建决策树的方法互评4根据时间,选择『2个有典型问题的小组,进行点评,点评时请同学们先讲,教师总结通过事先观察,寻找搜集一些计算过程中的典型问题,通过小组互评与点评,帮助学生们掌握计算信息增和信息增益的知识点作业布置课后思考r布置作业书本课后练习巩固信息燧和信息增益知谡点,并掌握简单决策树的构建过程。