什么是机器学习?
写在前面 - 课程最前面整个课程中我们将学习包括监督学习和非监督学习在内的诸多算法,以及如何使用它们
由于课程前部分内容都是在两个月前学完的,因此写文章时视频没能完全再看一遍,由于时间问题也就不举例了。如有疏漏补充欢迎指正,期望和有心人一起进步!
机器学习概念
关于机器学习还没有一个统一绝对的定义, 但我们仍然可以获得较为清晰的理解:
“Field of study that gives computers the ability to learn without being explicitly programmed.”
—Arthur Samuel
而更加现代的说法则是:
“A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.”
—Tom Mitchell
其中
- E = 经验,如下棋获得的经验
- T = 任务,即下棋
- P = 概率,下棋中获胜的概率
监督学习
- 数据拥有标签,可以被标记
- 数据输出直接反馈到模型
- 预测输出结果
回归
数据用于连续方程,数据输出也是连续性的
分类
数据用于离散方程,数据输出也是离散性的
非监督学习
在不知道数据输出结果(类型/值)情况下,使用聚类等但是解决问题(一般为分类),这种情况下,输出结果无法向算法给予反馈
- 数据没有明确标签,不可被人为标记
- 数据输出无法给予模型反馈
- 寻找数据间的隐藏关系和属性
模型及代价函数
参数介绍
-
x(i) = 输入变量
-
y(i) = 输出变量
输出变量y取有限固定值,为分类问题;取连续值,为回归问题 -
i = 样本序列
-
j = 特征序列
-
(x(i), y(i)) = 训练样本
-
(x(i), y(i)), i=1, 2, 3,…, n = 训练集
-
X X X = 输入集
-
Y Y Y = 输出集
-
h h h = 假设
-
m = 数据集样本数量
模型展示
其中反馈过程没有表示出来,只反映了一次单向推导过程
代价函数
用来评估假设方程(算法的一部分,可改变)的准确度
假设方程:
h
θ
(
x
i
)
=
θ
0
+
θ
1
x
i
h_\theta (x_{i}) = \theta_0+\theta_1x_{i}
hθ(xi)=θ0+θ1xi
代价函数:
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
y
^
i
−
y
i
)
2
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
i
)
−
y
i
)
2
J(\theta_0, \theta_1) = \dfrac {1}{2m} \displaystyle \sum _{i=1}^m \left ( \hat{y}_{i}- y_{i} \right)^2 = \dfrac {1}{2m} \displaystyle \sum _{i=1}^m \left (h_\theta (x_{i}) - y_{i} \right)^2
J(θ0,θ1)=2m1i=1∑m(y^i−yi)2=2m1i=1∑m(hθ(xi)−yi)2
其中1/2只是为了便于计算梯度下降, 我们需要选择
θ
0
,
θ
1
\theta_0,\theta_1
θ0,θ1使得假设函数更加靠近数据集,如下:
代价函数的重要目标是寻找全局最小值,找到全局最小值,就找到了最准确的参数模型,也就找到了假设方程的最佳参数解,预测的结果也最准确(注意不是找到了最佳算法),因此我们需要避免参数收敛于局部变量的情况
一元函数寻找全局最小值 - θ 1 \theta_1 θ1
左图中,选择不同的参数值,从而获得不同的假设方程曲线,在右图画出
J
(
θ
1
)
J(\theta_1)
J(θ1)
取不同
θ
1
\theta_1
θ1获得不同代价函数(没有
θ
0
\theta_0
θ0),画图找全局最小值
二元函数寻找全局最小值 - θ 0 , θ 1 \theta_0, \theta_1 θ0,θ1
使用等高线图,等高线上的代价函数值相同,原理同上
等高线中心坐标即为全局最小值参数解(包括
θ
0
\theta_0
θ0)
梯度下降算法
寻找全局最小值的通用方法,对代价函数进行了求偏导运算
公式原理
使用梯度下降算法,优化
θ
0
,
θ
1
\theta_0, \theta_1
θ0,θ1,给机器这个公式,让它自己完成算法任务:
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
0
,
θ
1
)
\theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta_0, \theta_1)
θj:=θj−α∂θj∂J(θ0,θ1)
θ
j
收
敛
(
c
o
n
v
e
r
g
e
)
=
J
(
θ
0
,
θ
1
)
取
全
局
最
小
值
\theta_j 收敛(converge) = J(\theta_0, \theta_1)取全局最小值
θj收敛(converge)=J(θ0,θ1)取全局最小值
三维图示原理,此时收敛点在局部最小值,下降步长由
α
\alpha
α确定
参数分析
- θ 1 \theta_1 θ1增加,此处代价函数斜率为负
- θ 1 \theta_1 θ1减小,此处代价函数斜率为正
- α \alpha α越小,下降步长越短,不容易滑落到局部最小值,但是计算量大,时间长
- α \alpha α越大,下降步长越长,更易找到局部最小值及偏离,计算成本小,时间短
- α \alpha α取任何值,理论上都有可能找到局部最小值,正确之道在中庸~
- α \alpha α选定后不再需要改变,因为随着梯度下降的进行步长也会逐渐减小
批次梯度下降
重复这组公式直到到达收敛点(注意 θ 1 \theta_1 θ1公式对偏导项还要乘Xi项,如果假设方程还有二次项呢?):
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
i
)
−
y
i
)
\theta_0 := \theta_0 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m}(h_\theta(x_{i}) - y_{i})
θ0:=θ0−αm1i=1∑m(hθ(xi)−yi)
θ
1
:
=
θ
1
−
α
1
m
∑
i
=
1
m
(
(
h
θ
(
x
i
)
−
y
i
)
x
i
\theta_1 := \theta_1 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m}((h_\theta(x_{i}) - y_{i}) x_{i}
θ1:=θ1−αm1i=1∑m((hθ(xi)−yi)xi
每次进行梯度下降时都应该使用的是相同的,前一组的参数,即进行同步升级
每前进一步,对每个数据进行更新时都要用到前一组的所有数据,进行批量更新,所以叫做批次梯度下降
在线性回归中只有一个全局最小值,因此不存在梯度下降误至局部最小值的问题