基于C#的机器学习--我应该接受这份工作吗-使用决策树

        决策树

       要使决策树完整而有效,它必须包含所有的可能性。事件序列也必须提供,并且是互斥的,这意味着如果一个事件发生,另一个就不能发生。

       决策树是监督机器学习的一种形式,因为我们必须解释输入和输出应该是什么。有决策节点和叶子。叶子是决策,不管是否是最终决策,节点是决策分裂发生的地方。

       虽然有很多算法可供我们使用,但我们将使用迭代二分法(ID3)算法。

在每个递归步骤中,根据一个标准(信息增益、增益比等)选择对我们正在处理的输入集进行最佳分类的属性。

这里必须指出的是,无论我们使用什么算法,都不能保证生成尽可能小的树。因为这直接影响到算法的性能。

请记住,对于决策树,学习仅仅基于启发式,而不是真正的优化标准。让我们用一个例子来进一步解释这一点。

下面的示例来自,它演示了XOR学习概念,我们所有的开发人员都(或应该)熟悉这个概念。稍后的例子中也会出现这种情况,但现在a3和a4与我们要解决的问题完全无关。它们对我们的答案没有影响。也就是说,ID3算法将选择其中一个构建树,事实上,它将使用a4作为根节点!记住,这是算法的启发式学习,而不是优化结果:

基于C#的机器学习--我应该接受这份工作吗-使用决策树

希望这张图能让大家更容易理解刚刚所说的内容。我们的目标并不是深入研究决策树机制和理论。而是如何使用它,尽管存在很多问题,但决策树仍然是许多算法的基础,尤其是那些需要对结果进行人工描述的算法。这也是我们前面试试人脸检测算法的基础。

     决策节点

决策树的一个节点。每个节点可能有关联的子节点,也可能没有关联的子节点

     决策的变量

       此对象定义树和节点可以处理的每个决策变量的性质。值可以是范围,连续的,也可以是离散的。

     决策分支节点的集合

       此集合包含将一个或多个决策节点组,以及关于决策变量的附加信息,以便进行比较。

       下面是一个用于确定金融风险的决策树示例。我们只需要在节点之间导航,就可以很容易地跟随它,决定要走哪条路,直到得到最终的答案。在这种情况下,当有人正在申请贷款,而我们需要对他们的信用价值做出决定。这时决策树就是解决这个问题的一个很好的方法:

基于C#的机器学习--我应该接受这份工作吗-使用决策树

我应该接受这份工作吗?

       你刚刚得到一份新工作,你需要决定是否接受它。有一些重要的事情需要考虑,所以我们将它们作为输入变量或特性,用于决策树。

对你来说最重要的是:薪水、福利、公司文化,当然还有,我能在家工作吗?

我们将创建一个内存数据库并以这种方式添加特性,而不是从磁盘存储中加载数据。我们将创建DataTable并创建列,如下图所示:

基于C#的机器学习--我应该接受这份工作吗-使用决策树

在这之后,我们将加载几行数据,每一行都有一组不同的特性,最后一列应该是Yes或No,作为我们的最终决定:

基于C#的机器学习--我应该接受这份工作吗-使用决策树

一旦所有的数据都创建好并放入表中,我们就需要将之前的特性转换成计算机能够理解的表示形式。

由于数字更简单,我们将通过一个称为编码的过程将我们的特性(类别)转换为一本代码本。该代码本有效地将每个值转换为整数。

注意,我们将传递我们的数据类别作为输入:

 

基于C#的机器学习--我应该接受这份工作吗-使用决策树

接下来,我们需要为决策树创建要使用的决策变量。

这棵树会帮助我们决定是否接受新的工作邀请。对于这个决策,将有几类输入,我们将在决策变量数组中指定它们,以及两个可能的决策,是或者否。

DecisionVariable数组将保存每个类别的名称以及该类别可能的属性的总数。例如,薪水类别有三个可能的值,高、平均或低。我们指定类别名和数字3。然后,除了最后一个类别(即我们的决定)之外,我们对所有其他类别都重复这个步骤:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjjzj.html