如我们再上一章里讲的,机器学习分为两种:有监督学习(supervised learning)和无监督学习(unsupervised learning)。本章将介绍有监督学习以及它的评价标准: 代价函数(cost function)。
1. 有监督学习
朴素地讲,所谓有监督学习就是指“用来学习的资料都带答案,根据学习资料和答案,我们建立出一套“XX情况下的答案是OO”逻辑模型,之后去考试,看看面对资料之外的题我们答题的正确率有多高,再根据正确率对逻辑进行调整”的过程。
有监督学习的具体流程如下:
- 我们将训练数据(training data)传输给我们的学习算法程序
- 算法程序根据训练数据,输出一个模型/函数 h,这个函数在接收到数据x时,就会输出结果h(x)
- 我们将测试数据(test data)交给我们从学习算法程序那里得来的函数h
- 根据每个测试数据,我们会得到一系列的结果
- 根据测试结果,我们调整学习算法
例子:动物分类(只为示意,数据并不严谨)
1. 我们有一系列训练数据,其中包含下面的信息:
叫声 | 分类 |
---|---|
喵喵喵 | 猫 |
喵呜 | 猫 |
汪汪汪 | 狗 |
Meow | 猫 |
Woof | 狗 |
2. 把训练数据交给程序,则学习过程就是:
- “喵喵喵”叫的是“猫”
- “喵呜”叫的是“猫”
- “汪汪汪”叫的是“狗”
- “Meow”叫的是“猫”
- “Woof”叫的是“狗”
得到一个函数h,当收到一个叫声x时,它会进行判断,最后输出一个结果h(x),即“猫”或者“狗”(这里的结果是离散的)。
3. 我们有一系列的测试数据,其中包含以下信息:
叫声 | 分类 |
---|---|
喵~ | 猫 |
喵喵呜~ | 猫 |
汪 | 狗 |
Meow Meow Meow | 猫 |
Woof Woof Woof | 狗 |
4. 将测试数据作为输入交给函数h,得到5个结果,如下:
叫声 | 分类 | 结果 | 评价 |
---|---|---|---|
喵~ | 猫 | 猫 | 正确 |
喵喵呜~ | 猫 | 猫 | 正确 |
汪 | 狗 | 狗 | 正确 |
Meow Meow Meow | 猫 | 狗 | 错误 |
Woof Woof Woof | 狗 | 猫 | 错误 |
5. 我们对5个结果进行分析,并根据结果的好坏对学习算法进行调整
例子2:房价估计(只为示意,数据不严谨)
1. 我们有一系列训练数据,其中包含下面的信息:
房屋面积 ( m 2 m^{2} m2) | 总房价 (万元) |
---|---|
100 | 500 |
60 | 320 |
120 | 600 |
95 | 400 |
75 | 400 |
2. 把训练数据交给程序,则学习过程就是:
- 面积等于100平方米的房子房价为500万
- 面积等于60平方米的房子房价为320万
- 面积等于120平方米的房子房价为600万
- 面积等于95平方米的房子房价为400万
- 面积等于75平方米的房子房价为400万
得到一个函数h,当收到一个房屋面积x时,它会进行判断,最后输出一个结果h(x),即房屋的价格(这里的价格是连续的)。
3. 我们有一系列的测试数据,其中包含以下信息:
房屋面积 ( m 2 m^{2} m2) | 总房价 (万元) |
---|---|
130 | 700 |
65 | 320 |
80 | 700 |
95 | 480 |
75 | 390 |
4. 将测试数据作为输入交给函数h,得到5个结果,如下:
房屋面积 ( m 2 m^{2} m2) | 总房价 (万元) | 预估房价(万元) | 评价 |
---|---|---|---|
130 | 700 | 600 | 低了100万 |
65 | 320 | 350 | 高了30万 |
80 | 700 | 420 | 低了280万 |
95 | 480 | 400 | 低了80万 |
75 | 390 | 400 | 高了10万 |
5. 我们对5个结果进行分析,并根据结果的好坏对学习算法进行调整
可是,我们怎么去评价一个结果是好是坏?好到什么程度?坏到什么程度?这就需要用到代价函数(cost function)了。
2. 什么是代价函数?
代价函数是指,用于计算“预测结果与真实结果之间的差距大小”的计算方法。代价函数还有个名字,叫“损失函数(loss function)”, 而有监督学习的主要工作就是要找到使代价函数or损失函数的值最小的参数,毕竟我们总是希望代价和损失越小越好。
例子:回归问题中的代价函数
代价函数的种类有很多,而处理回归问题最常用的代价函数就是平方误差函数(squared error function), 我们用J表示:
J
θ
=
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
2
m
J_\theta=\frac{\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^{2}}{2m}
Jθ=2m∑i=1m(hθ(x(i))−y(i))2
- m: 训练数据的个数;
- θ \theta θ:学习算法中的参数
- x ( i ) x^{(i)} x(i):第i个训练数据的输入;
- y ( i ) y^{(i)} y(i):第i个训练数据的预期输出(即正确答案);
- h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i)):根据函数h,计算第i个训练数据的输入 x ( i ) x^{(i)} x(i)得到的预测结果;
通过计算预测结果与标准答案之间的差距,我们可以知道“函数h预测的结果到底有多准”,从而针对性地对参数 θ \theta θ进行调整。
预告:
下一节,我们将会介绍一元线性回归以及它的代价函数