import pandas as pd data = {'形状': ['圆形', '圆形', '皱形', '皱形', '圆形', '皱形', '圆形', '皱形', '圆形'], '颜色': ['灰色', '白色', '白色', '灰色', '白色', '灰色', '白色', '灰色', '灰色'], '大小': ['饱满', '皱缩', '饱满', '饱满', '皱缩', '皱缩', '饱满', '皱缩', '皱缩'], '土壤': ['酸性', '碱性', '碱性', '酸性', '碱性', '酸性', '酸性', '碱性', '碱性'], '水分': ['多', '少', '多', '多', '少', '少', '少', '多', '少'], '日照': ['多', '多', '多', '少', '少', '多', '少', '少', '多'], '发芽': ['否', '是', '否', '是', '是', '是', '是', '否', '否']} df = pd.DataFrame(data) import math import numpy as np # 经验熵 def entropy(labels): n_labels = len(labels) if n_labels <= 1: return 0 counts = np.bincount(labels.astype(int)) probs = counts / n_labels n_classes = np.count_nonzero(probs) if n_classes <= 1: return 0 ent = 0. for i in probs: ent -= i * math.log(i, 2) return ent # 经验条件熵 def conditional_entropy(x, y): entropy_cond = 0. for i in set(x): p = float(len(x[x == i])) / len(x) entropy_cond += p * entropy(y[x == i]) return entropy_cond # 信息增益 def information_gain(x, y): return entropy(y) - conditional_entropy(x, y) # 对类别特征进行标签编码 le = LabelEncoder() categorical_cols = ['形状', '颜色', '大小', '土壤', '水分', '日照'] for col in categorical_cols: df[col] = le.fit_transform(df[col]) print('训练样本经验熵:', entropy(labels)) cond_ent = conditional_entropy(df["形状"].values.astype(int), labels) info_gain = information_gain(df["形状"].values.astype(int), labels) print('形状属性的经验条件熵:', cond_ent) print('形状属性的信息增益:', info_gain)哪错了
时间: 2023-08-20 20:26:10 浏览: 148
python数据分析与可视化 import pandas as pd import numpy as np import m
这段代码有一些问题:
1. 没有导入 LabelEncoder 类,需要先导入:from sklearn.preprocessing import LabelEncoder
2. 在计算训练样本的经验熵时,没有指定 labels 变量,应该改为:entropy(df["发芽"].values.astype(int))
3. 在计算形状属性的经验条件熵和信息增益时,也没有指定 labels 变量,应该改为:conditional_entropy(df["形状"].values.astype(int), df["发芽"].values.astype(int)) 和 information_gain(df["形状"].values.astype(int), df["发芽"].values.astype(int))
4. 最后一行代码没有缩进,应该和其他代码平齐。
下面是修改后的代码:
```
import pandas as pd
import math
import numpy as np
from sklearn.preprocessing import LabelEncoder
data = {'形状': ['圆形', '圆形', '皱形', '皱形', '圆形', '皱形', '圆形', '皱形', '圆形'],
'颜色': ['灰色', '白色', '白色', '灰色', '白色', '灰色', '白色', '灰色', '灰色'],
'大小': ['饱满', '皱缩', '饱满', '饱满', '皱缩', '皱缩', '饱满', '皱缩', '皱缩'],
'土壤': ['酸性', '碱性', '碱性', '酸性', '碱性', '酸性', '酸性', '碱性', '碱性'],
'水分': ['多', '少', '多', '多', '少', '少', '少', '多', '少'],
'日照': ['多', '多', '多', '少', '少', '多', '少', '少', '多'],
'发芽': ['否', '是', '否', '是', '是', '是', '是', '否', '否']}
df = pd.DataFrame(data)
# 对类别特征进行标签编码
le = LabelEncoder()
categorical_cols = ['形状', '颜色', '大小', '土壤', '水分', '日照']
for col in categorical_cols:
df[col] = le.fit_transform(df[col])
# 计算训练样本的经验熵
labels = df["发芽"].values.astype(int)
print('训练样本经验熵:', entropy(labels))
# 计算形状属性的经验条件熵和信息增益
cond_ent = conditional_entropy(df["形状"].values.astype(int), labels)
info_gain = information_gain(df["形状"].values.astype(int), labels)
print('形状属性的经验条件熵:', cond_ent)
print('形状属性的信息增益:', info_gain)
```
阅读全文