寻找决策树的最佳属性
finding best attribute for decision tree
为什么我们要select编辑“最佳”属性?如果我们 select 和任何其他属性会有什么不同吗?
确定在决策树中选择哪个属性的常用方法是 information gain
。基本上,您尝试每个属性并查看哪个属性最能拆分您的数据。查看此套牌的第 6 页:http://homes.cs.washington.edu/~shapiro/EE596/notes/InfoGain.pdf
一如既往视情况而定。但大多数情况下你想尽可能快地执行树,所以你想避免不必要的 decisions/branches。所以你选择了最好的特征(和相应的分割位置),而其他的则需要例如2-3 个分支最终预测样本。
很容易看出,处理一棵有 10 个分支的树通常比处理另一棵有 30 个分支的树要快得多
首先,让我们弄清楚 "best" 属性在决策树中的含义 - 这是 "best" class 确定可用训练示例的属性。为了定义 "best" - 熵 和 信息增益,需要熟悉两个术语。熵是信息论中的一个术语——它是一个数字,表示一组示例基于其目标 class 的异质性。关于熵的另一个观点——它是编码一组示例中的随机示例的 class 所需的位数。另一方面,信息增益显示了如果选择特定属性,一组示例的熵将减少多少。另一种观点 - 它显示了如果选择特定属性,表示随机示例 class 所需的位数减少。
那么,为什么要根据训练样例选择"best"属性呢?答案很简单,因为这就是构建决策树的算法的工作原理 - 它搜索所有可能的决策树并选择第一个 class 使用从简单到复杂的搜索正确验证训练示例的决策树。由于基本实现不包括任何重新访问和更改早期决策的机制,因此使用贪婪方法而不是随机方法是有意义的。
这里有一个简单的例子来演示在构建决策树时不选择 "best" 属性的后果。假设我们有以下训练示例,其属性为 Exam、Friends、Weather 和目标 Activity。这些示例根据是否即将考试、朋友是否有空以及天气是晴天还是雨天来描述首选activity。
╔══════╦═════════╦═════════╦══════════╗
║ Exam ║ Friends ║ Weather ║ Activity ║
╠══════╬═════════╬═════════╬══════════╣
║ yes ║ yes ║ sunny ║ study ║
║ no ║ yes ║ sunny ║ picnic ║
║ yes ║ no ║ rain ║ study ║
║ yes ║ yes ║ rain ║ study ║
║ no ║ yes ║ rain ║ play ║
║ no ║ no ║ rain ║ play ║
╚══════╩═════════╩═════════╩══════════╝
当我们进行数学计算时,我们最终得到以下信息增益数字:
IG(D, Exam) ~ 1
IG(D, Friends) ~ 0.13
IG(D, Weather) ~ 0.46
要为决策树的根选择的 "best" 属性是 Exam。下一步是决定在即将有考试和没有考试时选择哪个属性进行检查。马上要考试了,activity一直在学习,所以没必要再去探索了。在临近没有考试的情况下,我们需要计算选择Friends和Weather:
的信息增益
IG(D-No-Exam, Friends) ~ 0.25
IG(D-No-Exam, Weather) ~ 0.92
按照与之前相同的策略,我们将选择 天气,最终决策树将如下所示:
Exam?
/ \
yes no
/ \
STUDY Weather?
/ \
sunny rain
/ \
PICNIC PLAY
现在让我们构建一个决策树,class使用不同的根 - Friends 并在需要的地方随机选择属性。我们可以得到以下树:
Friends?
/ \
yes no
/ \
Exam? Exam?
/ \ / \
yes no yes no
/ \ | |
STUDY Weather? STUDY PLAY
/ \
sunny rain
/ \
PICNIC PLAY
两棵树都class正确地验证了训练样本。不同的是,第二棵树更复杂,可能对训练数据过拟合。
通过始终选择最佳属性构建决策树的算法 "prefers" 较短且不太复杂的树以及首先检查最佳属性的树。
为什么我们要select编辑“最佳”属性?如果我们 select 和任何其他属性会有什么不同吗?
确定在决策树中选择哪个属性的常用方法是 information gain
。基本上,您尝试每个属性并查看哪个属性最能拆分您的数据。查看此套牌的第 6 页:http://homes.cs.washington.edu/~shapiro/EE596/notes/InfoGain.pdf
一如既往视情况而定。但大多数情况下你想尽可能快地执行树,所以你想避免不必要的 decisions/branches。所以你选择了最好的特征(和相应的分割位置),而其他的则需要例如2-3 个分支最终预测样本。
很容易看出,处理一棵有 10 个分支的树通常比处理另一棵有 30 个分支的树要快得多
首先,让我们弄清楚 "best" 属性在决策树中的含义 - 这是 "best" class 确定可用训练示例的属性。为了定义 "best" - 熵 和 信息增益,需要熟悉两个术语。熵是信息论中的一个术语——它是一个数字,表示一组示例基于其目标 class 的异质性。关于熵的另一个观点——它是编码一组示例中的随机示例的 class 所需的位数。另一方面,信息增益显示了如果选择特定属性,一组示例的熵将减少多少。另一种观点 - 它显示了如果选择特定属性,表示随机示例 class 所需的位数减少。
那么,为什么要根据训练样例选择"best"属性呢?答案很简单,因为这就是构建决策树的算法的工作原理 - 它搜索所有可能的决策树并选择第一个 class 使用从简单到复杂的搜索正确验证训练示例的决策树。由于基本实现不包括任何重新访问和更改早期决策的机制,因此使用贪婪方法而不是随机方法是有意义的。
这里有一个简单的例子来演示在构建决策树时不选择 "best" 属性的后果。假设我们有以下训练示例,其属性为 Exam、Friends、Weather 和目标 Activity。这些示例根据是否即将考试、朋友是否有空以及天气是晴天还是雨天来描述首选activity。
╔══════╦═════════╦═════════╦══════════╗
║ Exam ║ Friends ║ Weather ║ Activity ║
╠══════╬═════════╬═════════╬══════════╣
║ yes ║ yes ║ sunny ║ study ║
║ no ║ yes ║ sunny ║ picnic ║
║ yes ║ no ║ rain ║ study ║
║ yes ║ yes ║ rain ║ study ║
║ no ║ yes ║ rain ║ play ║
║ no ║ no ║ rain ║ play ║
╚══════╩═════════╩═════════╩══════════╝
当我们进行数学计算时,我们最终得到以下信息增益数字:
IG(D, Exam) ~ 1
IG(D, Friends) ~ 0.13
IG(D, Weather) ~ 0.46
要为决策树的根选择的 "best" 属性是 Exam。下一步是决定在即将有考试和没有考试时选择哪个属性进行检查。马上要考试了,activity一直在学习,所以没必要再去探索了。在临近没有考试的情况下,我们需要计算选择Friends和Weather:
的信息增益IG(D-No-Exam, Friends) ~ 0.25
IG(D-No-Exam, Weather) ~ 0.92
按照与之前相同的策略,我们将选择 天气,最终决策树将如下所示:
Exam?
/ \
yes no
/ \
STUDY Weather?
/ \
sunny rain
/ \
PICNIC PLAY
现在让我们构建一个决策树,class使用不同的根 - Friends 并在需要的地方随机选择属性。我们可以得到以下树:
Friends?
/ \
yes no
/ \
Exam? Exam?
/ \ / \
yes no yes no
/ \ | |
STUDY Weather? STUDY PLAY
/ \
sunny rain
/ \
PICNIC PLAY
两棵树都class正确地验证了训练样本。不同的是,第二棵树更复杂,可能对训练数据过拟合。 通过始终选择最佳属性构建决策树的算法 "prefers" 较短且不太复杂的树以及首先检查最佳属性的树。