机器学习【自用】

1.机器学习的一些概念

1.1 监督学习

给算法一个数据集,其中包含了正确答案,算法的目的是给出更多的正确答案

(1)回归问题:预测连续的数值输出

  • 用直线拟合

  • 用二次函数或二阶多项式拟合(效果更佳)

(2)分类问题:预测离散值输出,例如判断肿瘤是良性还是恶性

  • 只有一个特征时

  • 有两个特征时

  • 算法最终的目的是解决无穷多个特征的数据集

1.2 无监督学习

只给算法一个数据集,但是不给数据集的正确答案,由算法自行分类。

不知道数据具体的含义,比如给定一些数据但不知道它们具体的信息,对于分类问题无监督学习可以得到多个不同的聚类,从而实现预测的功能。

  • 聚类算法

  1. 谷歌新闻每天收集几十万条新闻,并按主题分好类

  1. 市场通过对用户进行分类,确定目标用户

  1. 鸡尾酒算法:两个麦克风分别离两个人不同距离,录制两段录音,将两个人的声音分离开来(只需一行代码就可实现,但实现的过程要花大量的时间)

2.线性回归

线性回归:拟合一条线,将训练数据尽可能分布到线上。另外还有多变量的线性回归称为多元线性回归。

2.1 代价函数cost function

一般使用最小均方差来评估参数的好坏。

目标: 最小化代价函数,即minimize J(θ0, θ1)

代价函数也被称为平方误差函数或者平方误差代价函数,在线性回归问题中,平方误差函数是最常用的手段

只考虑一个参数 θ1:

为方便分析,先取θ0为0,并改变θ1的值,得到多组J(θ0),并作出下右图:

横坐标是参数θ1,纵坐标是代价函数J(θ1)。

从图中可以得到,当θ1=1时,代价函数J(θ1)为最小值=0,此时假设函数的曲线完全贴合训练集的数据。

得到的minimize J(θ0)就是线性回归的目标函数

θ0和θ1都考虑,得到的三维图如下:

将三维图平面化,等高线的中心对应最小代价函数:

2.2梯度下降

如何实现找到代价函数最小值?使用梯度下降算法(Gradient descent algorithm)

算法思路

  • 指定θ0 和 θ1的初始值

  • 不断改变θ0和θ1的值,使J(θ0,θ1)不断减小

  • 得到一个最小值或局部最小值时停止

梯度下降,首先为每个参数赋一个初值,通过代价函数的梯度,然后不断地调整参数,最终得到一个局部最优解。初值的不同可能会得到两个不同的结果,即梯度下降不一定得到全局最优解。

梯度: 函数中某一点(x, y)的梯度代表函数在该点变化最快的方向(选用不同的点开始可能达到另一个局部最小值)

梯度下降公式

  • 其中 α 为学习速率( learning rate )

  • θ0和θ1应同步更新,否则如果先更新θ0,会使得θ1是根据更新后的θ0去更新的,与正确结果不相符

梯度下降在具体的执行时,每一次更新需要同时更新所有的参数

关于α

如果α选择太小,会导致每次移动的步幅都很小,最终需要很多步才能最终收敛

如果α选择太大,会导致每次移动的步幅过大,可能会越过最小值,无法收敛甚至会发散

偏导数

用来计算当前参数对应代价函数的斜率,导数为正则θ减小,导数为负则θ增大,通过这样的方式可以使整体向θ=0收敛。

  • 偏导表示的是斜率,斜率在最低点左边为负,最低点右边为正。θj减去一个负数则向右移动,减去一个正数则向左移动

  • 在移动过程中,偏导值会不断变小,进而移动的步幅也不断变小,最后不断收敛直到到达最低点

  • 在最低点处偏导值为0,不再移动

  • 当θ处于局部最优解时,θ的值将不再更新,因为偏导为0

  • 这也说明了如果学习率α不改变,参数也可能收敛,假设偏导>0,因为偏导一直在向在减小,所以每次的步长也会慢慢减小,所以α不需要额外的减小。

2.3梯度回归的局限性

公式推导:

j = 0时表示对θ0求偏导;j = 1时表示对θ1求偏导。x(i)的 i 表示第 i 个样本:

进而更新得到:

梯度回归的局限性: 可能得到的是局部最优解

2.4线性回归的梯度下降

线性回归的梯度下降的函数是凸函数,因此没有局部最优解,只有全局最优解

凸函数

2.5多元梯度下降

通常问题都会涉及到多个变量,例如房屋价格预测就包括,面积、房间个数、楼层、价格等

因此代价函数就不再只包含一个变量,为了统一可以对常量引入变量x0=1

虽然参数的个数增多,但是对每个参数求偏导时和单个参数类似

2.6 Batch梯度下降

Batch梯度下降:每一步梯度下降,都需要遍历整个训练集样本

3.矩阵和向量

4.多变量线性回归

特征缩放

当特征范围相差太大时,会一直来回振荡,梯度下降效率低

多个变量的度量不同,数字之间相差的大小也不同,如果可以将所有的特征变量缩放到大致相同范围,这样会减少梯度算法的迭代。

特征缩放不一定非要落到[-1,1]之间,只要数据足够接近就可以。

特征和多项式回归

正则方程(正规方程)

作用: 求解某些线性回归的参数θ

代价函数:

推导过程如下:利用线性代数的方法直接求解θ

正规方程同梯度下降比较

  1. 是同级算法

  1. 梯度下降缺点是需确定α,需要许多次迭代;优点是适用于样本量大(m > 10000)的数据

  1. 正规方程缺点是不适用于样本量大(m > 10000)的数据,但无需确定α,无需许多次迭代

5.逻辑回归(LR)

LR:Logistic Regression

5.1线性回归对于分类问题的局限性

由于离群点的存在,线性回归不适用于分类问题。

如下图(阈值为0.5),由于最右离群点,再用线性回归与实际情况不拟合。

逻辑回归用于解决分类的问题,如果使用线性回归可能会造成很大的误差;假如样本的标签值为0、1,线性回归输出值是连续的存在>1和<0的情况,不符合实际。

如果对于一个均匀的数据,使用线性回归,选取0.5作为分界线,可能会得到一个比较准确的模型,但是如果数据不太均匀就会存在很大的误差。

5.2逻辑回归logistic regression假设陈述

logistic regression的假设函数值总是在0到1之间

logistic regression模型

线性回归中 hθ(x) = θTx。作一下修改,变成下图形式:

logistic函数

回归问题的常规步骤:

  1. 寻找h函数(即hypothesis);

  1. 构造J函数(损失函数);

  1. 想办法使得J函数最小并求得回归参数(θ)

5.3激活函数

激活函数的y值分布在[0,1]内,对于分类问题,我们可以使用激活函数的值来表示满足特征的概率。

5.4决策边界

决策边界不是训练集的属性,而是假设本身及其参数的属性

简单来说就是一个分类问题划分依据,可以是一条直线,在这条直线的上方就是y=1,下方就是y=0

决策边界是假设函数的一个属性,取决于函数的参数,而不是数据集。

假设以x=0,y=0.5作为判断的界限,当θTx>=0.5,预测y=1;θTx<0.5,预测y=0

假设有一个训练集:

用一种方法或者假设,得到参数θ0 = -3,θ1 = 1,θ2 = 1

预测 y = 1 if -3 + x1 + x2 ≥ 0,即x1 + x2 ≥ 3

则有下图,中间的洋红色直线即为 决策边界(即x1 + x2 = 3)

线性边界

对于线性边界的情况,边界形式如下:

构造预测函数为:

函数hθ(x)的值有特殊的含义,它表示结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分别为:

5.5代价函数(cost function)

逻辑回归一般使用对数函数作为代价函数:

首先对于分类函数来说,他的输出值范围为[0,1],得到的对数图像如下:

当评估模型参数对y=1(恶性肿瘤)进行预测的好坏时,如果实际为恶性,预测值也为1(恶性),此时的代价为0;如果实际为恶性,预测为0(良性),此时的代价为+∞,这时代价函数就很好的评估了参数θ的表现。

同样对于y=0(良性肿瘤)的代价函数为:

y的取值只有0、1,可以将上面两个函数合成一个,评估当前参数的J(θ)为:

Cost函数和J函数如下,它们是基于最大似然估计推导得到的

5.6梯度下降

在确定代价函数之后的任务是,如何最小化代价函数,因为代价函数是凸的,所以可以使用梯度下降求解。

5.7 多元分类:一对多

多元分类: 结果有多种可能

如下例,有三种可能结果。将它们两两作为一组,得到:

对每个特征单独训练,在做预测的时候,取三个分类器结果最大的。

最后需要输入一个x,选择h最大的类别,也即在三个分类器中选择可信度最高,效果最好的

6.过拟合

6.1 过拟合

定义

对于线性回归或逻辑回归的损失函数构成的模型,可能会有些权重很大,有些权重很小,导致过拟合(就是过分拟合了训练数据),使得模型的复杂度提高,泛化能力较差(对未知数据的预测能力)。

存在多个特征,但是数据很少,或者模型函数不合理,都会出现过拟合的现象。过拟合可能对样本数能够很好的解释,但是无法正确的预测新数据。

泛化:指一个假设模型应用到新样本的能力

当变量过多时,训练出来的假设能很好地拟合训练集,所以代价函数实际上可能非常接近于0,但得到的曲线为了千方百计的拟合数据集,导致它无法泛化到新的样本中,无法预测新样本数据。

下左欠拟合,存在高偏差

下中拟合适中

下右过拟合,存在高方差

问题的主因

过拟合问题往往源自过多的特征。

解决方法

  • 减少特征数量
        人工选择要保留的特征
        模型选择算法(后续讲到)

缺点:舍弃一部分特征变量也舍弃了关于问题的一些信息

  • 正则化(特征较多时比较有效)
    减少特征量级或参数θj的大小

正则化

正则化处理过拟合问题:

在代价函数中加入正则项,通过λ来平衡拟合程度和参数的大小,θ越大越容易出现过拟合的现象。

  • 如果有很多参数,我们不清楚哪个参数是高阶项,即不知道惩罚哪个能获得更好拟合的结果,因此引入正则化项统一惩罚参数以得到较为简单的函数

  • 统一惩罚能得到简单结果是因为,高阶项受到惩罚的效果会更强,反映在图像上就是使其影响变弱

其中

+ 后的一项为正则化项,

λ 为正则化参数,作用是控制两个不同目标之间的取舍

(1)第一个目标与第一项有关,即我们想要更加拟合数据集

(2)第二个目标与第二项有关,即我们想要参数θj尽量小

惩罚从θ1到θn,不包括θ0(之所以不惩罚θ0是为了让拟合的函数尽量简单,极端情况就是hθ(x) = θ0,代表的一条水平线,不过实操中有无θ0影响不大)

若 λ 设置的过大,即对θ1θ2θ3θ4的惩罚程度过大,导致θ1θ2θ3θ4都接近于0,最后假设模型只剩一个θ0,出现欠拟合情况

7.模型评估

训练、测试集

将数据集分为训练集和测试集,训练集得到参数θ,然后使用测试集的数据对参数θ进行评估,即计算误差。

训练、验证、测试集

首先用训练集得到一个最优的参数θ,然后用测试集进行评估误差。通过这样的方式可以在众多模型中选择一个理想的模型。

但是这样做并不能评估模型的泛化能力,通过测试集评估选择的模型,可能刚好适合测试集的数据,并不能说明它对其他数据的预测能力,这时就引入了验证集。

这样在选择模型的时候,可以先使用训练集得到每个模型的θ,然后使用验证集评估得到误差最小的模型,最后使用测试集评估他的泛化能力

偏差、方差

当多项式次数增大时,训练集的误差慢慢减小,因为多项式次数越高,图像拟合的就越准确。但是验证集不同,它的趋势是先减少后增大,这分别对应着欠拟合和过拟合。

根据误差的不同表现来区分偏差和方差:

高偏差:训练误差和验证误差都很大。

高方差:训练误差小,验证误差大。

正则化

通过引入来平衡多形式的权重。

当λ太大,参数θ≈≈0,模型近似直线,即欠拟合。当λ太小,就会出现过拟合。

学习曲线

随着数据量的增加,Jtrain(θ)的误差慢慢增大,因为数据越少,模型越容易拟合;Jcv(θ)慢慢减少,因为数据越多,模型越精准,所以误差减小。

高偏差的模型的学习曲线:

因为参数很少,数据很多,所以随着数据的增多高偏差的模型的训练误差Jtrain(θ)和测试误差Jcv(θ)很接近。这时选择增加数据就不是很好的选择了,可以尝试增加数据的特征。

高方差的模型的学习曲线:

高方差的特点是训练误差和验证误差之间有很大的差距,这时可以选择增加数据,随着图像右移可以看出训练误差和验证误差会慢慢接近。

查准率、召回率

偏斜类:一个类中的样本数比另一个类多得多。

例如对癌症的预测,相对于样本数据真实得癌症的人非常少,大概只有0.5%的概率

对于偏斜类的问题,如何评估模型的精准度?

引入查准率和召回率,对于稀有的样本有:

通常如果阈值设置的比较高,那么对应的查准率高、召回率低;相反如果阈值设置的低,那么查准率低、召回率高。

F1score:比较权衡不同的算法

F1score,即调和平均数(倒数的平均数)来衡量。 F1score会比较照顾数值小的一方,如果PR都为0,F1score=0;如果PR都为1,F1score=1

8.神经网络

当特征值很多,且含有很多个多次多项式时,用之前的算法就很难解决了。

机器学习中的神经网络一般包括三部分,输入层,隐藏层,输出层。

数据从输入层开始,通过激活函数前向传播到第一隐藏层,经过多个隐藏层,最后到达输出层,神经网络表示复杂的逻辑关系,主要是对隐藏层的构造。

逻辑运算

XNOR

AND

引入x0,值为1。对权重 / 参数进行赋值,-30、+20、+20

x1 = 0,x2 = 0,hθ(x)结果为0

同理得到另外三组结果

总结果与 x1 AND x2 一致

OR

NOT

XNOR

多元分类

通过构建神经网络,每种输出就对应一个分类器。

定义一个神经网络

x0,a0为偏置单元,默认值为1

Layer1是输入层,Layer3是输出层,Layer2的工作过程看不到故为隐藏层

ai[j]是第 j 层第 i 个神经元的激活值(即由一个具体神经元计算并输出的值)

θ[j]是权重矩阵,控制从第 j 层到第 j + 1层的映射

进而得到 a[2] 和 hθ[x] 的计算公式

模型展示

二元分类

多类别分类

K表示输出层的单元数目,L为神经网络的层数。输出结果h(x)是一个K维向量

代价函数

在逻辑回归中,我们有如下代价函数

演化到神经网络中,得到如下代价函数

其中:

两个连加类似for循环。这里相当于求k等于从1到4的每一个逻辑回归算法的代价函数,然后按四次输出的顺序,依次把这些代价函数加起来

其中

这一项表对所有θji(l)求和。1 到 L-1是因为映射是两两之间的

前向传播

反向传播

为了最小化 J(Θ),需要求偏导

即先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层(第一层是输入变量,不存在误差)

梯度检测

在实现反向传播算法时,如何确保梯度计算正确呢?即:验证复杂模型内部是否运行正常

在数学上可以使用拉格朗日中值定理来近似的表示曲线上某一点的导数,梯度检测正是使用的这种思想。

用 Numerical gradient checking方法来验证梯度是否在下降。

对于下面这个J(θ)图,取θ点左右各一点(θ+ε),(θ-ε),则点θ的导数(梯度)近似等于(J(θ+ε)-J(θ-ε))/(2ε)。

梯度检测的使用,可以对每个参数单独进行验证。

因此,针对每个θ,其导数都可以近似为:

假设通过中值定理得到的梯度为approx_grad,经过反向传播得到的梯度为grad,如果满足以下等式,则说明反向传播得到的梯度精度还行。

将这个近似值,与back-propagation算法中每一步得到的J(θ)的导数D(derivative)进行比较。如果这两个结果相近,则code正确,否则错误。上面描述的算法如下:

步骤:

在 back propagation 中计算出J(θ)对θ的导数D,并向量化成Dvec(unroll D(1),D(2),D(3))

用 numerical gradient check 方法计算梯度近似值 gradApprox

确保这两个值很接近

(这一点非常重要)只在测试的时候进行校验。真正使用 back propagation 进行神经网络学习的时候,要停止校验,否则会非常慢

随机初始化

逻辑回归,我们将参数θ全部初始化为0

而在对神经网络进行训练时,θ的取值要随机取值,如果都赋值为0,就会使得每一层的输出值、误差相同,从而存在大量冗余。

通常初始参数为正负 ε 之间的随机值

训练神经网络

  1. 参数的随机初始化

  1. 利用正向传播方法计算所有的 ℎ𝜃(𝑥)

  1. 编写计算代价函数 𝐽 的代码

  1. 利用反向传播方法计算所有偏导数

  1. 利用数值检验方法这些偏导

  1. 使用优化算法来最小代价函数

9.支持向量机:SVM

9.1 复习逻辑回归

预测结果:

代价函数:

9.2支持向量机则是用折线来代替

逻辑回归模型的图像是一个曲线或复杂的曲线,SVM使用简单函数来近似这个曲线。

故对比两者可得到对应的优化目标:

  • 除去了1/𝑚 这一项,1/𝑚 仅是个常量,对于最小值的求取无影响

  • 除去了正则化参数 𝜆 ,引入了C,可以把这里的参数𝐶 考虑成1/ 𝜆,例如𝐶 × 𝐴 + 𝐵因此,在逻辑回归中,如果给定𝜆,一个非常大的值,意味着给予 B 更大的权重。而这里,就对应于将𝐶 设定为非常小的值,那么相应的将会给𝐵比给𝐴更大的权重。因此,这只是一种不同的方式来控制这种权衡或者一种不同的方法,即用参数来决定是更关心第一项还是第二项的优化。

9.3代价函数

支持向量机在逻辑回归的基础上简化了代价函数,逻辑回归使用正则项来权衡θ的大小,以此解决过拟合的问题。SVM也是类似,它是在代价函数上添加系数C,效果等价。

将逻辑回归看做是A+λB,那么支持向量机就是CA+B

1、将逻辑回归中A和B的系数m去掉,这并不影响取函数最小值时的θ值的大小

2、将逻辑回归的A中两部分写成cost1和cost0,其中1表示标签y取1时的函数,0表示标签y取0,其中他们的函数图像如下,横坐标是z=θTX,可以看出,y=1时,当z>=1时,才会有cost值为0,y=0时,当z<=-1时,才会有cost值为0,但是非严格来讲,我们说z>=0或者z<=0即可

3、将逻辑回归中的B的系数λ去掉,同时在A前加上系数C。SVM的目标优化函数就如图所示

4、支持向量机输出的并不是一个概率值,而是根据优化得到的θ,与输入x进行相乘,根据sigmoid函数,值大于0则输出1,否则输出0。

9.4最大边界

机器学习的目的:不是或者说不只是为了区分现有的两类数据, 我们真正想要达到的目的是: 当模型在现有数据训练完成后, 将其应用到新的(同种)数据时,我们仍然可以很好的区分两类数据,达到预期的分类效果。说得专业一点,即 泛化(generalization) 能力.

当有了泛化要求后, 自然地考虑到, 在这无数条可区他两类数据的线中,并不是都合适的, 而且有理由相信,从泛化的角度讲,肯定存在一条线是这无数条线中泛化能力最好。SVM 要找的就是这条线!

模型的泛化能力可以用与数据间的距离来量化。距离越远,泛化能力越强, 距离最大的,泛化能力也是最强的。因此要找到泛化能力最强的,等价于找到与数据距离最大的超平面

存在一条直线把正负样本分开。当然有多条不同的直线,可以把正样本和负样本完全分开。

但是决策边界有好有坏,支持向量机将会选择这个黑色的决策边界,相较于之前用粉色或者绿色画的决策界。这条黑色的看起来好得多,黑线看起来是更稳健的决策界。在分离正样本和负样本上它显得的更好。数学上来讲,这条黑线有更大的距离,这个距离叫做间距(margin)。当画出这两条额外的蓝线,我们看到黑色的决策界和训练样本之间有更大的最短距离。然而粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差。因此,这个距离叫做支持向量机的间距,而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本。因此支持向量机有时被称为大间距分类器(大间隔分类器)

将这个大间距分类器中的正则化因子常数𝐶设置为非常大,从而最大间距地分离开正样本和负样本。

在让代价函数最小化的过程中,我们希望找出在𝑦 = 1和𝑦 = 0两种情况下都使得代价函数中左边的这一项尽量为零的参数。如果我们找到了这样的参数,则我们的最小化问题便转变成:

最小化代价函数,就是让左侧代价函数的和尽可能等于0,即对应θTx,另外还有右侧的θ2^2的和最小,即向量的模尽可能小。

分类问题的界限有多种可能,SVM对于如下二分类的问题,往往会得到黑色的那条分界线,这条线恰好对应着最大的边界,因此也叫做最大边界分类问题。

9.5证明

9.6 核函数(Kernel)

对于一个非线性决策边界问题,我们可能使用高阶的函数进行拟合,但是是否存在比当前特征刚好的表达形式呢?

核函数

对于支持向量机来说,它的优化函数中,并不是θTXi,而是θTFi,其中F就是核函数,它是一种特征函数,代表样本Xi与标记点landmark之间的相似程度。其中,核函数可以是高斯等函数,对于SVM来说,标记点就是输入的每一个样本点

9.7非线性的决策边界问题,理解核函数和标记点

下面介绍一下非线性的决策边界问题,来更好的理解核函数和标记点,如下图所示

对于上图的分类问题,两种分类方法:

法1:定义一个非常复杂的多项式特征的集合,这种方法有一个很大的问题是我们并不清楚需要最高多少阶的特征,这样就会存在很大的问题如右边的方框公式所示

法2:定义新的特征向量f1,f2,f3…,来取代θ的系数,它们的个数取决于得到的标记点的个数

在SVM中,可以利用核函数来计算出新的特征

使用符号f来表示非线性决策边界

手动选取一些点,将其称为l(1)、l(2)、l(3)

随机选择三个点作为标记,通过核函数可以得到x对应的新特征

如上图所示,我们定义了3个标记点,特征函数就有3个,代表了训练样本点与各个标记点之间的相似程度

将每种特征表示为fi,将fi定义为一种相似度的度量,即训练样本x和 标记(i)之间的相似度

使用高斯核函数来做相似度分析

Kernel(核函数,也称高斯核函数)如下:

使用高斯函数的特点:

如果相似度很高,即对应的欧几里得距离≈0对应fi=1,相反如果相似度低对应fi≈0

当训练样本x 与l(i)非常接近时,相似度很高,f1≈1;

当训练样本x与l(i)距离非常远时,相似度低,f1≈0。

假设我们已经训练好参数θ,那么就可以通过θTf≥0来进行预测,即对应红色的决策边界。

从上图右式可以得出,对于某些部分的点,它的函数值大于0,而其他部分点的函数值是小于0的,从而完成了这种非线性的分类问题。

可以直接将训练集中的x(i)作为核函数中的l(i)

这样对于训练中的数据x(i),都可以得到对应的f(i)

SVM在使用核函数的时候,对应代价函数就可以替换为:

9.8偏差和方差

和SVM中的参数C一样,核函数的σ2决定了拟合的程度

9.9 SVM的使用

在使用SVM进行训练时,我们需要提前确定好参数C和核函数的选择。

如上图所示,如果不需要核函数(也叫线性核函数),那么就直接使用输入数据X来作为参数θ的系数它适用于特征数量n很大,但数据量m很小的情况

对于高斯核函数,它适用于特征数量很小,数据量很大的情况,不过需要提前确定好参数δ的值

其他核函数:多项式核函数,字符串核函数等。但是它们的使用非常少

9.10 SVM解决多分类问题

如果有k类,则定义k个特征函数

10.K均值:聚类

10.1 定义

对于没有标签的数据:

首先根据划分聚类的个数随机设置聚类中心的位置,然后遍历所有的数据,把每个数据分配到离它最近的坐标,对于同一个簇的数据计算它们坐标的中心位置,并设置为新的聚类中心,以此不断的迭代

1、首先需要定义需要分类的类别数k,并随机定义k个聚类中心点

2、根据距离的远近将数据分为k类

3、根据每一类中数据的均值来改变中心点的位置,进入步骤2

10.2 k均值的目标优化函数

k均值的目标函数是所有点到它所属聚类中心的距离和

如上图所示,其中c(i)表示第i个样本点所处的类的索引,1~k

μk表示第k个聚类中心的位置坐标

那么k均值的目标优化函数就如上图最后一个方框所示,等式右边表示所有样本点距自己类中心点的距离的平方和目标是使得它最小

10.3 随机初始化

当聚类数量很少时,如果初始化的位置不够好,会得到一个局部最优解,解决方案是多次随机初始化,从而得到一个全局最优解。

10.4 聚类数量的选择

k均值类别数目k的确定方法:最常用观察法

得到聚类数量和代价的图像,根据肘部原则选取(一般不用);

肘部法则:

对类别数目进行遍历,并将每个的cost function记录,如果能够得到类似于左图的图像,显然k=3为最好的结果,但通常情况下,更多的是得到右边的图像,我们就不能得到一个确切的结果。

第二种方法是根据题目或者市场等要求,通过提问,我们分类的目的是什么等问题,来对k进行赋值

即:根据k均值聚类的目的来做判断,比如做衣服尺寸的聚类分析,根据市场需求,3个聚类or5个聚类更适合市场营销等等。

11.主成分分析(PCA):降维

11.1 定义

降维是我们学习的第二种无监督学习方法

主成分分析(PCA):Principal Component Analysis

是一种数据压缩的算法,他将数据压缩到k维度,并使得所有数据投影到新维度的距离最小

PCA实现降维的方法:通过找一条直线,一个平面,或者其他维度的空间来对数据进行投影,使得投影的距离和最小

11.2 PCA和线性回归的关系

PCA不是线性回归,一个是投影距离,一个是点与直线上点的距离

左图,线性回归是原始值和预测值之间的距离最小,从图中反映就是他们的竖直距离最短,而PCA是样本数据点到低维空间的投影距离(即垂直距离)最短。

11.3 PCA算法步骤

首先对数据进行均值归一化,然后计算协方差,最后得到一个k维的矩阵

算法:

1、对所有数据进行标准化处理

2、计算协方差矩阵,然后计算它的特征向量矩阵

3、确定最小的维度k值,通过保留方差的99%或者95%来选择

4、取特征向量的前k列作为低维空间,将输入数据与该特征矩阵相乘,得到m*k的矩阵z

不建议使用PCA的方法来防止过拟合,通常就可以使用逻辑回归中的正则化来预防,而不是pca。

原因是PCA是无监督的学习算法,他在运行时会忽略掉标签y的一些信息,即使你保留了99%的方差,仍然会丢失,而回归就不一样,当使用正则化时,所有的标签信息仍然被考虑了进去。

例如,当原始特征数量是10000,样本数据量是1000时,在经过降维后,特征数量变为了1000。如果使用原始数据,由于样本数据量比特征数量少,因此就可能出现过拟合的现象,在经过降维后,这样的情况确实得到了缓和,但是这是bad。

一般在设计模型时,不要一开始就是用pca算法。 我们一般先直接使用原始数据来作为模型的输入,只有在这样做到不到目的的情况下,再考虑使用pca。

12.异常检测

12.1 高斯分布

利用高斯进行异常检测的步骤:

1、选择特征变量xi

2、计算每一个特征的μ和σ2

3、根据新给出的样本x,计算p(x),即高斯概率,如果p(x)<epsilon

计算m个数据集在每一个维度上的μ和σ2,然后根据p(x)得到一个概率ϵ,根据概率的大小来定义是否为异常行为。

12.2 多变量高斯分布

多变量高斯分布引入了协方差矩阵,通过修改矩阵的值来改变高斯分布的情况。

12.3 异常检测和监督学习的区别

异常检测中,它的数据其实是倾斜数据,即正负样本数差距很大,将数据划分为训练集,交叉验证集和测试集,其中训练集只包含绝大部分的负样本,而不包含正样本,这样可以通过训练集来训练出高斯函数的所有参数μ和δ,正样本被分在了验证集和训练集中。同时由于是倾斜数据,因此不能用预测的准确率来进行模型的评估,而需要利用precision和recall,以及F1-score值来进行评估。

对于异常检测来说,它的数据集中的正样本数量(即y=1)只占很小的比例,而负样本(y=0)的数据量很大,如果利用监督学习算法的话,则不能在这些很少的正样本数据中学到有效的知识。

监督学习算法中,在合理范围内,会有大量的正负样本。

选择需要使用的函数:

在进行异常检测前,我们需要选择使用哪种检测算法**,最常用的选择方法就是画出输入数据的直方图** ,例如,如果我们需要使用高斯来进行异常检验,那么我们的数据就得符合高斯分布。虽然对于不符合高斯分布的数据来说,如果不将它转换为高斯分布的话,我们依然可以使用高斯算法来进行检验,但是它的运行的结果并不好。

其中进行转换的方法有很多,像将数据对数话,开方,开三次方,等等

13.推荐系统(recommender system)

13.1 内容推荐算法

以电影为例,基于内容的推荐系统就是我们已知了每部电影的特征向量,通过训练用户对每部电影的评价分数,来预测是否推荐一部电影给用户

例如一个电影推荐系统,一共有n个用户,m个电影,每部电影都有一定的特征,例如爱情片的比例、动作片的比例。n个用户对看过的电影进行评分,推荐系统做的给用户推荐新电影,预测用户对新电影的评分?

可以使用线性回归的方法进行训练,得到用户对于特征的参数θ,之后就可以根据θTX对电影进行打分。

优化目标函数为:

13.2 协同过滤(collaborative filtering)

collaborative filtering,用于特征学习,自己学习得到数据的特征值

我们无法得到每部电影中不同特征的比例,例如电影中爱情和动作的比例?除非人工审核每一部电影,但是太耗时。

这里有一个思路,首先用户根据自己的喜好对特征打分,通过计算可以大致确定已经打过分的电影它的特征值,根据已经确定的特征值,又可以计算出每个用户对这部电影的评分。

根据特征向量x可以通过线性回归得到用户的θ向量,通过用户提供的θ向量可以估计每部电影的特征数值。这就有点像鸡和蛋的问题。

我们可以随机选取θ向量计算得到特征数值,然后再通过线性回归去更新θ,这样不停地迭代直到最后收敛

我们也可以将两种函数合并为一个目标函数:

13.3 低秩矩阵分解

可以把n个用户对m部电影的评分结果表示为m×n的矩阵:

这个矩阵可以表示为XθT:

通过特征值之间的偏差,我们可以找到类型相近的电影:

13.4 均值规范化

之前无论是参数θ还是特征X,都基于每个用户都对多个电影进行的评分,每部电影也被多个用户评分。对于新用户,他可能还没有对任何一部电影进行评分,一种思路就是把所有用户对每部电影的评分的均值作为新用户的初始评分。

14.大规模机器学习(学习大数据集)

14.1 模型是否科学有效

如果需要训练的数据集很大,那么不可能直接将所有的数据集用于模型的训练,因为我们还不清楚自己的模型是否是科学有效的,因此,可以先通过学习曲线来进行确定,即通过减小数据集的大小,然后逐步增加,观察该模型是否适用于大数据集,如下图所示。

14.2 随机梯度下降(SGD)

Stochastic gradient descent

当我们使用大数据集进行训练时,利用批梯度下降算法(即一次迭代需要训练所有的训练数据),它的计算量将会非常大。因此需要使用随机梯度下降,它的训练速度要快得多。

梯度下降算法是在每次更新参数的时候,需要计算所有数据。随机梯度下降算法对每个数据分开处理,对一个数据更新所有的参数。对比下来SGD的速度要快一些,不过收敛性可能没GD好。

计算步骤如下:

1、将所有m个数据进行随机排序

2、针对每一个样本进行迭代,在计算梯度,即偏导数时,不是通过计算所有样本的误差实现参数更新,而是只计算该样本的误差,然后实现对所有n个特征参数的更新,这样就可以使得所有参数在求得一个误差后就更新一次,加快了更新速度,如下图

随机梯度下降是通过计算每个样本的误差来对参数进行更新,从右边等高图中粉色折线可得,每次经过更新后的误差并不能保证都在向最小值的方向前进,但是总体上是这样的

14.3 如何判断SGD的收敛?

首先定义cost函数,然后每隔1000次迭代画出cost的图像,根据均值来判断。

如果噪声太多图像上下震荡,可以选择更多的迭代次数。

如果随着迭代次数cost增加,那么选择更小的α。

验证模型的梯度是否在下降中:

我们的方法是绘制出cost function随迭代次数变化的曲线图。在批梯度下降算法中,一次迭代需要训练所有的数据,所以绘制它的曲线图的时间成本太大。而在随机梯度下降中,我们每训练一个样本就会对所有的参数进行更新,从而可以很容易的绘制出曲线图,但是并不是更新一次就绘制一个点,而是通过设置一个值,如1000,即每1000次迭代就计算一次平均cost值,绘制出曲线,从而观察是否梯度在下降。

如上图,从第一幅图中可以得出,对于较大的学习率α,他绘制出来的曲线震荡程度比较大,而将α调小,算法的学习变慢,代价函数下降也变慢了,这样就会收敛到一个更好的结果

从第二幅图中可得出,如果每1000个样本计算一次cost值,那么绘制出来的曲线图可能会有较大的震荡,但是总体上是在下降的,而如果每5000次计算一次cost值,它绘制出来的曲线就显得更平滑一些。

从第三幅图中可以看出,如果对于1000来说,它的曲线图震荡幅度比较大,而且总体并不显示有下降趋势,我们可以尝试增加到2000,3000这样,可能曲线图就会有下降趋势,但也不是绝对的,如果该值增加到一定程度,可能仍然显示水平。

从第四幅图中可以看出,随着迭代次数的上升,它的cost值反而在增大,那么很显然梯度是发散的,这是就需要使用更小的学习率α。

SGD一般不能得到全局最优,他会一直在最优值附近徘徊。

学习率的大小一般保持不变,一个思路是可以动态的改变学习率α的大小来提高准确度,比如随着迭代次数的增加慢慢减小α的值。

如上图所示,当我们使用一个固定的学习率α进行训练时,在最后,我们得到的结果并不是一个最优值,而是附近的一个震荡值,如果我们想要它更好的收敛,可以在收敛的过程中逐渐减小α的值,公式如上图的方框所示,结果如下图所示:

可以看出,随着α的逐渐减小,cost值的震荡幅度也变得越来越小

通常不管将α减小与否,都是适用的。而如果选择要将α逐渐减小,那么从公式可得,它就多了两个参数需要确定,这可能是影响效率的一点。

14.4 Mini-batch梯度下降

Mini-Batch gradient descent

我们使用Mini-batch梯度下降而不是用随机梯度下降的最主要原因是它可以进行向量化运算,从而使得运行效率更快更高。如下图所示

将数据分为多份,对每一份执行GD,相当于GD和SGD的综合。b可以取[10,100]。

14.5 Map-reduce

Map-reduce and data parallelism。

Map-reduce利用了线性回归求和运算的特性,将GD对整个数据的求和处理,分摊到多个服务器上执行,最后各个服务器把结果汇总到一起进行合并。

逻辑回归也可以这样搞:

15.应用实例:图片文字识别(OCR)

15.1 光学文字识别

Optical Character Recognition

问题描述和流程图

有三个主要特点:包括了多种机器学习的重要知识、涉及机器学习流水线、融合了计算机视觉CV和人工数据合成

OCR流水线:

  • 文字区域检测

  • 字符分割

  • 字符辨认

15.2 滑动窗口

OCR流水线工作原理:滑动窗口:sliding windows

问题:如何在图片中检测到文字?

人像识别

矩形框;

正负样本,分类,监督学习;

1、选中图片左上角矩形框;

2、传入分类器,检测y0 or y1,返回;

3、矩形框右移(事先设定的步长),重复判断;

4、移到最右边后下移,重复;

5、移到末尾后,第二遍,增大窗口,重复;

OCR识别

正负样本训练;

一小块一小块的检测;

放大算子:把白色区域扩大;

忽略奇怪的矩形(比如瘦高的,交叉的);

字符切割;训练分类器;

OCR流水线文字识别:

15.3 获取数据

问题:如何获得大量数据?

人工合成数据的两种方式:

  • 从零生成;

  • 已有小部分训练集,通过某种方式扩展;

法1:从0生成

灰度图像;

利用字体库;

将字母换个字体形式然后贴到别的背景中;

这基本从零开始生产;

法2:一个样本扩展成多个样本 下载字体,然后将它们放到一个随机背景图片上

对图像进行人工扭曲

对语音文本加入不同的背景干扰。

首先确保算法已经有很低的偏差,整体的模型ok,然后在考虑加数据,否则只是徒劳。

失真合成数据,保证失真是合理的;

然后考虑加数据的人工和时间成本。

首先要确保分类器偏差较低,才大量合成人工数据;

最好画个学习曲线,便于观察分析;

15.4 上限分析

对多个模块进行分析,让其中一个模块达到100%的准确率,然后判断它能提高整个系统多少准确率。

OCR文本识别

比如这里的OCR文本识别:

刚刚设计出系统,72%的准确率,我们开始采用控制变量法对各个模块逐个分析;

首先文本检测模块,对每个文本区域都设立正确的文本检测结果(仿真出100%正确检测图片中的文本信息),此时第一个模块正确率将达到100%,这时候我们再测试整体的正确率,为89%;

以同样的方式处理第二个模块:

准确率提高到90%;

继续处理第三个模块:

这样我们就能知道各个模块的提升空间有多大,针对性地改善;

这里明显第一个模块:文本检测模块最有潜力改善,所以我们应花费更多的精力在第1、3两个模块

人脸识别

例如这个人脸识别:

不要花费大量时间去做一些没有意义的事情;

把时间都用在最有价值的事情上;

上限分析的必要性;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值