吴恩达机器学习课程地址
机器学习(Machine Learning):是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。一个程序被认为能从经验E中学习,解决任务 T,达到性能度量值P,当且仅当,有了经验E后,经过P评判, 程序在处理T时的性能有所提升。
监督学习(Supervised Learning):对于数据集中每一个样本都有对应的标签(被告知什么是所谓的正确答案),包括回归(regression)和分类(classification)
· 回归(Regression):预测连续的数值输出
· 分类(Classification):预测离散值的输出
无监督学习(Unsupervised Learning):数据集中没有任何的标签(只知道这里有数据,但不知道这些数据的结构,包括聚类(clustering),比如Google news(收集大量的新闻,将其分成一个个的新闻专题)。
实现公式:[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x’)
· SVD:奇异值分解函数
·Notation:
m | 训练集的样本数 |
---|---|
x‘s | 输入的变量/特征 |
y’s | 输出的变量/目标变量 |
(x,y) | 一个训练集中的样本 |
(x(i),y((i)) | 第i个训练样本 |
假设函数h(hypothesis):是一个从输入x到输出y的映射,h(x) = θ0 +θ1x。θ0 和θ1都是模型参数
代价函数(cost function) J ( θ ) \mathop{J}(θ) J(θ),通常使用平方误差函数,如下:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 , m 为 训 练 样 本 数 J(θ_{0},θ_{1}) = \frac{1}{2m} \sum_{i=1}^{m} (h(x^{(i)})-y^{(i)})^{2},m为训练样本数 J(θ0,θ1)=2m1i=1∑m(h(x(i))−y(i))2,m为训练样本数
训练的目标是为了最小化代价函数,即 m i n m i z e θ 0 , θ 1 J ( θ 0 , θ 1 ) 。 \mathop{minmize} \limits_{θ_{0},θ_{1}}J(θ_{0},θ_{1})。 θ0,θ1minmizeJ(θ0,θ1)。
简化一下,当θ0 = 0时,假设函数就时一个过原点的直线,此时h(x) = θ1x。
代价函数的另外一个图形表示是等高图,如图所示:
当你的点离同心椭圆的中心点越近,说明你的拟合更准确
代价函数: J ( θ 0 , θ 1 ) J(θ_{0},θ_{1}) J(θ0,θ1),可以推广到更多元的函数 J ( θ 0 , θ 1 , θ 2 , . . . θ n ) J(θ_{0},θ_{1},θ_{2},...θ_{n}) J(θ0,θ1,θ2,...θn)
目标: m i n m i z e θ 0 , θ 1 J ( θ 0 , θ 1 ) 。 \mathop{minmize} \limits_{θ_{0},θ_{1}}J(θ_{0},θ_{1})。 θ0,θ1minmizeJ(θ0,θ1)。
设置初始的 θ 0 , θ 1 θ_{0},θ_{1} θ0,θ1,然后更新公式:-
θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) , 对 于 j = 0 , 1 时 θ_{j} := θ_{j} -α\frac{\partial}{\partialθ_{j}}J(θ_{0},θ_{1}) ,对于j=0,1时 θj:=θj−α∂θj∂J(θ0,θ1),对于j=0,1时
θ0 和 θ1 是要同时更新的,即在计算完θ0后在计算θ1时,使用的θ0还是计算前的θ0
α \alpha α被称为学习速率(learning rate),用来控制下降时幅度多大。
α \alpha α如果太小的话,会导致梯度下降的很慢,如果 α \alpha α太大的话,梯度下降可能无法收敛甚至发散
n | 特征量的数目 |
---|---|
x(i) | 第i个训练样本输入的特征值 |
xj(i) | 第i个训练样本中的第j个特征值 |
假设函数h(hypothesis):hθ(x) = θ0 +θ1x1+θ2x2+…+θnxn。为了方便起见,设x0 = 1,
从而x = [x0,x1,x2,…,xn]T, x ∈ ℜ n + 1 x \in \Re^{n+1} x∈ℜn+1,θ = [θ0,θ1,θ2,…,θn]T, θ ∈ ℜ n + 1 \theta \in \Re^{n+1} θ∈ℜn+1
因此假设函数可以记为 h θ ( x ) = θ T x h_{\theta}(x) = \theta^{T}x hθ(x)=θTx
代价函数:
J ( θ ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 , 此 时 θ 是 一 个 n + 1 维 的 向 量 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h(x^{(i)})-y^{(i)})^{2},此时\theta是一个n+1维的向量 J(θ)=2m1i=1∑m(h(x(i))−y(i))2,此时θ是一个n+1维的向量
梯度下降更新公式:
θ j : = θ j − α ∂ ∂ θ j J ( θ ) , 对 每 个 j = 0 , . . . , n 都 是 同 步 更 新 的 θ_{j} := θ_{j} -α\frac{\partial}{\partialθ_{j}}J(θ) ,对每个j = 0,...,n都是同步更新的 θj:=θj−α∂θj∂J(θ),对每个j=0,...,n都是同步更新的
更精确的:
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) θ_{j} := θ_{j} -α\frac{1}{m} \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)} θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
目的:确保不同特征的取值都在相近的范围内,这样梯度下降法可以更快的收敛,通常使每个特征都近似的在 − 1 ≤ x i ≤ 1 -1\le x_{i} \le 1 −1≤xi≤1之间(不是强制的)
归一化(Mean normalization):
x i = x i − μ s i , 其 中 μ 为 特 征 x i 的 平 均 值 , s i 为 特 征 x i 的 范 围 ( m a x − m i n ) ( 也 可 是 特 征 i 标 准 差 ) x_{i} = \frac{x_{i} - \mu}{s_{i}},其中\mu为特征x_{i}的平均值,s_{i}为特征x_{i}的范围(max-min)(也可是特征i标准差) xi=sixi−μ,其中μ为特征xi的平均值,si为特征xi的范围(max−min)(也可是特征i标准差)
梯度下降更行公式: θ j : = θ j − α ∂ ∂ θ j J ( θ ) θ_{j} := θ_{j} -α\frac{\partial}{\partialθ_{j}}J(θ) θj:=θj−α∂θj∂J(θ)
例子: 房价预测问题
对代价函数 J ( θ ) J(\theta) J(θ)求偏导并令所有的偏导为零,解出 θ = ( X T X ) − 1 X T y \theta = (X^{T}X)^{-1}X^{T}y θ=(XTX)−1XTy
x ( i ) = ( x 0 ( i ) x 1 ( i ) x 2 ( i ) . . . x n ( i ) ) ∈ R n + 1 , y = ( y 1 y 2 . . . y m ) ∈ R m x^{(i)}=\left( \begin{matrix} x_{0}^{(i)} \\ x_{1}^{(i)}\\ x_{2}^{(i)}\\ .\\ .\\ .\\ x_{n}^{(i)}\\ \end{matrix} \right )\in\R^{n+1}, y = \left( \begin{matrix} y_{1}\\ y_{2}\\ .\\ .\\ .\\ y_{m}\\ \end{matrix} \right )\in\R^{m} x(i)=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛x0(i)x1(i)x2(i)...xn(i)⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞∈Rn+1,y=⎝⎜⎜⎜⎜⎜⎜⎛y1y2...ym⎠⎟⎟⎟⎟⎟⎟⎞∈Rm
如果特征的数量不是很大(approximate <10000)时,正规方程通常时很好的;如果特征量很多的的话,梯度下降会好一点
逻辑回归模型: h θ ( x ) h_{\theta}(x) hθ(x) ,让 0 ≤ h θ ( x ) ≤ 1 0 \le h_{\theta}(x) \le1 0≤hθ(x)≤1
在线性回归中, h θ ( x ) = θ T x h_{\theta}(x) = \theta^{T}x hθ(x)=θTx,在逻辑回归中令 h θ ( x ) = g ( θ T x ) h_{\theta}(x) = g(\theta^{T}x) hθ(x)=g(θTx),,将 θ T x \theta^{T}x θTx带入g(x)得:
h θ ( x ) = 1 1 + e − θ T x h_{\theta}(x) = \frac{1}{1+e^{-\theta^{T}x}} hθ(x)=1+e−θTx1
其中 g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+e−z1被称为Sigmod函数,也叫Logistic函数。
h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_{\theta}(x) = P(y=1|x;\theta) hθ(x)=P(y=1∣x;θ) ( 对于输入的x,y=1的概率估计)
Suppose predict: " y = 1 " i f h θ ( x ) ≥ 0.5 "y = 1"\ if \; h_{\theta}(x) \ge 0.5 "y=1" ifhθ(x)≥0.5
predict: " y = 0 " i f h θ ( x ) < 0.5 "y = 0" \ if \ h_{\theta}(x) < 0.5 "y=0" if hθ(x)<0.5
h θ ( x ) ≥ 0.5 ⟶ z ≥ 0.5 ⟶ θ T x ≥ 0 h_{\theta}(x) \ge 0.5 \ \longrightarrow \ z\ge 0.5 \ \longrightarrow \ \theta^{T}x\ge0 hθ(x)≥0.5 ⟶ z≥0.5 ⟶ θTx≥0
h θ ( x ) < 0.5 ⟶ z ≤ 0.5 ⟶ θ T x < 0 h_{\theta}(x) < 0.5 \ \longrightarrow \ z\le 0.5 \ \longrightarrow \ \theta^{T}x < 0 hθ(x)<0.5 ⟶ z≤0.5 ⟶ θTx<0
定义 θ T x = 0 \theta^{T}x=0 θTx=0为决策边界,注意决策边界是假设函数的属性,取决于其参数 θ \theta θ,不是数据集的属性
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) J(\theta) = \frac{1}{m} \sum_{i=1}^{m} Cost(h_{\theta}(x^{(i)}),y^{(i)}) J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))
Logistic regression cost function:
C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) i f y = 1 − l o g ( 1 − h θ ( x ) ) i f y = 0 Cost(h_{\theta}(x),y)=\left\{ \begin{aligned} -log(h_{\theta}(x)) \quad if \ y = 1 \\ -log(1-h_{\theta}(x)) \quad if \ y = 0 \end{aligned} \right. Cost(hθ(x),y)={−log(hθ(x))if y=1−log(1−hθ(x))if y=0
注意:y永远只能是1/0
我们可以将 C o s t ( h θ ( x ) , y ) Cost(h_{\theta}(x),y) Cost(hθ(x),y)写成: − y l o g ( h θ ( x ) ) − ( 1 − y ) l o g ( 1 − h θ ( x ) ) -ylog(h_{\theta}(x))-(1-y)log(1-h_{\theta}(x)) −ylog(hθ(x))−(1−y)log(1−hθ(x))
所以根据最大似然法:
J ( θ ) = J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) = − 1 m ∑ i = 1 m ( y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ) J(\theta) = J(\theta) = \frac{1}{m} \sum_{i=1}^{m} Cost(h_{\theta}(x^{(i)}),y^{(i)}) = -\frac{1}{m} \sum_{i=1}^{m} ( y^{(i)}log(h_{\theta}(x^{(i)})) + (1-y^{(i)})log(1-h_{\theta}(x^{(i)}))) J(θ)=J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))=−m1i=1∑m(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))
拟合参数: m i n θ J ( θ ) \mathop{min} \limits_{\theta} J(\theta) θminJ(θ)
∂ ∂ θ j J ( θ ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) , 对 每 个 j = 0 , . . . , n 都 是 同 步 更 新 的 \frac{\partial}{\partialθ_{j}}J(θ) = \frac{1}{m} \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)} ,对每个j = 0,...,n都是同步更新的 ∂θj∂J(θ)=m1i=1∑m(hθ(x(i))−y(i))xj(i),对每个j=0,...,n都是同步更新的
θ j : = θ j − α ∂ ∂ θ j J ( θ ) = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) θ_{j} := θ_{j} - \alpha \frac{\partial}{\partialθ_{j}}J(θ)= θ_{j} -α\frac{1}{m} \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)} θj:=θj−α∂θj∂J(θ)=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
1.共轭梯度法
2.BFGS
e.g. 天气会有晴天、多云、雨天、雪天
One-vs-all:
训练出每个 h θ ( i ) ( x ) h_{\theta}^{(i)}(x) hθ(i)(x)后,对一个新的输入,找哪个假设函数的值最大,说明这个数据更符合这一个
Regularization:
对于参数值 θ 0 , θ 1 . . . , θ n \theta_{0},\theta_{1}...,\theta_{n} θ0,θ1...,θn其值都比较小,那么我们可以:1.有一个更简单的假设模型(因为在某些参数趋于时,函数会更趋向于一个更低次的函数)。2.更不容易出现过拟合问题
线性回归代价函数:
对 θ j \theta_{j} θj加入惩罚项,将除了 θ 0 \theta_{0} θ0之外的所有参数值都进行缩小:
J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 m θ j 2 ] , 不 对 θ 0 进 行 惩 罚 J(\theta) = \frac{1}{2m}[ \sum_{i=1}^{m} (h_{\theta}(x^{(i)})-y^{(i)})^{2}+\lambda\sum_{j=1}^{m}\theta_{j}^{2}] ,不对\theta_{0}进行惩罚 J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λj=1∑mθj2],不对θ0进行惩罚
逻辑回归代价函数:
J ( θ ) = − 1 m ∑ i = 1 m ( y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ) + λ 2 m ∑ j = 1 m θ j 2 , 不 对 θ 0 进 行 惩 罚 J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} ( y^{(i)}log(h_{\theta}(x^{(i)})) + (1-y^{(i)})log(1-h_{\theta}(x^{(i)})))+\frac{\lambda}{2m}\sum_{j=1}^{m}\theta_{j}^{2} ,不对\theta_{0}进行惩罚 J(θ)=−m1i=1∑m(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))+2mλj=1∑mθj2,不对θ0进行惩罚
拟合参数::
m i n θ J ( θ ) \mathop{min} \limits_{\theta}J(\theta) θminJ(θ)
为社么单独把 θ 0 \theta_{0} θ0拿出来?因为正则化不惩罚 θ 0 \theta_{0} θ0
样子和之前的线性回归梯度下降算法一样,知识 h θ ( x ) h_{\theta}(x) hθ(x)是逻辑回归中的假设函数
上图代表单个的神经元。神经网络即是一组神经元。典型的三层神经网络如下图所示:
详细解释:
a i ( j ) : 第 j 层 的 单 元 i 的 激 活 项 。 ( “ a c t i v a t i o n o f u n i t i i n l a y e r j ” ) ( 激 活 项 就 是 指 由 一 个 具 体 的 神 经 元 计 算 并 输 出 的 值 ) a _{i}^{(j)} :第j层的单元i的激活项。(“activation\ of \ unit \ i\ in \ layer \ j”)(激活项就是指由一个具体的神经元计算并输出的值) ai(j):第j层的单元i的激活项。(“activation of unit i in layer j”)(激活项就是指由一个具体的神经元计算并输出的值)
Θ ( j ) : 第 j 层 ( u n i t s : s j ) 到 第 j + 1 层 ( u n i t s : s j + 1 ) 的 权 重 矩 阵 , 维 数 : s j + 1 × ( s j + 1 ) \Theta^{(j)}:第j层(units: s_{j} )到第j + 1层(units: s_{j+1})的权重矩阵,维数:s_{j+1}\times (s_j+1) Θ(j):第j层(units:sj)到第j+1层(units:sj+1)的权重矩阵,维数:sj+1×(sj+1)
a 1 ( 2 ) = g ( Θ 10 ( 1 ) x 0 + Θ 11 ( 1 ) x 1 + Θ 12 ( 1 ) x 2 + Θ 13 ( 1 ) x 3 ) a_{1}^{(2)} = g(\Theta_{10}^{(1)}x_{0}+\Theta_{11}^{(1)}x_{1}+\Theta_{12}^{(1)}x_{2}+\Theta_{13}^{(1)}x_{3}) a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)
a 2 ( 2 ) = g ( Θ 20 ( 1 ) x 0 + Θ 21 ( 1 ) x 1 + Θ 22 ( 1 ) x 2 + Θ 23 ( 1 ) x 3 ) a_{2}^{(2)} = g(\Theta_{20}^{(1)}x_{0}+\Theta_{21}^{(1)}x_{1}+\Theta_{22}^{(1)}x_{2}+\Theta_{23}^{(1)}x_{3}) a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)
a 3 ( 2 ) = g ( Θ 30 ( 1 ) x 0 + Θ 31 ( 1 ) x 1 + Θ 32 ( 1 ) x 2 + Θ 33 ( 1 ) x 3 ) a_{3}^{(2)} = g(\Theta_{30}^{(1)}x_{0}+\Theta_{31}^{(1)}x_{1}+\Theta_{32}^{(1)}x_{2}+\Theta_{33}^{(1)}x_{3}) a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
h θ ( x ) = a 1 ( 3 ) = g ( Θ 10 ( 2 ) a 0 ( 2 ) + ( Θ 11 ( 2 ) a 1 ( 2 ) + ( Θ 12 ( 2 ) a 2 ( 2 ) + ( Θ 13 ( 2 ) a 3 ( 2 ) ) h_{\theta}(x) = a_{1}^{(3)} = g(\Theta_{10}^{(2)}a_{0}^{(2)}+(\Theta_{11}^{(2)}a_{1}^{(2)}+(\Theta_{12}^{(2)}a_{2}^{(2)}+(\Theta_{13}^{(2)}a_{3}^{(2)}) hθ(x)=a1(3)=g(Θ10(2)a0(2)+(Θ11(2)a1(2)+(Θ12(2)a2(2)+(Θ13(2)a3(2))
L = 神 经 网 络 的 总 层 数 L = 神经网络的总层数 L=神经网络的总层数
s l = 在 第 l 层 中 总 的 计 算 单 元 数 ( 不 包 括 偏 差 单 元 ) s_{l} = 在第l层中总的计算单元数(不包括偏差单元) sl=在第l层中总的计算单元数(不包括偏差单元)
逻辑回归的代价函数:
J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta) = -\frac{1}{m}[ \sum_{i=1}^{m} y^{(i)}log(h_{\theta}(x^{(i)}) + (1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]+\frac{\lambda}{2m} \sum_{j = 1}^{n}\theta_{j}^{2} J(θ)=−m1[i=1∑my(i)log(hθ(x(i))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
神经网络的代价函数:
h Θ ( x ) ∈ ℜ K , ( h Θ ( x ) ) i = i t h o u t p u t h_{\Theta}(x) \in \Re^{K},(h_{\Theta}(x))_{i} = i^{th} output hΘ(x)∈ℜK,(hΘ(x))i=ithoutput
J ( θ ) = − 1 m [ ∑ i = 1 m ∑ k = 1 K y k ( i ) l o g ( h Θ ( x ( i ) ) ) k + ( 1 − y k ( i ) ) l o g ( 1 − ( h Θ ( x ( i ) ) ) k ) ] + λ 2 m ∑ l = 1 L − 1 ∑ i = 1 s l ∑ j = 1 s l + 1 ( Θ j i ( l ) ) 2 J(\theta) = -\frac{1}{m} [\sum_{i = 1}^{m}\sum_{k = 1}^{K}y_{k}^{(i)}log(h_{\Theta}(x^{(i)}))_{k} + (1-y_{k}^{(i)})log(1-(h_{\Theta}(x^{(i)}))_{k})]+\frac{\lambda}{2m}\sum_{l = 1}^{L-1}\sum_{i = 1}^{s_{l}}\sum_{j= 1}^{s_{l+1}}(\Theta_{ji}^{(l)})^{2} J(θ)=−m1[i=1∑mk=1∑Kyk(i)log(hΘ(x(i)))k+(1−yk(i))log(1−(hΘ(x(i)))k)]+2mλl=1∑L−1i=1∑slj=1∑sl+1(Θji(l))2
计算目标: min θ J ( Θ ) \min \limits _{\theta}J({\Theta}) θminJ(Θ)
需要计算:
δ j ( l ) = 第 l 层 第 j 个 节 点 的 误 差 ( e r r o r ) \delta_{j}^{(l)} = 第l层第j个节点的误差(error) δj(l)=第l层第j个节点的误差(error)
对于每个输出单元: δ j ( 4 ) = a j ( 4 ) − y j \delta_{j}^{(4)} = a_{j}^{(4)} - y_{j} δj(4)=aj(4)−yj,写成向量形式为: δ ( 4 ) = a ( 4 ) − y , 维 度 为 输 出 单 元 的 数 目 \delta^{(4)} = a^{(4)} -y,维度为输出单元的数目 δ(4)=a(4)−y,维度为输出单元的数目,由输出层逐级往上计算 δ ( l ) , δ ( l − 1 ) , . . . , δ ( 2 ) \delta^{(l)},\delta^{(l-1)},...,\delta^{(2)} δ(l),δ(l−1),...,δ(2)(没有 δ ( 1 ) \delta^{(1)} δ(1)):
δ ( 3 ) = ( Θ ( 3 ) ) T δ ( 4 ) . ∗ g ′ ( z ( 3 ) ) , g ′ ( z ( 3 ) ) = a ( 3 ) . ∗ ( 1 − a ( 3 ) ) , " . ∗ " 代 表 的 是 点 乘 \delta^{(3)} = (\Theta^{(3)})^{T}\delta^{(4)}.*g'(z^{(3)}),g'(z^{(3)}) = a^{(3)}.*(1-a^{(3)}),".*"代表的是点乘 δ(3)=(Θ(3))Tδ(4).∗g′(z(3)),g′(z(3))=a(3).∗(1−a(3)),".∗"代表的是点乘
δ ( 2 ) = ( Θ ( 2 ) ) T δ ( 3 ) . ∗ g ′ ( z ( 2 ) ) , g ′ ( z ( 2 ) ) = a ( 2 ) . ∗ ( 1 − a ( 2 ) ) \delta^{(2)} = (\Theta^{(2)})^{T}\delta^{(3)}.*g'(z^{(2)}),g'(z^{(2)}) = a^{(2)}.*(1-a^{(2)}) δ(2)=(Θ(2))Tδ(3).∗g′(z(2)),g′(z(2))=a(2).∗(1−a(2))
所以我们可以证明(忽略 λ \lambda λ,即 λ = 0 \lambda = 0 λ=0):
∂ ∂ Θ i j ( l ) J ( Θ ) = a j ( l ) δ i ( l + 1 ) \frac{\partial}{\partial \Theta_{ij}^{(l)}}J(\Theta) =a_{j}^{(l)}\delta_{i}^{(l+1)} ∂Θij(l)∂J(Θ)=aj(l)δi(l+1)
矩阵D是梯度矩阵
前向传播的理解:
理解反向传播:
δ \delta δ项是代价函数关于这些中间项的偏导数,衡量影响神经网络的权值,进而影响神经网络的输出的程度。
实际上在上图分别多了一个θ和D的矩阵
**使用矩阵表达式的好处:**参数以矩阵的形式储存,在正向/反向传播时会更方便,也会更能充分利用向量化实现
**使用向量表达式的好处:**当拥有像thetaVec/gradientVec,在使用一些高级优化算法时可以直接用
使用梯度检测可以保证前向/反向传播是百分百正确的
如果得到的gradApporx ≈DVec(从反向传播中得到的),那说明反向传播的实现是正确的
一旦验证了反向传播是正确的,那么在训练开始之前一定要关掉梯度检验,因为它会特别慢
不能将θ初始化成0,因为如果这样做,会导致在后面的计算中绿色/红色/蓝色的权重依然是相等的即使它们不再是全0
对于隐藏层节点的数量,与输入特征的数量相匹配(相同/两倍/三倍)是比较好的选择
机器学习诊断法(machine learning diagnostic):
一种方法是将所有数据分为两部分,前70%是作为训练集,后30%是作为测试集
但是如果数据集里的数据是有特定的顺序/规律的话,那么就随机选择70%的数据为训练集,其余30%为测试集
上面拟合后的模型是不能预测出假设对于新样本的泛化能力的,因为这些参数 θ \theta θ能很好地拟合训练集,但对于其他的数据可能就没这么好了
一般来说,我们将数据集划分成训练集(60%)、交叉验证(cross validate)集(20%)和测试集(20%):
在训练集上我们学习参数 θ : m i n J ( θ ) \theta:minJ(\theta) θ:minJ(θ);对得到的参数 θ \theta θ选择 J c v ( θ ) J_{cv}(\theta) Jcv(θ)最小的模型;最后用 J t e s t ( θ ) J_{test}(\theta) Jtest(θ)来估计泛化误差
一般来说,欠拟合会产生高偏差;过拟合过产生高方差;
具体来说,当模型欠拟合时,训练误差和验证误差都会较大;当模型过拟合时,训练误差很小,然而验证误差很大,如下图:
如何处理高方差和高偏差问题呢?
一般来说,加入合适的正则化项可以有效地避免过拟合(即高方差)
注意 J t r a i n ( θ ) , J c v ( θ ) 和 J t e s t ( θ ) 都 没 有 正 则 化 项 J_{train}(\theta),J_{cv}(\theta)和J_{test}(\theta)都没有正则化项 Jtrain(θ),Jcv(θ)和Jtest(θ)都没有正则化项
当正则化参数 λ \lambda λ较大时 , θ j ≈ 0 \theta_{j} \approx0 θj≈0(除 θ 0 \theta_0 θ0外),假设函数趋于直线,因而会造成高偏差的问题,导致欠拟合;
当正则化参数 λ \lambda λ较小时,正则化项不起作用,模型会变得过拟合。如图:
一般的,对于高偏差问题(欠拟合):
对于高方差问题(过拟合):
对于神经网络来说,参数越少,越有可能欠拟合;参数越多,网络结构越复杂,越有可能过拟合,应该加入正则化项。
如何选择神经网络的层数?尝试把数据集划分成上面的三部分,然后训练有一/二/三…个隐藏层的网络,然后验证哪个的 J c v ( θ ) J_{cv}(\theta) Jcv(θ)最小
开发一个复杂的机器学习系统:
e.g.设计一个垃圾邮件分类系统,发现错误识别的邮件中钓鱼邮件的数量是最多的,所以可以画更多的时间来改进钓鱼邮件的识别
y = 1 in presence of rare class(稀有类别,即该类别在所给样本中比较少出现) that we want to detect
如图,如果某个类分类结果为1,如果算法预测结果也为1,称为真阳性(TP),如果算法预测结果为0,称为假阴性(FN);如果某个类分类结果为0,如果算法预测结果也为0,称为真阴性(TN),如果算法预测结果为1,称为假阳性(FP)。
Precision: 预测为正,实际为正的概率(e.g.对所有预测患癌的患者,有多大几率真得了)
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} Precision=TP+FPTP
Recall: 正例被准确预测的概率,也叫查全率,敏感性(e.g. 假设所有都得癌症了,有多大几率正确预测他们得了)
R e c a l l = T P T P + F N Recall = \frac{TP}{TP+FN} Recall=TP+FNTP
一个算法如果有高查准率和召回率,那么说明这个算法比较好
对于一个逻辑回归问题,以癌症预测为例,我们之前是设定如果 h θ ( x ) ≥ 0.5 h_\theta(x)\ge0.5 hθ(x)≥0.5,判断 y=1,即患癌症;如果 h θ ( x ) < 0.5 h_\theta(x) < 0.5 hθ(x)<0.5,判断 y=0,即为良性肿瘤,这时候的查准率和召回率处在一个平衡的水平。
但如果以上面的方法进行预测,那么很有可能在没有准确把握的情况下将病人诊断为患癌。我们希望只有在有准确把握的情况下将病人诊断为癌症,于是修改算法如下:
当 h θ ( x ) ≥ 0.9 , 预 测 y = 1 当 h θ ( x ) ≤ 0.9 , 预 测 y = 0 当\quad h_\theta(x)\ge0.9,\quad预测\quad y=1\\ 当\quad h_\theta(x)\le0.9,\quad预测\quad y=0 当hθ(x)≥0.9,预测y=1当hθ(x)≤0.9,预测y=0
这样子的话会导致查准率变高,召回率变低;反之,当我们想要尽可能让所有患癌的患者被正确诊断不错过最佳治疗时期,我们需要将假阴性样本提高,算法修改如下:
当 h θ ( x ) ≥ 0.3 , 预 测 y = 1 当 h θ ( x ) ≤ 0.3 , 预 测 y = 0 当\quad h_\theta(x)\ge0.3,\quad预测\quad y=1\\ 当\quad h_\theta(x)\le0.3,\quad预测\quad y=0 当hθ(x)≥0.3,预测y=1当hθ(x)≤0.3,预测y=0
这样子的话会导致查准率变低,召回率变高。
所以对大多数算法来说,我们必须要在precision和recall之间进行权衡:
F 1 = 2 P R P + R F_{1} = 2\frac{PR}{P+R} F1=2P+RPR
选择最大的F score
支持向量机就是对于逻辑回归问题得到的损失函数,进行以直线替代曲线,从而起到优化的作用。
c o s t ( θ , x ) = − ( y l o g h θ ( x ) + ( 1 − y ) l o g ( 1 − h θ ( x ) ) ) cost(\theta,x) = -(ylogh_{\theta}(x)+(1-y)log(1-h_{\theta}(x))) cost(θ,x)=−(yloghθ(x)+(1−y)log(1−hθ(x)))
左图为 y=1 时得到的图像,右图是 y=0 时得到的图像。可以看到该函数为一条曲线,我们用两条直线可以得到与图中一条曲线差不多的图像,分别将左图由直线组成的函数称为 c o s t 1 ( z ) cost_{1}(z) cost1(z),将右图由直线组成的函数称为 c o s t 0 ( z ) cost_{0}(z) cost0(z)。
逻辑回归优化目标如下:
m i n θ 1 m ∑ i = 1 m [ y ( i ) ( − l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) ( ( − l o g ( 1 − h θ ( x ( i ) ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 \mathop{min} \limits_{\theta}\frac{1}{m} \sum_{i=1}^{m} [ y^{(i)}(-log(h_{\theta}(x^{(i)})) + (1-y^{(i)})((-log(1-h_{\theta}(x^{(i)})))]+\frac{\lambda}{2m}\sum_{j=1}^{n}\theta_{j}^{2} θminm1i=1∑m[y(i)(−log(hθ(x(i)))+(1−y(i))((−log(1−hθ(x(i))))]+2mλj=1∑nθj2
我们将逻辑回归的整体优化目标做出以下改变:
所以我们可以得到支持向量机SVM整体优化目标函数:
m i n θ C ∑ i = 1 m [ y ( i ) c o s t 1 ( θ T x ( i ) ) + ( 1 − y ( i ) ) c o s t 0 ( θ T x ( i ) ) ] + 1 2 ∑ i = 1 n θ j 2 \mathop{min} \limits_{\theta} C\sum_{i = 1}^{m}[y^{(i)}cost_{1}(\theta^{T}x^{(i)}) + (1-y^{(i)})cost_{0}(\theta^{T}x^{(i)})] + \frac{1}{2} \sum_{i = 1}^{n}\theta_{j}^{2} θminCi=1∑m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+21i=1∑nθj2
支持向量机并不会输出概率,而是进行直接的预测(y = 1/0)
当取到一个较大的C值时,当 y ( i ) = 1 y^{(i)} = 1 y(i)=1时, θ T x ( i ) ≥ 1 \theta^{T}x^{(i)} \ge 1 θTx(i)≥1,当 y ( i ) = 0 y^{(i)} = 0 y(i)=0时, θ T x ( i ) ≤ − 1 \theta^{T}x^{(i)} \le -1 θTx(i)≤−1
如果我们把优化问题看成是通过选择参数使SVM的第一项为零,那么优化问题就成为 m i n θ C × 0 + 1 2 ∑ i = 1 n θ j 2 , s . t . θ T x ( i ) ≥ 1 i f y ( i ) = 1 ; e l s e θ T x ( i ) ≤ − 1 \mathop{min} \limits_{\theta} C \times 0 + \frac{1}{2} \sum_{i = 1}^{n}\theta_{j}^{2},s.t. \ \theta^{T}x^{(i)} \ge 1 \ if\ y^{(i)} = 1;else\ \theta^{T}x^{(i)} \le -1 θminC×0+21i=1∑nθj2,s.t. θTx(i)≥1 if y(i)=1;else θTx(i)≤−1
因此我们可以得到SVM的决策边界
1 2 ∑ i = 1 n θ j 2 = 1 2 ( θ 1 2 + . . . + θ n 2 ) 2 = 1 2 ∣ ∣ θ ∣ ∣ 2 \frac{1}{2} \sum_{i = 1}^{n}\theta_{j}^{2} = \frac{1}{2}(\sqrt{\theta_{1}^{2}+...+\theta_n^{2}})^{2} = \frac{1}{2}||\theta||^{2} 21i=1∑nθj2=21(θ12+...+θn2)2=21∣∣θ∣∣2
进行简化:令 θ 0 = 0 \theta_{0} = 0 θ0=0,n = 2
所以有:
θ T x ( i ) = p ( i ) ∣ ∣ θ ∣ ∣ = θ 1 x 1 ( i ) + θ 2 x 2 ( i ) , p ( i ) 是 x ( i ) 在 θ 上 的 投 影 长 度 ( 可 正 可 负 ) \theta^{T}x^{(i)} = p^{(i)}||\theta|| = \theta_{1}x_{1}^{(i)} + \theta_{2}x_{2}^{(i)},p^{(i)}是x^{(i)}在\theta上的投影长度(可正可负) θTx(i)=p(i)∣∣θ∣∣=θ1x1(i)+θ2x2(i),p(i)是x(i)在θ上的投影长度(可正可负)
决策边界转换为:
在左图中:对样本 x ( 1 ) x^{(1)} x(1),短的红线段 p ( 1 ) p^{(1)} p(1)是样本到参数 θ {{\theta }} θ的投影,它非常短。类似地,对样本 x ( 2 ) x^{(2)} x(2),它到 θ {{\theta }} θ的投影是粉色线段 p ( 2 ) p^{(2)} p(2),这个投影非常短。 p ( 2 ) p^{(2)} p(2)事实上是一个负值。
由于 p ( i ) p^{(i)} p(i)将会是非常小的数,因此当我们考察优化目标函数的时候,对于正样本而言,我们需要 p ( i ) ⋅ ∣ ∣ θ ∣ ∣ ≥ 1 p^{(i)}\cdot{\left|| \theta \right||} \ge1 p(i)⋅∣∣θ∣∣≥1,但 p ( i ) p^{(i)} p(i)非常小,那就表明 θ {{\theta }} θ的范数非常大。类似地,对于负样本而言 p ( 2 ) ⋅ ∣ θ ∣ < = − 1 p^{(2)}\cdot{\left|\theta \right|}<=-1 p(2)⋅∣θ∣<=−1。 p ( 2 ) p^{(2)} p(2)会是一个非常小的数,因此唯一的办法就是 θ {{\theta }} θ的范数变大。但是我们的目标函数是希望找到一个参数 θ {{\theta }} θ,它的范数是小的。因此,这看起来不像是一个好的参数向量 θ {{\theta }} θ的选择。
为什么参数向量θ事实上是和决策边界是90度正交的? 对任意一个线性分割样本的决策边界,看成是一个Logistic Regression。在逻辑回归中,假设已经拟合出参数θ(θ是一个向量),那么求解θTx=0这个方程就可以得到决策边界。 Logistic Regression中输出函数为Sigmoid函数,临界点为z=0。 θ T ⋅ x = 0 \theta^{T} \cdot x = 0 θT⋅x=0,故正交。(决策边界是由 x ( i ) 组 成 的 x^{(i)}组成的 x(i)组成的)
我们可以通过改造支持向量机来构造复杂的非线性分类器,这需要用到核函数。
如果我们要对以下非线性模型进行分类:
根据上图可以用f1,f2…来表示相应的多项式,那是否会有用f1,f2…表示对更好的选择?
设定几个坐标 l ( i ) l^{(i)} l(i)landmark;用f 值表示我们用来描述给定初始特征变量 x 与我们所给定的坐标 l (landmarks) 的接近程度:
f i = s i m i l a r i t y ( x , l ( i ) ) = k ( x , l ( i ) ) = e x p ( − ∣ ∣ x − l ( i ) ∣ ∣ 2 2 σ 2 ) = e x p ( − ∑ j = 1 n ( x j − l j ( i ) ) 2 2 σ 2 ) f_{i} = similarity(x,l^{(i)}) = k(x,l^{(i)}) = exp(-\frac{||x - l^{(i)}||^{2}}{2\sigma^2}) = exp(-\frac{\sum_{j = 1}^{n} (x_j - l_j^{(i)})^2}{2\sigma^2}) fi=similarity(x,l(i))=k(x,l(i))=exp(−2σ2∣∣x−l(i)∣∣2)=exp(−2σ2∑j=1n(xj−lj(i))2)
其中 s i m i l a r i t y ( x , l ( i ) ) = k ( x , l ( i ) ) similarity(x,l^{(i)}) = k(x,l^{(i)}) similarity(x,l(i))=k(x,l(i))称为核函数,本例中使用的核函数为高斯核函数
如果 x ≈ l ( i ) x \approx l^{(i)} x≈l(i):
f i ≈ e x p ( − 0 2 2 σ 2 ) ≈ 1 f_{i} \approx exp(-\frac{0^{2}}{2\sigma^2}) \approx 1 fi≈exp(−2σ202)≈1
如果x is far from l ( i ) l^{(i)} l(i):
f i ≈ e x p ( − ( l a r g e n u m b e r ) 2 2 σ 2 ) ≈ 0 f_{i} \approx exp(-\frac{(large \ number)^{2}}{2\sigma^2}) \approx 0 fi≈exp(−2σ2(large number)2)≈0
σ \sigma σ 的值对于核函数的影响:
由上图我们可以看出, σ \sigma σ值越大,特征变量值 f 随着 x 与 l l l距离的变化越缓慢;反之则反。
由核函数根据输入的初始特征变量 x 和我们选择的标记点 l 计算的到的假设函数 h θ ( f ) h_\theta(f) hθ(f) 的每一个特征变量 f,带入假设函数 h θ ( f ) h_\theta(f) hθ(f)并预测输入样本属于哪一类
SVM将每一个训练样本 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)),令标记 l ( i ) = x ( i ) l^{(i)}=x^{(i)} l(i)=x(i),对于每一个输入 x x x,计算 f 1 , f 2 , . . . , f m f_1,f_2,...,f_m f1,f2,...,fm ,令 f 0 = 1 f_0=1 f0=1,生成新的特征向量 f ∈ R m + 1 f\in\R^{m+1} f∈Rm+1
核函数的想法理论上可以用于其他的算法,但由于总总原因,核函数在其他算法无法很好推广,比如核函数结合逻辑回归会变得很慢
我们在使用SVM时不要自己手写函数,而是要调用现成的包,虽然不用具体实现SVM的细节,但我们还是要自己选择合适的参数C和核函数
在使用高斯核函数之前一定要进行特征缩放,否则可能数值大的那个特征影响大
除了高斯核函数之外也有其他的核函数,如多项式核函数(polynomial kernel)、字符串核函数(string kernel,输入是字符)…
已知特征数量 n( x ∈ R n + 1 x \in \R^{n+1} x∈Rn+1,包含x0),训练样本数量 m:
逻辑回归和线性核函数往往做着相似的事情,得到相似的结果。
符号:
K : 表示我们要分类的种类个数;
c ( i ) c^{(i)} c(i) : 当前样本 x ( i ) x^{(i)} x(i)所属的簇的索引或者序号;
μ k \mu_k μk: 表示当前第 k 个聚类的中心位置 k ∈ { 1 , 2 , . . . , K } k\in\{1,2,...,K\} k∈{1,2,...,K};
μ c ( i ) \mu_{c^{(i)}} μc(i) : 当前样本 x ( i ) x^{(i)} x(i)所属的簇的索引代表的聚类的中心位置。
算法输入:
思路详解:
假设我们打算将输入样本分为两个类,即 K=2。K-Means 算法在刚开始随机生成两个坐标点,这两个坐标点代表两个类。
接下来进入迭代过程:
J ( c ( 1 ) , . . . , c ( m ) , μ 1 , . . . , μ K ) = 1 m ∑ i = 1 m ∣ ∣ x ( i ) − μ c ( i ) ∣ ∣ 2 J(c^{(1)},...,c{(m)},\mu_{1},...,\mu_{K}) = \frac{1}{m} \sum_{i = 1}^{m} ||x^{(i)} - \mu_{c}^{(i)}|| ^{2} J(c(1),...,c(m),μ1,...,μK)=m1i=1∑m∣∣x(i)−μc(i)∣∣2
m i n c ( 1 ) . . . , c ( m ) , μ 1 , . . . , μ K J ( c ( 1 ) , . . . , c ( m ) , μ 1 , . . . , μ K ) \mathop{min} \limits_{c^{(1)}...,c{(m)},\mu_{1},...,\mu_{K}} J(c^{(1)},...,c{(m)},\mu_{1},...,\mu_{K}) c(1)...,c(m),μ1,...,μKminJ(c(1),...,c(m),μ1,...,μK)
此代价函数也被称为失真代价函数 或者 K均值算法的失真。
KM算法分为两步,第一步相当于 m i n i m i z e J ( . . . ) w r t c ( 1 ) , . . . , c ( m ) ( h o l d i n g μ 1 , . . . , μ K f i x e d ) \mathop{minimize}\ J(...) \ wrt \ c^{(1)},...,c{(m)}(holding\ \mu_{1},...,\mu_{K}\ fixed) minimize J(...) wrt c(1),...,c(m)(holding μ1,...,μK fixed),第二步相当于 m i n i m i z e J ( . . . ) w r t μ 1 , . . . , μ K \mathop{minimize} \ J(...) \ wrt \ \mu_{1},...,\mu_{K} minimize J(...) wrt μ1,...,μK
在随机初始化中我们一般随机选取K个样本点直接作为初始聚簇中心点。
为什么要进行随机初始化:
一眼看上去图中的样本点可以分为两个聚簇,如果随机采用样本中的两个点作为聚簇中心点,很有可能将两个聚簇中心点同时设定在同一个聚簇中,这样就会使算法陷入局部最优。解决这个问题的办法是进行多次随机初始化,找到学习结果最好的初始化聚簇中心点,如下:
如果聚类的个数比较少(2 - 10),那么多次随机初始化往往会给出一个很好的分类结果;如果要找的聚类数量很多,多次随机初始化不会有很大的改善,第一次可能就会给出一个好的结果
大多数时候聚类数量 K还是通过我们自己观察手动选取,但吴恩达老师在这里介绍了肘部法则。
作出代价函数 J 随着聚簇数量的变化的曲线,然后选取函数的畸变点(导数变化最大的点,如左图,因很像一个肘部而得名),这个点就是我们想要的聚簇分类数量最合理的点。
但大多数时候“肘部函数”会像右图那样看不出肘部在哪里,这时肘部法则的缺陷。
还有一种方法是根据其后面的表现来选择KM的聚类数:
如果一个数据集有多个特征,且多个特征之间存在某种相关性,这样我们可以把这些具有相关性的特征通过降低维度来进行数据的压缩,以达到减少特征冗余的目的。这样既可以减少存储空间大小,也可以提高算法的速度。
如果一个数据集包含50个特征,那么它的特征是五十维的,我们很难绘制五十维的图像来表示该数据集中的每一个样本。但如果我们把这个数据集的50个特征压缩为2个特征,那么我们可以在二维图像上清晰地看到每个样本点的分布,这样有助于我们分析问题。
PCA算法试图找到一个低维的平面对数据进行投影,以便最小化每个样本点与投影后的对应点之间距离的平方。在使用PCA之前,要先进行均值归一化和特征规范化,使所有的特征均值为0
左图为线性回归,右图为PCA。虽然两种算法表面上看上去都是对样本点进行拟合。但仔细研究上图就会发现,线性回归算法根据样本点所对应的y值拟合直线;而PCA算法根据样本点同拟合直线的距离拟合直线,且PCA中的变量是平等的。
假设我们要将数据从n维降到k维,我们首先要计算协方差(covariance matrix):
Σ = 1 m ∑ i = 1 n ( x ( i ) ) ( x ( i ) ) T , Σ 是 一 个 协 方 差 矩 阵 \Sigma = \frac{1}{m} \sum_{i=1}^{n}(x^{(i)})(x^{(i)})^{T},\Sigma是一个协方差矩阵 Σ=m1i=1∑n(x(i))(x(i))T,Σ是一个协方差矩阵
上 面 的 公 式 也 可 写 成 S i g m a = 1 m ∗ ( X T X ) 上面的公式也可写成Sigma = \frac{1}{m} * (X^{T}X) 上面的公式也可写成Sigma=m1∗(XTX)
计算矩阵 Σ \Sigma Σ的特征向量,使用的octave公式如下(svd称为奇异值分解):
[ U , S , V ] = s v d ( S i g m a ) , S i g m a 是 一 个 n × n 矩 阵 ( n ∗ 1 ∗ 1 ∗ n ) [U,S,V] = svd(Sigma),Sigma是一个n \times n矩阵(n*1*1*n) [U,S,V]=svd(Sigma),Sigma是一个n×n矩阵(n∗1∗1∗n)
我们获得矩阵U(只需要U,不需要S和V):
U = ( ∣ ∣ ∣ u ( 1 ) u ( 2 ) . . . u ( n ) ∣ ∣ ∣ ) ∈ R n × n U = \begin{pmatrix} | & | & & | \\ u^{(1)} & u^{(2)} & ... &u^{(n)} \\ | & | & & | \end{pmatrix} \in\R^{n \times n} U=⎝⎛∣u(1)∣∣u(2)∣...∣u(n)∣⎠⎞∈Rn×n
取矩阵U的前k列,将 x ∈ R n ⟶ z ∈ R k x \in \R^{n} \longrightarrow z \in \R^{k} x∈Rn⟶z∈Rk:
z ( i ) = ( ∣ ∣ ∣ u ( 1 ) u ( 2 ) . . . u ( k ) ∣ ∣ ∣ ) T x ( i ) , z ( i ) ∈ R k × 1 , 前 面 的 矩 阵 也 写 成 U r e d u c e z^{(i)} = \begin{pmatrix} | & | & & | \\ u^{(1)} & u^{(2)} & ... &u^{(k)} \\ | & | & & | \end{pmatrix}^{T} x^{(i)},z^{(i)} \in \R^{k \times1},前面的矩阵也写成U_{reduce} z(i)=⎝⎛∣u(1)∣∣u(2)∣...∣u(k)∣⎠⎞Tx(i),z(i)∈Rk×1,前面的矩阵也写成Ureduce
概念一:PCA算法的平均投影误差平方:
1 m ∑ i = 1 m ∣ ∣ x ( i ) − x a p p r o x ( i ) ∣ ∣ 2 , x a p p r o x ( i ) = U r e d u c e z ( i ) ( n ∗ k ∗ k ∗ 1 ) \frac{1}{m} \sum_{i=1}^{m}||x^{(i)} - x_{approx}^{(i)}||^{2},x^{(i)}_{approx} = U_{reduce}z^{(i)}(n*k*k*1) m1i=1∑m∣∣x(i)−xapprox(i)∣∣2,xapprox(i)=Ureducez(i)(n∗k∗k∗1)
概念二:样本数据总方差(所有样本与原点距离的平方):
1 m ∑ i = 1 m ∣ ∣ x ( i ) ∣ ∣ 2 \frac{1}{m} \sum_{i=1}^{m}||x^{(i)}||^{2} m1i=1∑m∣∣x(i)∣∣2
一般来说,我们会从1开始,尝试选择最小的 k 值使得上述两个概念比值小于等于 0.01(99%的方差性会被保留):
1 m ∑ i = 1 m ∣ ∣ x ( i ) − x a p p r o x ( i ) ∣ ∣ 2 1 m ∑ i = 1 m ∣ ∣ x ( i ) ∣ ∣ 2 ≤ 0.01 \frac{\frac{1}{m} \sum_{i=1}^{m}||x^{(i)} - x_{approx}^{(i)}||^{2}}{\frac{1}{m} \sum_{i=1}^{m}||x^{(i)}||^{2}} \le0.01 m1∑i=1m∣∣x(i)∣∣2m1∑i=1m∣∣x(i)−xapprox(i)∣∣2≤0.01
可以通过 x a p p r o x ( i ) = U r e d u c e z ( i ) x^{(i)}_{approx} = U_{reduce}z^{(i)} xapprox(i)=Ureducez(i)来重新获得原数据(与 x ( i ) x^{(i)} x(i)还是有差距但基本差不多)
监督学习中有时候输入样本的特征很多,我们也要想办法把它们减低维度,具体步骤如下:
注意:降维映射Mapping x ( i ) → z ( i ) x^{(i)} \rightarrow z^{(i)} x(i)→z(i) 只能是在训练集中通过PCA算法运行得到,不能在交叉验证集或者测试集中一起通过PCA算法得到。在训练集中通过PCA算法得到的映射可以用于后期检验泛化程度时交叉训练集或者测试集的降维。
特征数量太多是导致过拟合的一种原因。即使有时候使用PCA算法看起来可以解决过拟合的问题,但是吴恩达老师不建议这么做,最好的方式还是使用正则化,原因是:**PCA算法对于监督学习样本特征的降维是忽略掉了标签y,我们只是使用输入的 x ( i ) x^{(i)} x(i)让算法去寻找低维数据来近似。正因如此,PCA算法会舍弃掉一些有价值的信息。**如果使用正则化来防止过拟合的话,至少会得到与PCA相同的好结果。
在设计一个机器学习系统时,与其一上来就使用PCA进行降维,倒不如先使用原数据先跑一下,如果原数据跑得慢/占了太多内存,才考虑使用PCA来加快速度。
异常检测问题主要用在无监督学习。
异常检测问题可以这么理解:给定一些初始的样本,将它们称为一个类C。对于一个输入的新样本,通过算法判断该新样本是否属于类C,如果不属于,则判断该新样本存在异常(也可以这么理解:通过初始的样本训练得到一个阈值,如果新样本超出这个阈值,这判断该样本为异常样本)。
异常检测问题应用的场景是:飞机引擎的异常检测、购物网站行为不寻常用户检测、数据中心监控哪台计算机出现异常。
如果一个实数x的概率符合高斯分布(标准差为 σ \sigma σ ,均值为 μ \mu μ ,方差为 σ 2 \sigma^2 σ2,我们把它记作 x ≈ N ( μ , σ 2 ) x\approx N(\mu,\sigma^2) x≈N(μ,σ2)
高斯分布中 μ \mu μ控制曲线的中心位置, σ \sigma σ控制曲线的宽度( σ \sigma σ越大,曲线越矮,反之瘦高)
对于给定的数据集,假设通过观察我们认为这些数据集的分布大致符合高斯分布。那么我们可以计算该数据集所对应的高斯分布的参数:
μ = 1 m ∑ i = 1 m x ( i ) \mu = \frac{1}{m} \sum^{m}_{i = 1}x^{(i)} μ=m1i=1∑mx(i)
σ 2 = 1 m ∑ i = 1 m ( x ( i ) − μ ) 2 \sigma^{2} = \frac{1}{m}\sum^{m}_{i = 1}(x^{(i)} - \mu)^2 σ2=m1i=1∑m(x(i)−μ)2
对于训练集{ x ( 1 ) , . . . , x ( m ) {x^{(1)},...,x^{(m)}} x(1),...,x(m)},训练集中的每个样本 x ( i ) ∈ R n x^{(i)} \in \R^{n} x(i)∈Rn。我们假设训练样本的每一个特征值xi都符合某种正态分布,则有:
p ( x ) = Π j = 1 n p ( x j ; μ j , σ j 2 ) p(x) = \Pi^{n} _{j = 1}p(x_{j};\mu_{j},\sigma_{j}^{2}) p(x)=Πj=1np(xj;μj,σj2)
得到异常算法的一般步骤:
对于异常检测算法,我们要有一个评估算法好坏的标准,最好是可以通过一个实数评价指标告诉我们算法的好坏。
我们在对异常检测算法进行评估时,需要用到带标签的数据,将训练后的模型对这些带标签数据的标签预测值和带标签数据的真实标签做对比,就可以帮助我们评估一个算法的好坏。
在交叉验证集合和测试集中可以包含适当的异常样本,即y = 1的样本
步骤如下:
将训练集中的样本用高斯分布拟合,并训练出模型 p ( x ) = p ( x 1 ; μ 1 , σ 1 2 ) ⋅ ⋅ ⋅ p ( x n ; μ n , σ n 2 ) p(x) = p(x_{1};\mu_{1},\sigma_{1}^{2})···p(x_{n};\mu_{n},\sigma_{n}^{2}) p(x)=p(x1;μ1,σ12)⋅⋅⋅p(xn;μn,σn2),得到 μ 1 , σ 1 2 , . . . , μ n , σ n 2 \mu_{1},\sigma_{1}^{2},...,\mu_{n},\sigma_{n}^{2} μ1,σ1