id3算法代码
ID3算法简介
ID3算法是一种常用的决策树算法,它通过对数据集的属性进行分析,选择最优属性作为节点,生成决策树模型。ID3算法是基于信息熵的思想,通过计算每个属性对样本集合的信息增益来选择最优划分属性。
ID3算法步骤
1. 计算数据集的熵
首先需要计算数据集的熵,熵越大表示样本集合越混乱。假设有n个类别,则数据集D的熵可以表示为:
$$ Ent(D) = -\sum_{i=1}^{n}p_i\log_2p_i $$便秘吃什么水果好
其中$p_i$表示第i个类别在数据集D中出现的概率。
2. 计算每个属性对样本集合的信息增益
接下来需要计算每个属性对样本集合的信息增益。假设有m个属性,则第j个属性$A_j$对数据集D的信息增益可以表示为:
$$ Gain(D, A_j) = Ent(D) - \sum_{i=1}^{v}\frac{|D_i|}{|D|}Ent(D_i) $$
其中$v$表示第j个属性可能取值的数量,$D_i$表示在第j个属性上取值为$i$时所包含的样本子集。
3. 选择最优划分属性
从所有可用属性中选择最优划分属性作为当前节点。选择最优划分属性的方法是计算所有属性的信息增益,选择信息增益最大的属性作为当前节点。
4. 递归生成决策树
使用选择的最优划分属性将数据集划分成若干子集,对每个子集递归生成子树。
淘汰的英文ID3算法代码实现
下面是Python语言实现ID3算法的代码:
```python
import math
import pandas as pd
胡适简介# 计算熵
def calc_entropy(data):
n = len(data)
label_counts = {}
for row in data:
label = row[-1]
if label not in label_counts:
label_counts[label] = 0
label_counts[label] += 1
entropy = 0.0妇女图片
for key in label_counts:
prob = float(label_counts[key]) / n
entropy -= prob * math.log(prob, 2)
return entropy
# 划分数据集
def split_data(data, axis, value):
sub_data = []
for row in data:
if row[axis] == value:
sub_row = row[:axis]
d(row[axis+1:])
sub_data.append(sub_row)
return sub_data
# 计算信息增益
def calc_info_gain(data, ba_entropy, axis):
闵行区公租房 values = t([row[axis] for row in data])
new_entropy = 0.0
for value in values:
sub_data = split_data(data, axis, value)
prob = len(sub_data) / float(len(data))
new_entropy += prob * calc_entropy(sub_data)
info_gain = ba_entropy - new_entropy
return info_gain
# 选择最优划分属性
def choo_best_feature(data):
num_features = len(data[0]) - 1
ba_entropy = calc_entropy(data)
best_info_gain = 0.0
best_feature = -1
for i in range(num_features):
info_gain = calc_info_gain(data, ba_entropy, i)
if info_gain > best_info_gain:
best_info_gain = info_gain
best_feature = i
return best_feature
# 多数表决函数,用于确定叶子节点的类别
def majority_vote(class_list):
class_count = {}
for vote in class_list:
if vote not in class_count:
class_count[vote] = 0
class_count[vote] += 1
猫教案 sorted_class_count = sorted(class_count.items(), key=lambda x:x[1], rever=True)吹胡子瞪眼睛
return sorted_class_count[0][0]
# 创建决策树
def create_tree(data, labels):
class_list = [row[-1] for row in data]
热枕的意思
if unt(class_list[0]) == len(class_list):
return class_list[0]