西瓜书中的决策树算法实现(ID3)

一些关于决策树自己的理解

决策树是根据信息增益自己选择规则,并且递归构建树的过程。
所谓的信息增益可以理解为:原本系统是混乱的,当选择一个属性划分,划分后两个子系统的混乱程度是否减轻了;比如;原来系统正负样本,比例为1:1 ,如果你选择一个属性进行划分后,两个子系统的正负样本比例变成了 8:2 和3:7 ,那么这次 的划分就是有意义的,而根据信息增益,更大的信息增益,表示更好的划分属性,从而大大减小系统的混乱程度也就是熵。
【注】熵本来是物理学的概念,便是一个区域内,事物的混乱程度,越混乱熵越大;也就是所,世界上所有物质都是在熵增的过程 中,比如桌子会越来越来乱,地上会越来越脏,但是也可以通过消耗能量的方式,降低一个区域的熵,比如消耗生物能收拾下桌子,通过消耗热能把碎铁融成铁块。通过选择属性降低数据集的混乱程度。
本次使用的数据集是【西瓜数据集2.0】

编号,色泽,根蒂,敲声,纹理,脐部,触感,好瓜
1,青绿,蜷缩,浊响,清晰,凹陷,硬滑,是
2,乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,是
3,乌黑,蜷缩,浊响,清晰,凹陷,硬滑,是
4,青绿,蜷缩,沉闷,清晰,凹陷,硬滑,是
5,浅白,蜷缩,浊响,清晰,凹陷,硬滑,是
6,青绿,稍蜷,浊响,清晰,稍凹,软粘,是
7,乌黑,稍蜷,浊响,稍糊,稍凹,软粘,是
8,乌黑,稍蜷,浊响,清晰,稍凹,硬滑,是
9,乌黑,稍蜷,沉闷,稍糊,稍凹,硬滑,否
10,青绿,硬挺,清脆,清晰,平坦,软粘,否
11,浅白,硬挺,清脆,模糊,平坦,硬滑,否
12,浅白,蜷缩,浊响,模糊,平坦,软粘,否
13,青绿,稍蜷,浊响,稍糊,凹陷,硬滑,否
14,浅白,稍蜷,沉闷,稍糊,凹陷,硬滑,否
15,乌黑,稍蜷,浊响,清晰,稍凹,软粘,否
16,浅白,蜷缩,浊响,模糊,平坦,硬滑,否
17,青绿,蜷缩,沉闷,稍糊,稍凹,硬滑,否

源码分析下:
首先导入读取csv,并把提取列名,供以后使用:

df=pd.read_csv("./ml2.0.csv")
# 属性集合
attr=df.columns.values.tolist()[1:]
data_org=np.array(df[attr[0:]])
static_attr=df.columns.values.tolist()[1:]#这里的属性 不改变,仅仅作为索引

获得各个列名下的详细分类:

attr_dict={
   
   }#用于记录每一个属性的取值
for  x in attr[:-1]:
    temp=np.array(df[x])
    attr_dict[x]=set(temp)

attr_dict 格式如下:

{
   
   '色泽': {
   
   '乌黑', '浅白', '青绿'}, 
 '根蒂': {
   
   '蜷缩', '硬挺', '稍蜷'}, 
 '敲声': {
   
   '浊响', '清脆', '沉闷'},
 '纹理': {
   
   '清晰', '稍糊', '模糊'}, 
 '脐部': {
   
   '平坦', '稍凹', '凹陷'}, 
 '触感': {
   
   '硬滑', '软粘'}
}

判断一个数据集中,是否全部为正样本或者全部为负样本

def lable_is_same(
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值