当前位置:实例文章 » 其他实例» [文章]Day 61-62 决策树(ID3)

Day 61-62 决策树(ID3)

发布人:shili8 发布时间:2025-02-09 03:17 阅读次数:0

**决策树(ID3)**

决策树是一种常见的机器学习算法,用于分类问题。它通过递归地将数据集分割成更小的子集,并根据特征选择来构建决策树模型。

### ID3 算法概述ID3(Iterative Dichotomiser3)是由 Ross Quinlan 在1986 年提出的一种决策树算法。它通过递归地将数据集分割成更小的子集,并根据信息增益来选择特征。

### ID3 算法流程1. **初始化**: 初始化决策树根节点。
2. **选择特征**:选择最优特征,根据信息增益来决定。
3. **划分数据集**: 根据选择的特征,将数据集分割成两个子集。
4. **递归**: 对每个子集重复步骤2 和3,直到满足停止条件。

###信息增益信息增益是用于评估特征选择的指标。它表示在使用该特征后数据集的熵减少量。

**熵公式**:

H(D) = -∑p(x)log2p(x)

其中,D 是数据集,x 是类别,p(x) 是类别概率。

**信息增益公式**:

IG(D, A) = H(D) - ∑|D_i|/n * H(D_i)

其中,A 是特征,D_i 是子集,n 是数据集大小。

###代码示例

import numpy as npclass DecisionTree:
 def __init__(self):
 self.tree = {}

 def fit(self, X, y):
 # 初始化决策树根节点 self.tree = {'feature': None, 'value': None, 'left': None, 'right': None}

 # 递归构建决策树 self._build_tree(X, y)

 def _build_tree(self, X, y):
 #选择最优特征 feature = self._choose_feature(X, y)
 if feature is not None:
 # 划分数据集 left_X, right_X, left_y, right_y = self._split_data(X, y, feature)

 # 递归构建子树 self.tree['feature'] = feature self.tree['value'] = np.mean(y)
 if len(left_X) >0:
 self.tree['left'] = DecisionTree()
 self.tree['left'].fit(left_X, left_y)
 if len(right_X) >0:
 self.tree['right'] = DecisionTree()
 self.tree['right'].fit(right_X, right_y)

 def _choose_feature(self, X, y):
 #选择最优特征 features = [i for i in range(X.shape[1])]
 best_feature = None best_gain = -np.inf for feature in features:
 gain = self._information_gain(X[:, feature], y)
 if gain > best_gain:
 best_feature = feature best_gain = gain return best_feature def _split_data(self, X, y, feature):
 # 划分数据集 left_X = []
 right_X = []
 left_y = []
 right_y = []

 for i in range(len(X)):
 if X[i, feature] < np.mean(X[:, feature]):
 left_X.append(X[i])
 left_y.append(y[i])
 else:
 right_X.append(X[i])
 right_y.append(y[i])

 return np.array(left_X), np.array(right_X), np.array(left_y), np.array(right_y)

 def predict(self, X):
 # 预测 predictions = []
 for x in X:
 prediction = self._predict(x)
 predictions.append(prediction)

 return predictions def _predict(self, x):
 # 预测 if 'feature' not in self.tree or self.tree['feature'] is None:
 return self.tree['value']

 feature = self.tree['feature']
 value = self.tree['value']
 left_tree = self.tree['left']
 right_tree = self.tree['right']

 if x[feature] < value:
 return left_tree._predict(x)
 else:
 return right_tree._predict(x)

# 示例使用X = np.array([[1,2], [3,4], [5,6]])
y = np.array([0,0,1])

tree = DecisionTree()
tree.fit(X, y)

print(tree.predict(np.array([[7,8]])))


### 结论决策树是一种常见的机器学习算法,用于分类问题。ID3 算法是由 Ross Quinlan 在1986 年提出的一种决策树算法,它通过递归地将数据集分割成更小的子集,并根据信息增益来选择特征。

本文介绍了 ID3 算法流程,包括初始化、选择特征、划分数据集和递归。同时,提供了代码示例,展示了如何使用 Python 来实现决策树算法。

希望这篇文章能够帮助你理解决策树算法及其应用!

其他信息

其他资源

Top