决策树离散值分类
path = "xigua.csv"
import pandas as pd
df = pd.read_csv(path,na_values='?')
#计算占比
def calculate_f(feature,value,df):
data = df[df[feature] == value]
f = len(data)/len(df)
return f
#计算熵
import math
def calculate_ent(list_f):
ent = 0
for f in list_f:
ent += f * math.log(f,2)
return -ent
# #计算根结点中label=0的占比
f1 = calculate_f('label',0,df)
# #计算根结点中label=1的占比
f2 = calculate_f('label',1,df)
#计算根结点香农熵
ent = calculate_ent([f1,f2])
##获取x1=青绿的样本集合
df1 = df[df['x1']== '青绿']
# 计算x1=青绿的样本集合下label=0的占比
f1 = calculate_f('label',0,df1)
#计算x1=青绿的样本集合下label=1的占比
f2 = calculate_f('label',1,df1)
#计算x1=青绿的样本集合下香农熵
ent1 = calculate_ent([f1,f2])
#获取x1=乌黑的样本集合
df2 = df[df['x1']== '乌黑']
#计算x1=乌黑的样本集合下label=0的占比
f1 = calculate_f('label',0,df2)
#计算x1=乌黑的样本集合下label=1的占比
f2 = calculate_f('label',1,df2)
#计算x1=乌黑的样本集合下香农熵
ent2 =calculate_ent([f1,f2])
##获取x1=浅白的样本集合
df3 = df[df['x1']== '浅白']
##计算x1=浅白的样本集合下label=0的占比
f1 = calculate_f('label',0,df3)
##计算x1=浅白的样本集合下label=1的占比
f2 = calculate_f('lab