python实现西瓜书《机器学习》习题4.3信息增益决策树

首先这篇的格式可能会乱,markdown装上以后,有时候是用csdn原来的编辑器,有时候就变成了markdown编辑器,蒙。
更蒙的是,大牛的代码太飘逸了,有点看不懂,惯例先来原地址:https://blog.csdn.net/Snoopy_Yuan/article/details/68959025
核心步骤有一个思路很赞,就是求信息增益时,用数组存储按某属性分类后,类别样本数,从而便于对熵求和。
没有写注释的,就是实在坚持不住贴了源代码的,例如删去节点、k折验证、画树等,以后得重新看一遍。
另外,pycharm编译画树那段不能通过,write_png函数会报错
‘GraphViz’s executables not found’)
pydotplus.graphviz.InvocationException: GraphViz’s executables not found
估计是graphviz的环境变量设置有关,但mac系统不知道怎么整,留坑。

感觉自己孕傻了,小柚子,努力比你老母亲聪明一些啊

上代码
分两个程序,主程序entropydecisiontree

import pandas as pd

#data_file_encode="gb18030"   #gb18030支持汉字和少数民族字符,是一二四字节变长编码。这么用的时候with open需要增加encoding参数,但会报错gb18030不能解码
# with open相当于打开文件,保存成str对象,如果出错则关闭文件。参数r表示只读
with open("/Users/huatong/PycharmProjects/Data/watermelon_33.csv",mode="r") as data_file:
    df=pd.read_csv(data_file)


#用seaborn画图看关联性
import matplotlib as mpl
import matplotlib.pyplot as plt   #plt类似matlab绘制图表
import seaborn as sns
mpl.rcParams['font.sans-serif']=['SimHei']  #定义中文字体,用于在图上显示中文,原程序的Droid Sans Fallback字体显示不出来
mpl.rcParams['axes.unicode_minus']=False #坐标负号不显示
sns.set_context("poster")  #图像大小

#f1=plt.figure(1)  #figure(num)是图像编号或名称
#sns.FacetGrid(df,hue="好瓜",size=5).map(plt.scatter,"密度","含糖率").add_legend() #facetgrid用于绘制变量之间关系图,hue是因变量map是自变量
#plt.show()

#f2=plt.figure(2)
#sns.plt.subplot(221) 源程序创建了四个子图,分别编号
#sns.swarmplot(x="纹理",y="含糖率",hue="好瓜",data=df) #swarmplot分簇散点图,增加分类轴上的随机抖动,并且避免重叠,然而要求一个变量是数字的
#plt.show()

import decision_tree
decision_tree.TreeGenerate(df)

accuracy_scores = []
# k-folds cross prediction

n = len(df.index)
k = 5
for 
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值