我正在尝试实现ID3算法,并且正在查看伪代码:
(Source)
我对它说的话感到困惑:
如果examples_vi为空,请在示例中的TargegetAttribute中创建一个带有label =最常用值的叶节点。
除非我错过了什么,否则这不应该是最常见的课程吗?
也就是说,如果我们不能在属性值上拆分数据,因为没有样本为特定属性获取该值,那么我们在所有样本中采用最常见的类并使用它?
另外,这不是选择随机课吗?
训练集没有告诉我们属性值和类标签之间的关系......
答案 0 :(得分:1)
1)除非我错过了什么,否则不应该是最多的 普通班?
你是正确的,文字也是这样说的。查看顶部的功能描述:
Target_Attribute is the attribute whose value is to be predicted by the tree
所以Target_Attribute 的值是类/标签。
2)也就是说,如果我们不能在属性值上拆分数据,因为没有样本为特定属性获取该值,那么我们在所有样本中采用最常见的类并使用它?
是的,但整个数据集中的所有样本中没有,而是在树/递归中到达此点的那些样本。 (ID3函数是递归的,因此当前Examples
实际上是调用者的Examples_vi
)
3)另外,这不是选择一个随机的课程吗? 训练集没有告诉我们属性值和类标签之间的关系......
不,选择一个随机类(每个类的机会相等)是不一样的。因为输入通常具有不平衡的类分布(这种分布在许多文本中通常被称为先前分布),因此您可能有99%的示例是正面的,只有1%是负面的。因此,每当你真的没有任何信息来决定某些输入的结果时,预测最可能的类是有意义的,这样你才有可能是正确的。只有在您的训练数据中的类分布与看不见的数据中的类分布相同的情况下,这才能最大限度地提高分类器在看不见数据上的准确性。
当Attributes
为空时,这种解释与基本情况相同(见伪代码文本中的4行);只要我们没有信息,我们就会报告最常见的数据类。
答案 1 :(得分:0)
如果您从未实施过代码(ID3),但仍希望了解更多处理细节,建议您阅读本文:
Building Decision Trees in Python
以下是论文的源代码:
decision tree source code
本文在您的书中有一个示例或使用示例(用相同格式替换" data"文件)。你可以在eclipse中调试它(带一些断点)来检查算法运行期间的属性值。
仔细阅读它,你会更好地理解ID3。