机器学习(Machine Learning) 介绍与决策树(Decision Tree)


机器学习入门系列 是 个人学习过程中的一些记录与心得。其主要以要点形式呈现,简洁明了。


1.什么是机器学习?

一个比较概括的理解是: 根据现有的数据,预测未来


2.核心思想 : Generalization

可以理解为,归纳、概括。就像是人的学习一样,找出一件事物与与一件事物的联系


3.归纳性的机器学习(Inductive machine learning)

其核心思想是使用训练数据,并从其中摸索出一套适用于现实中的公式 f。然后用这个公式来预测现实中的结果


其分为四种类型

  • Regression 回归类型: 主要适用于预测真实数据

  • Binary Classification : Yes 和 No 的分类问题

  • Multiple Classification: 一对多的分类问题

  • Ranking:相关性的排序问题


4.第一个模型:决策树

决策树的核心思路:divide and conquer。 相信大家在学习 递归编程(recursion)的时候已经很熟悉了这个概念了,那就是将问题拆分到足够简单,然后解决掉它。


为了将现实中的问题转化为我们可以使用的模型,在这里我们提出几个概念

feature(特性):每次决策树在做决定时要问的问题

feature value (特性值):简单理解为问题的回答

training data : 训练数据 > > 即有很多个例子的集合。每个例子 通常以 (x,y)形式形式出现,x 是输入数据,y是实际的结果


5.决策树的工作原理

例如下面的决策树虚拟代码取自《A Course in Machine Learning》(Hal)


机器学习入门 - 1. 介绍与决策树(decision tree)_第1张图片



其核心思路是,从剩余的feature 中选择一个最有用的来提问,如果答案可以直接决定最终结果那么,跳出递归。如果没有剩余的feature 来提问那么返回默认答案。否则将整个数据一分为二,分别是yes 组合 no 组,然后分成两个分支继续递归(16,17行)。


























6.Loss Function,L(y , y*)

y 是真正的结果,y* 是机器预测的结果 L 代表 loss 函数。所以loss function 是用来量化错误的。

根据不同类型可以分为:


  • Regression 回归类:

    • Square loss: 平方损失: L(y , y*) = (y - y*)2

    • Absolute loss: 绝对损失: L(y , y*) = |y - y*|

  • Binary 是和否的问题 以及多组分类问题 : 

    • L(y , y*) = 0 , if y = y* (零损失)

    • L(y , y*) = 1 , if y <> y*


7. 平均损失 Expected Loss

Expected loss = Sum(x,y)( D(x , y) * L(y , y*) )   

D(x,y) 是 (x,y) 发生的概率分布,这里可以理解为(x,y)发生的概率。 所以就是期望值的一般算法, 把概率乘以损失 然后求和。


所以对于我们机器学习推导出来的方程式 f,需要Expected Loss 越低越好。


8.Inductive Bias 归纳偏见

不同的模型或者方法的选择会产生不同的偏见。例如决策树会比较擅长处理单独的一个一个的问题,但是对于几个feature相互作用的问题就收效甚微。

在后续文章会继续介绍不同模型的偏见,这里先提出来。



9. Shallow Decision Tree 

即有最大深度的 决策树,我们可以用一个深度 d 来限制决策树的最深层数


10. Underfitting 和 Overfitting

这是两个非常重要的概念, Underfitting 是指的,学的不够多,例如学生什么都不学就去考试,自然不会考的好。

Overfitting 是指,学生学成了书呆子,只会死记硬背,考试的题目改几个数字就完全不会做了。


在决策树里面,如果一个feature 都不问,那么就是 underfitting ,什么都不学,每次只返回训练数据里面的多数答案。

如果问很多个feature 把 所有的feature都问一边就有可能 overfitting, 完全的照着训练数据在记忆而不是归纳学习。



11.数据分配


数据 说明 百分比
Training Data 训练数据 学习并总结 方程式 f
70%
Development Data 研发数据 调整超级参数(Hyperparameters) 来避免 underfitting 和 overfitting。 10%
Test Data 测试数据 用来评估最后的学习效果。永远不要偷看测试数据!偷看测试数据就好像偷看了考试答卷,只会导致程序有针对性的编程。但是一旦到了真正的运行环境,效果就会十万八千里。 20%


超级参数(Hyperparameters) 是指的可以影响普通参数的参数。例如 刚刚最高询问深度 d,就是一个超级参数。


12.机器学习一般方法


  1. 将数据分成 70% 的训练数据,10% 研发数据, 20% 测试数据

  2. for loop 所有的 hyperparameter (超级参数)

    1. 使用训练数据,训练模型 f

    2. 使用 研发数据 计算 Expected Loss (平均损失)

  3. 从上面所有的 超级参数中,选择平均损失最低的那组作为最终模型

  4. 使用 测试数据对最终模型进行评估





Reference

Hal, Daumé III. A Course In Machine Learning. 2nd ed. Self-published, 2017. Print.