import pandas as pd
import numpy as np
df=pd.read_excel(r'C:\Users\Admin\YQnotebook\test.xlsx')
首先创建一个计算信息熵的函数
entropy信息熵,公式为
def ent(data):
prob=pd.value_counts(data)/len(data)
return sum(np.log2(prob)*prob*(-1))
然后计算信息增益
def gin(data,str1,str2):
e1 = data.groupby(str1).apply(lambda x:ent(x[str2]))
p1 = pd.value_counts(data[str1]) / len(data[str1])
e2 = sum(e1 * p1)
return ent(data[str2]) - e2
找出信息增益最大的特征
def best_gin(data):
best=0
gini_lst=[]
for i in data.ix[:,:-1].columns.tolist():
cur_gin=gin(data,i,'R')
gini_lst.append(cur_gin)
dic=dict(zip(data.ix[:,:-1].columns.tolist(),gini_lst))
print(dic)
return max(dic,key=dic.get)
然后要将表中不用了的数据删除
df.groupby('F').apply(lambda x:print(x))
df[df['F']=='s'].drop('F',axis=1)
然后,再来一次找最好的特征
best_gin(df1)
然后继续删除不用了的信息