Python 试图获取信息,但不要';我不知道如何接近条件熵

Python 试图获取信息,但不要';我不知道如何接近条件熵,python,pandas,numpy,dataset,entropy,Python,Pandas,Numpy,Dataset,Entropy,数据集: 如何计算条件熵并从这样的数据集中找到最佳信息增益? 计算熵的代码: def entropy(column): """ Calculates the entropy""" values, counts = np.unique(column, return_counts=True) entropy_val = 0 for i in range(len(counts)): entropy_val += (

数据集:

如何计算条件熵并从这样的数据集中找到最佳信息增益?

计算熵的代码:

def entropy(column):
""" Calculates the entropy"""
values, counts = np.unique(column, return_counts=True)
entropy_val = 0
for i in range(len(counts)):
    entropy_val += (
            (-counts[i] / sum(counts)) * math.log2(counts[i] / (sum(counts)))
    )
    
return entropy_val
其中“column”是数据帧中的一个功能,例如df[0]。 我有点不知道从这里到哪里去。。。有人能给我指出正确的方向吗?我的最终目标是找到最好的信息增益

entropy_vals = {}
entropy_vals = entropy(X[0]), entropy(X[1]), entropy(X[2]), entropy(X[3]), entropy(y)

print(entropy_vals)

df=pd.read\u csv('data\u banknote\u authentication.txt',header=None)
打印(df)
y=df.iloc[:,-1]
X=df.iloc[:,:4]
def计数_标签(行):
“”“统计选定列中每个唯一值的数目。”“”
计数={}
对于行中的行:
标签=行
如果标签不在计数中:
计数[标签]=1
其他:
计数[标签]+=1
返回计数
def熵(列):
“”“计算熵”“”
值,计数=np.unique(列,返回值=True)
熵=0
对于范围内的i(len(计数)):
熵_val+=(
(-counts[i]/sum(counts))*math.log2(counts[i]/(sum(counts)))
)
返回熵
熵_vals={}
熵=熵(X[0]),熵(X[1]),熵(X[2]),熵(X[3]),熵(y)
打印(熵值)
def检查_唯一(数据):
label\u col=data[data.columns[-1]]
打印(标签颜色)
唯一特征=np.唯一(标签颜色)
如果len(唯一特征)=1:
返回真值
其他:
返回错误
def分类_数据(数据):
label\u col=data[data.columns[-1]]
值,计数=np.unique(label\u col,return\u counts=True)
打印(值、计数)
index=counts.argmax()
类别=值[索引]
退货类别
def拆分(数据):
x_less=数据[数据np.平均值(数据)]
返回x_更少,x_更大

将数据发布为可复制代码。你试着计算每一列的熵?每一列的附加熵。我现在试图从每一个专栏中获得信息。我想用平均值来分割,但不确定如何从这里开始。这个熵需要如何计算?像上面提到的或其他解决方案?尝试这样做:但不确定如何实现我的代码
    df = pd.read_csv('data_banknote_authentication.txt', header=None)
print(df)


y = df.iloc[:, -1]
X = df.iloc[:, :4]


def count_labels(rows):
    """Counts number of each unique value in selected column."""
    counts = {}
    for row in rows:
        label = row
        if label not in counts:
            counts[label] = 1
        else:
            counts[label] += 1
    return counts


def entropy(column):
    """ Calculates the entropy"""
    values, counts = np.unique(column, return_counts=True)
    entropy_val = 0
    for i in range(len(counts)):
        entropy_val += (
                (-counts[i] / sum(counts)) * math.log2(counts[i] / (sum(counts)))
        )

    return entropy_val


entropy_vals = {}
entropy_vals = entropy(X[0]), entropy(X[1]), entropy(X[2]), entropy(X[3]), entropy(y)

print(entropy_vals)


def check_unique(data):
    label_col = data[data.columns[-1]]
    print(label_col)
    unique_features = np.unique(label_col)
    if len(unique_features) == 1:
        return True
    else:
        return False


def categorize_data(data):
    label_col = data[data.columns[-1]]
    values, counts = np.unique(label_col, return_counts=True)
    print(values, counts)
    index = counts.argmax()
    category = values[index]

    return category



def split(data):
    x_less = data[data <= np.mean(data)]
    x_greater = data[data > np.mean(data)]

    return x_less, x_greater