根据下列给定的14个数据,运用Information Gain构造一个天气决策树。 例子编号 属 性 分类 天况 温度 湿度 风况 1 晴 热 大 无 N 2 晴 热 大 有 N 3 多云 热 大 无 P 4 雨 中 大 无 P 5 雨 冷 正常 无 P 6 雨 冷 正常 有 N 7 多云 冷 正常 有 P 8 晴 中 大 无 N 9 晴 冷 正常 无 P 10 雨 中 正常 无 P 11 晴 中 正常 有 P 12 多云 中 大 有 P 13 多云 热 正常 无 P 14 雨 中 大 有 N,并写出具体代码
时间: 2024-02-11 07:07:35 浏览: 80
感谢您提供的数据集。下面是使用Python语言,基于信息增益构造天气决策树的代码:
```
import pandas as pd
import numpy as np
import math
# 读取数据集
data = pd.read_csv('weather_data.csv')
print('原始数据集:')
print(data)
# 定义计算信息熵的函数
def calc_entropy(label):
num_entries = len(label)
label_counts = np.unique(label, return_counts=True)[1]
prob = label_counts / num_entries
entropy = (-prob * np.log2(prob)).sum()
return entropy
# 定义计算信息增益的函数
def calc_info_gain(data, attr, label):
num_entries = len(label)
base_entropy = calc_entropy(label)
attr_values, attr_counts = np.unique(data[attr], return_counts=True)
new_entropy = 0
for i in range(len(attr_values)):
sub_data = data.loc[data[attr] == attr_values[i]]
sub_label = label.loc[data[attr] == attr_values[i]]
sub_entropy = calc_entropy(sub_label)
new_entropy += sub_counts[i] / num_entries * sub_entropy
info_gain = base_entropy - new_entropy
return info_gain
# 定义递归构建决策树的函数
def create_tree(data, labels):
class_list = data.iloc[:, -1]
if len(np.unique(class_list)) == 1:
return class_list.iloc[0]
if len(data.columns) == 1:
return np.unique(class_list)[np.argmax(np.unique(class_list, return_counts=True)[1])]
best_attr_index = np.argmax([calc_info_gain(data, attr, class_list) for attr in data.iloc[:, :-1].columns])
best_attr = data.columns[best_attr_index]
my_tree = {best_attr: {}}
del data[best_attr]
for value in np.unique(data[best_attr]):
sub_data = data.loc[data[best_attr] == value]
sub_labels = class_list.loc[data[best_attr] == value]
my_tree[best_attr][value] = create_tree(sub_data, sub_labels)
return my_tree
# 构建决策树
tree = create_tree(data, data.columns[:-1])
print('构建的决策树:')
print(tree)
```
其中,数据集保存在名为"weather_data.csv"的文件中。代码中使用pandas库读取数据集,然后定义了两个函数,分别用于计算信息熵和信息增益。最后,使用递归方式构建决策树,并将结果保存在一个字典中。在构建决策树的过程中,代码使用了numpy库中的一些函数,例如计算数组中唯一值和唯一值出现次数的函数。
阅读全文