P20
特征缩放:减少梯度下降迭代次数,提高速度
(多特征梯度下降时都要用特征缩放)
P23
正规方程法的矩阵求解过程:
https://www.bilibili.com/video/BV19T4y1d768?spm_id_from=333.337.search-card.all.click
将多元线性回归方程
H(W)= x0w0+x1w1+……xnwn(x0=1,共n+1个特征)
转换成矩阵求解的形式:
H(W)= X · W
想要预测值等于结果值
H(W)= X · W = Y
求W即要在左侧待入X的逆消去X,方阵才可逆,由于不知道X是否可逆,先将其转换成方阵
X^T · X · W =X^T · Y
即
W = (X^T · X)^-1 · X^T · Y
(线性回归模型:
假设函数:hΘ(x)=Θx+b
参数:Θ
代价函数:
优化目标:min代价函数
实现优化目标的方法:梯度下降/正规方程(适用于一元线性回归))
P24
X^T · X不可逆的原因:
①特征线性相关(解决方法:删除多余特征)
②特征过多(解决方法:删除多余特征)
P33
sigmoid函数也叫Logistic函数,用于隐层神经元输出,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。
P34
逻辑回归阈值通常为为0.5
逻辑回归模型:
假设函数:hΘ(x)=P(y=1|x;θ)
参数:Θ
对于某个样本x,它对应的假设函数的输出值为hθ(x),该值表示样本x被判别为类为1的概率。
hθ(x)=P(y=1|x;θ)}的意义:
在给定的样本x和参数向量θ的情况下,样本x被判断为类1的概率;那么,在给定的样本x和参数向量θ的情况下,输入样本x被判断为类0的概率为hθ(x)=P(y=0|x;θ):
这条线是“决策边界”,决策边界以及预测的y=1和y=0的区域是假设函数的属性,取决于参数而非数据集的属性;
上图中例子假设拟好了θ的参数为-3,1,1
通过在特征中增加复杂的多项式(高阶多项式特征),可以得到更复杂的决定边界;
上图中添加两个额外的特征,例子假设拟好了θ的参数为-1,0,0,1,1
P35
m个训练集样本,每个样本n+1个特征向量
对于该训练集,如何选择/拟合参数θ?
单样本代价函数==损失函数:对于实际值是y,但是学习算法给出的预测值是H,那我就需要让这个算法付出代价。
(PS:代价函数是针对整个样本数据集,损失函数是针对单个样本)
hθ(x)是非线性函数,将其代入线性回归模型的代价函数,J(θ)图像是非凸函数,为了保证凸函数,重新采用一个新的代价函数。
为了去掉指数化(sigmoid函数)带来的影响,log可以把指数变为线性。-log(x)在(0,1)内单调递减,不存在局部最小值,合理的用梯度下降一定能收敛到全局最小值。
当hθ(x)=0,例如,即一个病人肿瘤恶性的概率未0,但是如果该肿瘤为恶行,则说明预测是错误的,此时需要用很大的代价来惩罚该算法,因此Cost趋近于∞。
P36
logistic回归的代价函数
可以简化为:(使用极大似然法——统计学中为不同模型快速寻找参数的方法,对数损失函数也叫极大似然损失函数)
J(theta):Cost Function(代价函数);h(x): Hypothesis; y: 为实际值;为了让h(x)与y拟合,需要通过代价函数求theta,实现这个过程的算法叫梯度下降算法。
(推导过程:https://blog.csdn.net/_/article/details/
此处α后漏掉了“1/m”:m是训练集的数据量,不能跟学习率混到一起,不然之后训练集一变,学习率也要变)
logistic回归模型中的梯度下降算法形式上和线性回归模型一致,但是hθ(x)假设的含义不同
P38
logistic回归算法解决多类别分类问题
训练逻辑回归分类器:hθ^i(x) 预测i类别y=i的概率。
每个分类器都针对一种情况(训练某种情况即视作y=1时,其余情况视为整体即视作y=0)进行训练。
在图示的例子中,训练好三个分类器后。最后为了做出预测,给出一个新的输入值x,期望获得预测,在这三个分类器运行输入x,然后选择h最大的类别。
即x输入3个分类器,全部进行判别,选最大。
P39
https://blog.csdn.net/_/article/details/
正则化:减少过拟合问题
变量过多的时候可能会出现过拟合问题,这时候训练出的假设能够很好地拟合训练集,但是代价函数接近于0,它千方百计地拟合训练集(图3),导致它无法泛化(泛化:一个假设模型应用到新样本的能力)到新的样本中,无法预测新样本。(在不重要的特征下,相似结果的样本在该维度下差异会很大,故方差会很大。)
解决过拟合问题:
① 减少选取变量的数量
② 正则化:将保留所有的特征变量。但减少量级或者参数θj的大小
P40
比如我们要使下面的函数二次项的权重增大:
我们要减小θ3x3和θ4x4的影响。实际上,如果不排除这些特性或改变我们假设的形式,我们可以修改我们的成本函数:
我们已经对最后的θ3和θ4增加了额外的成本。现在,为了使成本函数尽量的接近0,我们将不得不减少θ3和θ4值使他们接近零。
这将大大地减少θ3x3和θ4x4再成本函数中的开销。
因此,我们看到,新的假设(由粉红色曲线的描绘)看起来像一个二次函数拟合数据,但是拟合的更好因为额外减少了θ3x3和θ4x4的值。
直接去掉就相当于减少特征了,加入惩罚项是弱化特征对拟合模型的影响。
形式上保留,实际上减少了特征变量
把所有θ规范成一个式子:
λ,是正则化参数。它决定了我们θ参数的成本是多少。
对成本函数使用一个额外的开销总和,可以光滑我们的假设函数来降低过拟合。
如果λ的选择太大,可以光滑函数造成欠拟合。
因此,如果λ= 0或太小,就会发生过拟合
一般从θ1开始计算,θ0影响不大,是常数项,不是特征值的系数,忽略偏移项!!!。
惩罚程度太大的话就相当于舍弃了这个特征变量,所以惩罚程度需要调整好。λ过大,容易欠拟合;λ过小,容易过拟合。
我觉得可以这样理解:当增加变量时,J(theta)的前半部分减小,但是由于增加了项,所以J(theta)的后半部分增大,所以当lamda取值合适时,为了实现J(theta)最小。
P41
对于正则化线性回归,惩罚对象是θ1到θn,没有θ0,忽略偏移项!!!。
对正则化代价函数J(θ)用梯度下降法进行最小化。
通常学习率α很小,m却很大,1-α(λ/m)通常是一个比1略小的数,因此更新结果θj变小了一些。
正规方程法:
额外加入一个(n+1)(n+1)矩阵。
P42
正则化逻辑回归
代价函数添加正则化项。
对于正则化逻辑回归,惩罚对象是θ1到θn,没有θ0,忽略偏移项!!!。
—————————————————————-
8-1.非线性假设 P43 - 00:07
P43
在处理具有大量特征的分类问题时,逻辑回归容易过拟合,也存在运算量过大的问题。
对于典型的计算机视觉表示方法,如果存储的是每个像素点的灰度值,那么每个元素的值是0~ 255。50*50图像,灰度值=2500,RGB=7500。
8-3.模型展示Ⅰ P45 - 04:13
(单个神经元)
额外的节点 x0 称作偏置单元或偏置神经元。
通常,x0=1。
在神经网络术语中,激活函数是指代非线性函数g(z),即sigmoid(logistic)函数。
θ,可称作模型的参数,也可以称作模型的权重,同义。
(神经网络 = 一组神经元连接在一起的集合,
偏置单元a0是第二层的x0换了一个符号而已)
Layer1:输入层,在一层输入特征x1,x2,x3;
Layer2:隐藏层;
Layer3:输出层,这一层的神经元输出假设的最终计算结果;
8-3.模型展示Ⅰ P45 - 07:58
(向前传播算法)
ai(j):代表第j层第i个神经元或单元的激活项;
激活项:由一个具体神经元计算并输出的值;
θ(j):权重矩阵,控制从某一层(比如第一层到第二层)的映射;
theta上标表示第i层的特征矩阵,下标表示矩阵中行和列的表示,表示矩阵中的元素,连线理解成θ;
如果一个网络的第j层有sj个单元,在j+1层有s(j+1)个单元,那么矩阵θ(j)是控制第j层到第j+1层映射的矩阵,维度是s_(j+1) × (s_j+1)。
eg:第一层有3个,第二层有3个,θ(1)是3×4矩阵
8-4.模型展示Ⅱ P46 - 00:02
神经网络计算向量化
(向前传播算法的向量化实现方法)
θ(1)是3X4, x是4X1,直接乘,满足矩阵运算法则,结果z(2)是3×1。(带偏置神经元x0)
θ(2)是1X4, a(2)是4X1,直接乘,满足矩阵运算法则,结果hθ(x)=z(3)是1×1。(带偏置神经元a0)
神经网络的向前传播(类似逻辑回归的套娃,多层逻辑回归,上层逻辑回归的结果被下层逻辑回归当做特征):将上一次逻辑回归的输出作为本次逻辑回归的输入。
所以这本质上是一个特征工程。
从原始数据X挖掘出一层比一层有用的特征A1, A2, … (通过原始特征计算出更好的特征作为训练模型用)最后使用逻辑回归拟合得出预测。
神经网络更像是提炼了更精准特征的逻辑回归,但本质还是逻辑回归堆叠而成。
8-5.例子与直觉理解Ⅰ P47 - 01:23
神经网络是如何计算负责非线性函数输入的?
神经网络为何能够学习复杂的非线性假设模型?
当x,y两个值恰好其中一个等于1时,这个式子为真,否则为假。(异或相同为0,相异为1;同或相同为1,相异为0)
对神经网络权重θ赋值,值都是老师选好的。
(上图例子代表:能够拟合AND运算的网络)
对神经网络权重/参数θ赋值(这些权重是根据你需要的输出(与运算)和激活函数决定的,神经网络的权值是通过对网络的训练得到的)
(上图例子代表:能够拟合OR运算的网络)
(上图例子代表:能够拟合OR运算的网络)
举的例子就是想说明通过对不同的神经元赋予不同的权重来让更好地拟合。
(上图例子代表:能够拟合XNOR运算的网络)
8-7.多元分类 P49 - 02:25
设定的训练集的表示方式如下所示:
运用神经网络解决多元分类问题,这里相对之前的模型,输出变成了多维(比如[1,0,0,0]代表属于pedestrain),同时y也变成了多维,与逻辑回归时代表标签值1或0不同。
”这是通过矩阵的方法去存储输出变量的值,如果是1111的话表示四个变量对应的值都为1,也就是输出属于4个类别了,这里只是判断4个类别中属于哪一个类别,个人理解,仅供参考。“
—————————————————————-
如何构建训练集?
如何让神经网络自动学习参数?
9-1.代价函数 P50 - 02:57
L代表神经网络结构的总层数;
s_l代表第l层的单元数,其中不包括偏差单元;
二元分类,y,hθ(x)即输出为实数0或1;
多元分类(features=K),y,hθ(x)即输出为K维变量,K≥3。
神经网络的代价函数:
h(x)_i表示第i个输出,h(x)是一个K维向量,选择输出神经网络输出向量中的第i个元素。
k从1到K的所有和:K个输出单元之和,求每一个逻辑回归算法的代价函数,然后按K次输出的顺序,依次把代价函数加起来。
y_k和h_k,是将第K个输出单元的值和y_k进行比较,y_k代表结果向量中第k个元素,h_k代表输出向量中第k个元素。
l 代表第l个权重矩阵;
i,j 分别代表权重矩阵的列,行;
(正则项中第三个是S(l+1),不是(Sl+1))
因为忽略掉偏置项,即所有θj0(l)。
(对于相邻两层之间的权重是从上往下依次相加,即先求一个节点对应的出去的线,比如s1=3,s2=2,第一层的每个节点应该出去两条线,一共六条,这里加的顺序即为(θ1,θ4),(θ2,θ5),(θ3,θ6),所以是ji不是ij,按照列而不是按照行)
9-2.反向传播算法 P51 - 00:10
实现把前向传播算法向量化,可以计算每一个神经元的激活值:
(此处默认a(1)添加了偏置项a0(1))
为了计算导数项,采用做反向传播的算法。
反向传播这个名称源于我们从输出层开始计算δ项,然后返回上一层计算隐藏层的δ项,继续往前计算,类似把输出层的误差反向传播给上一层,这就是反向传播。
δj(l):代表了第l层的第j个结点的误差。
”首先 δ 定义是a-y,相当于h(x)-y,也就是线性回归中的方差代价函数的偏导。“
第四层就是输出层了,它的误差就是计算的值与真实值值的差,没有激活函数求导。
sigmoid函数性质:g’(x)=g(x)(1-g(x)),
因此g′(z(3)) = a’(3) = a(3) ∗ (1 − a(3))
数学推导:引入δ是为了更好地方便求导
https://blog.csdn.net/_/article/details/?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3
https://blog.csdn.net/zfliu96/article/details/
在神经网络中的代价函数通过反向传播或者前向传播的方式来提高预测的准确率,然后在梯度下降的时候为了找到合适的速度以及方式,需要优化偏导项,也就是求偏导项的最小值。
x的上标i代表样本编号(1—m)
输出层a=1,不需要计算δ(1),因为不需要对输入层考虑误差项
完成对每一参数的求导。具体的等式为:
Δij(l)中的 l=2,3,…,L-1,因为L层没用偏导数
θ的上标l代表第几层的权重矩阵,下标i代表权重矩阵的行,j代表列。
9-3.理解反向传播 P52 - 00:48
反向传播的目的就是为了求解梯度下降法修正参数需要的梯度值(而且是比较快速且没有冗余,直接用链式法则算导数计算量大且有冗余计算步骤)
FP算法:
BP算法:
(输出只有一个单元,K=1,忽略正则化项,λ=0)
通过输出层的误差通过链式求导得到前置层的误差,然后更新权重值来减小误差。
9-5.梯度检测 P54 - 00:17
在计算梯度下降的时候,虽然代价函数越来越小,但是预测效果并不理想,这是其中有些小错误,我们需要修正。有一种方法就是梯度检验(gradient checking)。
这种方法很好地实现前向传播和后向传播。
我们熟知的导数是如何来的那?
导数定义为:一个定点和一个动点,形式如下[f(x+△x) - f(x)] / △x
对于线上的某一个点来说它的导数为对应的两点的y的差值除以x的差值。
(左侧为双侧差分:更准确,右侧为单侧差分)
上例θ是实数,考虑普遍情况即θ是向量参数,设θ是一个n维向量:
通过这些偏导让我们能够从数值上估算代价函数J所关于的任何的参数的偏导数。
而反向传播就是计算代价函数关于所有参数的导数或者偏导数的一种有效方法。
(梯度检测是近似算法,且很慢,直接用解析式是求精确值,且更快,所以不直接求偏导,而是采用反向传播法)
梯度确认或者说梯度检测的定义:
即通过比较数值微分和误差反向传播法的结果,可以确认误差反向传播法的实现是否正确。
9-6.随机初始化 P55 - 00:14
一种想法是我们将所有的初始值都设置为0,这在逻辑回归上是允许的,但在实际训练网络时是不被允许的。
因为这样会导致实际在训练网络时,所有的偏导数相同,而我们知道梯度下降实际上就是学习率乘以对应的导数。而学习率我们本身设置的是相同的。这样就会导致参数相同。
这样即使迭代多次最后也依旧是以相同的函数来计算。假使你的网络有很多层,但这样做的结果会使得每一层都以相同的函数来进行计算。这样最后这能得到一个特征训练出来的结果。(这也被成为对称权重问题)
为了避免这种现象,我们提出随机初始化的概念。
初始化就是将我们的参数设置为在一个区间内取随机的一个数。一般来说我们取得的数字都接近于0。我们称这个区间为
9-7.组合到一起 P56 - 00:01
小结一下使用神经网络时的步骤:
网络结构:第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元。第一层的单元数即我们训练集的特征数量。最后一层的单元数是我们训练集的结果的类的数量。如果隐藏层数大于 1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。我们真正要决定的是隐藏层的层数和每个中间层的单元数。
训练神经网络:
1. 参数的随机初始化
2. 利用正向传播方法计算所有的ℎθ(x)
3. 编写计算代价函数 J(θ)的代码
4. 利用反向传播方法计算所有偏导数
5. 利用数值检验方法(梯度检测)检验偏导数
6. 使用优化算法来最小化代价函数(得出θ)
梯度下降:从某个随机的初始点开始,不停地下降,反向传播计算出的是下降的方向,而梯度下降算法负责下降,一直到希望的点。
因为代价函数通常是非凸函数,所以时常收敛到一个局部最小值而非全局,但实际证明该值通常是很小的。
通俗了解神经网络如何避免陷入局部最优
https://blog.csdn.net/weixin_/article/details/
10-1.决定下一步做什么 P58 - 01:19
假设你已经训练出一个机器学习算法,但是效果不太好,那么有以下几种改进方法:
1、获得更多的训练数据
2、选用更少的特征
3、增加特征量
4、增加高次项
5、增大或减小正则化参数lambda的值
很多人只是随机选择上述方法的一种,既浪费时间又没有效果。所以接下来会介绍模型的评估及机器学习的诊断法。
如何选择合适的方法,而不是”意念调参“?
怎样评估机器学习算法的性能?
——机器学习诊断法
10-2.评估假设 P59 - 00:03
1、评估假设:通常用测试误差来近似模型的泛化误差。(https://blog.csdn.net/pxhdky/article/details/)
一个训练误差最小的假设有时并不是一个好的假设,可能过拟合;
而且当特征过多时,很难画出假设函数来观察。
有一种标准方法——留出法直接将数据集 D划分为两个互斥的部分,其中一部分作为训练集 S,另一部分用作测试集 T,通常训练集和测试集的比例为7:3。
(最好打乱顺序,随机选取训练集,测试集;
如果数据已经随机排列了,可以选择排列前70%和后30%作为训练集,测试集)
2、具体步骤:
那么我们训练模型的流程可以有如下两个部分:
(1)使用训练集来训练模型参数θ,(最小化代价函数Jtrain(Θ))
(2)①使用测试集来计算误差Jtest(Θ)
对于线性回归来说,误差:
②对于逻辑回归来说,误差:
还有另一种形式的测试度量——错误分类:
误判为1,因为准确预测了才把误差设置为0,求的是测试集的错误率。
10-3.模型选择和训练、验证、测试集 P60 - 05:31
https://blog.csdn.net/kieven2008/article/details/
这里应该讲的是,用训练集得出了多个多项式,用测试集选出了多项式,但是真正对多项式的测试还没有,此时使用验证集合进行多项式的泛化测试。
1、不使用验证集的模型选择:
一般的,是选择J最小的那个模型,但是这样只能使得模型对于测试集数据的误差较小,而对于其他数据的泛化效果并不好。因而这种方法并不能很好的验证误差。
2、使用验证集(Cross Validation Set)
为了解决泛用性问题,我们引入了第三个数据集,交叉验证集。
将其作为训练集和测试集之间的中间层来训练多项式次数d,然后用测试集进行测试,我们就能得到一个没有针对测试集“特殊优化”过的误差。比例为:训练集60%,交叉验证集20%,测试集20%。
分为训练集和测试集的时候,会拟合出一个选择多项式次数的d,作用是只能选出最合适的假设函数,却不能给出泛化能力的评价。
多一个验证集的时候,就避免了这种情况。
三类数据,最后在训练集上训练参数,在验证机集上选定假设函数即模型,在测试集上验证泛化误差。
10-4.诊断偏差与方差 P61 - 00:02
Error = Bias + Variance
误差(Error)反映的是整个模型的准确度;
偏差(Bias)反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度;
方差(Variance)反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。
偏差:描述的是预测值(估计值)的期望与真实值之间的差距。偏差越大,越偏离真实数据,如下图第二行所示。
方差:描述的是预测值的变化范围,离散程度,也就是离其期望值的距 。方差越大,数据的分布越分散(波动越大),如下图右列所示。
偏差大=欠拟合(经验风险),方差大=过拟合(结构风险)
横坐标是假设函数的最高次方
交叉验证误差后面会高是因为模型针对训练集拟合的特别好(过拟合现象),但这个模型对于验证集的数据来说就没有那么拟合了,所以后面的曲线误差会变大。
另一种思路:https://www.cnblogs.com/hutao722/p/9921788.html
上图为训练初始阶段,我们的模型(蓝线)对训练数据(红点)拟合度很差,是高偏差,但蓝线近似线性组合,其波动变化小,套用数学公式也可知数值较小,故为低方差,这个阶段也称之为欠拟合(underfitting),需要加大训练迭代数。
上图为训练的后期阶段,可明显看出模型的拟合度很好,是低偏差,但蓝线的波动性非常大,为高方差,这个阶段称之为过拟合(overfitting),问题很明显,蓝线模型很适合这套训练数据,但如果用测试数据来检验模型,就会发现泛化能力差,准确度下降。
上图这个蓝色模型可认为是“恰好”的一个模型,既能跟训练数据拟合,又离完美拟合保持一定距离,模型更具通用性,用测试数据验证会发现准确度也不错。
10-5.正则化和偏差、方差 P62 - 01:54
一般来说,加入合适的正则化项可以有效地避免过拟合(即高方差)
当正则化参数 λ较大时, θj≈0(除 θ0外),假设函数趋于直线,因而会造成高偏差的问题,导致欠拟合;
当正则化参数 λ 较小时,正则化项不起作用,模型会变得过拟合。如图:
横坐标是正则化项的参数λ大小
一般的,对于高偏差问题(欠拟合):
对于高方差问题(过拟合):
对于神经网络来说,参数越少,越有可能欠拟合;参数越多,网络结构越复杂,越有可能过拟合,应该加入正则化项。
10-6.学习曲线 P63 - 04:50
学习曲线:使用学习曲线可以有效的判断一个学习算法是否有偏差方差或者二者都有。
绘制出训练集和交叉验证集的平均误差平方和随着样本数量m变化而变化的曲线。(在假设函数确定的情况下)
上面线是验证集的误差,训练集很小,一次函数也可以拟合的很好,但是泛化能力肯定很差,误差大!
“高偏差:孺子不可教也 高方差: 孺子可教也”
结论:如果一个学习算法(即选择的某个假设函数,本例中为hθ(x) = θ0+θ1x)有高偏差,增加训练样本(表现为在m到达一定程度大小后,m小数量和m大数量的时候,拟合几乎一致,误差曲线趋于不变)对改善算法表现无益。
结论:如果一个学习算法(即选择的某个假设函数,本例中为hθ(x) = θ0+θ1x+..+θ_100x^100)有高方差,增加训练样本(表现为m小的时候容易过拟合,因此训练误差小,验证误差大;m大的时候拟合难度加大但是仍会小部分过拟合,因此训练误差会增加但是不会增加太多,验证误差减小但是不会减少太多;表现有训练误差曲线和验证误差曲线有很大一段差距)对改善算法有帮助。
[高方差] 采集更多的样本数据
[高方差] 减少特征数量,去除非主要的特征
[高偏差] 引入更多的相关特征
[高偏差] 采用多项式特征
[高偏差] 减小正则化参数 λ
[高方差] 增加正则化参数 λ
10-7.决定接下来做什么 P64 - 03:01
解决欠拟合很简单,增加features让模型捕捉更多的信息来学习。
欠拟合/高偏差:模型太简单,无法准确拟合训练数据;
高方差/过拟合:模型过于复杂,训练数据太少;
一般的,选择左侧较简单的神经网络,往往会出现欠拟合问题,计算量小;
选择右侧较大的神经网络结构,有时会出现过拟合问题,计算量大;
11-1.确定执行的优先级 P65 - 05:02
eg:垃圾邮件过滤器
建立词典——根据邮件样本中是否出现词典的词,建立特征向量,用以表示该样本
(图示用例中是布尔模型,只统计词是否出现;另有词袋模型,统计词的出现次数)
11-2.误差分析 P66 - 02:22
https://blog.csdn.net/shiyongraow/article/details/
进行一个机器学习的项目,首先应该进行一个快速的初步实现,画出学习曲线,来帮助之后的判断。
误差分析: 将算法预测错的样本提取出来分析共同特征,然后设计新的特征,是一种手动地去检查算法所出现的失误的过程。
设定误差度量值:设定某个实数来评估你的学习算法,并衡量它的表现。
有了算法的评估和误差度量值,有一件重要的事情要注意,就是使用一个合适的误差度量值。这有时会对于你的学习算法造成非常微妙的影响。即“偏斜类问题”。
11-3.不对称性分类的误差评估 P67 - 00:47
偏斜类问题:一个类中的样本数比另一个类的数据多很多。
以癌症分类问题为例:
1)、训练逻辑回归模型hθ(x)。(如果是癌症y=1,否则y=0)
2)、发现你在测试集上有1%的错误率。(99%的诊断是正确的)
3)、只有0.50%的病人患有癌症
我们训练逻辑回归模型,假设我们用测试集检验了这个分类模型,并且发现它只有1%的错误,因此我们99%会做出正确诊断。看起来是非常不错的结果,我们99%的情况都是正确的。
这种情况发生在正例和负例的比率非常接近于一个极端值,在这个例子中,正样本的数量与负样本的数量相比,非常非常少。因为y=1非常少,我们把这种情况叫做偏斜类。
一个类中的样本数与另一个类的数据相比多很多,通过总是预测y=0或者总是预测y=1算法可能表现非常好。因此使用分类误差或者分类精确度来作为评估度量可能会产生如下问题:
假如说你有一个算法,精确度是99.2%,因此它只有0.8%的误差。假设你对你的算法做出了一点改动,现在你得到了99.5%的精确度,只有0.5%的误差,这到底是不是算法的一个提升呢?
因此如果你有一个偏斜类,用分类精确度并不能很好地衡量算法,因为你可能会获得一个很高的精确度,非常低的错误率。但是我们并不知道我们是否真的提升了分类模型的质量,因为y=0并不是一个好的分类模型。但是y=0会将你的误差降低至0.5%。
当我们遇到这样一个偏斜类时,我们希望有一个不同的误差度量值,或者不同的评估度量值。其中一种评估度量值叫做查准率(precision)和召回率(recall)。
基于实际的类与预测的类:
1)TP:如果有一个样本它实际所属的类是1,预测的类也是1,那么我们把这个样本叫做真阳性(true positive)。
2)TN:如果我们的学习算法预测某个值是阴性(等于0),实际的类也确实属于0,那么我们把这个叫做真阴性(true negative)。
3)FP:如果我们的学习算法预测某个值等于1,但是实际上它等于0,这个叫做假阳性(false positive)。
4)FN:最后如果我们的学习算法预测某个值等于0,但是实际上它等于1,这个叫做假阴性(false negative)。
Precision(查准率): 预测为正,实际为正的概率。
Recall(召回率): 正例被准确预测的概率,也叫查全率,敏感性。
一个判断准不准,一个判断全不全;
实际占预测,预测占实际;
precision:预测为真的值中真正为真的值所占比例,recall:真正为真的值中有多少被预测出来了
总的来说,即使有一个非常偏斜的类,算法也不能够”欺骗”我们。我们能够更肯定的是:拥有高查准率或者高召回率的模型是一个好的分类模型。(precision和recall都高,说明正值和预测重合程度高,算法可信度也就越高。)这给予了我们一个更好的评估值,给予我们一种更直接的方法来评估模型的好与坏。
11-4.精确度和召回率的权衡 P68 - 01:25
1、如果我们想要比较确信为正例时才判定为正例,那么提高阈值,模型会对应高查准率,低召回率;
2、如果希望避免假阴性,那么降低阈值,模型会对应低查准率,高召回率;
临界值的选取
当你改变临界值的值时,你可以画出曲线来权衡查准率和召回率,如上图。
取一个较高的临界值,这个临界值可能等于0.99,我们假设 只在有大于99%的确信度的情况下,才预测y=1。至少,有99%的可能性。因此这个点反应高查准率低召回率。
取一个较低的临界值,比如说0.01,毫无疑问,在这里预测y=1,如果你这么做,你最后会得到低查准率高召回率的预测结果。
权衡不同算法的查准率和召回率(F值)
假设我们有三个不同的学习算法;或者这三个不同的学习曲线是同样的算法,但临界值不同。我们怎样决定哪一个算法是最好的?
如果用平均值来判定,明显算法3更高,但实际上算法3总是预测y=1这并不是一个好的模型。
所以我们采用F值(f-measure是一种统计量,F-Measure又称为F-Score,F-Measure是Precision和Recall加权调和平均,常用于评价分类模型的好坏。)来判定,上图给出F值计算公式,根据F值,我们更倾向于算法1,F值取值范围一般在0~1之间。
11-5.机器学习数据 P69 - 03:49
数据决定上限,模型只是逼近这个上限。
即使是不同的算法,从图中可以也看出趋势非常明显。首先大部分算法都具有相似的性能,其次随着训练数据集的增大,这些算法的准确性也都对应的增强了。
这些结果表明,许多不同的学习算法有时倾向于表现出非常相似的效果,虽然这些效果的表现还取决于一些细节,但是真正能提高算法性能(准确度)的,就是你能够给到一个算法的大量的训练数据。
什么情况下获取大量的数据是提高算法性能的好方法呢?
在特征值x包含足够多的用来准确预测y的信息时,获取大量的数据是提高算法性能的好方法。
对数据的要求:要包含足够多的特征,不然白搭;
对算法的要求:要包含足够的参数;
—————————————————————-
SVM
看这里!!!
https://zhuanlan.zhihu.com/p/
12-1.优化目标 P70 - 01:28
对逻辑回归的代价函数进行修改:
与逻辑回归相比,去掉1/m,这是一个常数不影响最小化J(θ)结果;将减号位置改变;相对于SVM而言,用另一个参数C来控制第一项(代价函数项)和第二项(正则化项),不用 λ;
因此,我们可以得到支持向量机的代价函数:
公式中的 C可以看做是 1/λ,说明支持向量机中更加偏重代价;
SVM假设函数:
逻辑回归输出的是一个概率值,而支持向量机做的是进行一个直接的预测:y=1 or 0,并不会输出概率值,直接输出结果。
12-2.直观上对大间隔的理解 P71 - 00:06
SVM又叫大间距分类器。
SVM不能恰好正确分类即可,因此θTx不能略大于或略小于0,而是提高值大于1或小于-1,这相当于构建了一个安全因子,一个安全间距。
(原来没有间隔的,现在间隔为2,故叫大间隔)
(这里θ已取得最优解,求最优解的过程没有讲)
因此我们可以得到支持向量机的决策边界(Decision Boundary):
margin:支持向量机的间距。
这使得SVM具有鲁棒性,因为它在分离数据时会尽量用最大的间距去分离。
C决定对噪声点的重视程度,而大大强化了近点的贡献(通过大的C值),使得cost对边界近点异常敏感,近点离边界越近,会大幅提高cost,所以svm就倾向于选择边界近点最远的。
C相当于1/λ,C过大,相当于过拟合;C过小,相当于欠拟合。
寻找**决策线问题—求解两类数据最大间隔问题
正负超平面
损失因子:硬间隔和软间隔
12-3.大间隔分类器的数学原理 P72 - 00:14
构造线性分类器
||u|| 代表向量的模长;
p 代表向量v在向量u上的投影的长度。
分别是向量内积的几何定义和代数定义。
(数量积是一个数量,乘出来是一个数,大小为两向量的模的乘积再乘以两向量夹角的余弦,没有方向。
向量积是一个向量,乘出来是一个向量,大小为两向量的模的乘积再乘以两向量夹角的正弦,方向与原来的两个向量垂直且构成右手系(例如a与b的向量积的方向为伸出右手,一手腕为原点,手臂于a平行,大拇指与b平行,而当其余四指向上立起时所指的方向为向量积的方向)(也可把a看成x轴,b看成y轴,向量积的方向和z轴方向相同))
优化目标函数理解为:法向量模的平方;
简化:n=2,θ0=0.
将约束条件理解为 :( 样本到超平面法向量上的投影) * (法向量的模);
一方面优化目标促使theta变小,而另一方面约束条件又约束内积不能小于一个常数,所以theta就被迫转向能够同时满足两个条件的方向!
边界方程为theta1x1+theta2x2=0,
其斜率为-theta/theta2;
-theta1/theta2 (绿线)
theta2/theta1 (蓝线)
很显然theta是决策边界的垂线,在同坐标下画出原点到点(theta1,theta2)的连线,是与边界线垂直的。
( 样本到超平面法向量上的投影) * (法向量的模)>=1 的情况下, 投影越大,则法向量模及目标函数可以越小。 因此可以转换为找到 “法向量/超平面” 使得样本在其上的投影最大。
12-4.核函数1 P73 - 00:18
SVM核方法讲解:——构造复杂的非线性分类器
https://www.bilibili.com/video/BV1UJ411U7Kc?spm_id_from=333.337.search-card.all.click
支持向量机通过某非线性变换 φ( x) ,将输入空间映射到高维特征空间。特征空间的维数可能非常高。
如果支持向量机的求解只用到内积运算,而在低维输入空间又存在某个函数 K(x, x′) ,它恰好等于在高维空间中这个内积,即K(x, x′)=<φ( x)⋅φ(x′) >
那么支持向量机就不用计算复杂的非线性变换,而由这个函数 K(x, x′) 直接得到非线性变换的内积,使大大简化了计算。
这样的函数 K(x, x′) 称为核函数。
维度转换:通过核技巧,不需要知道具体的维度转换函数,直接获得数据的高维度差异度,直接进行分类判断,避免了求解高维矩阵乘积。
设立新特征:
特征f1定义为一种相似度的度量,即训练样本x和第一个标记的相似度。
(选取三个标记点,然后用每一个样本的特征向量与这些标记做相识运算(核))
高斯核函数:
如果 x ≈ l(i):
如果 x is far from l(i):
每个标记定义一个新的特征(选择出新特征):
σ2对核函数的影响
可以看出,σ2越大,变化越缓慢;σ2越大,变化越剧烈。
12-5.核函数2 P74 - 01:59
将小红点看作山峰,几个靠近的山峰连起来就是山脉,山脉连起来就是高原,决策边界内的属于高原,边界外的属于平的,这样想就直观了。
如何选择标记 l(i) 呢?
SVM将每-个训练样本(x(i),y(i)), 令标记l(i)=x(i),对于每个输入x,计算f1,f2,…,fm. 令f0= 1,生成新的特征向量f∈R^(m+1)
>=1只是对于优化(代价)函数而言,这个>=0是对假设函数而言。
>=1是训练得到超平面的约束,但分类用的超平面,超平面上>=0,下<0。
>=1是训练时候的代价函数,构造最大间隔,预测时候就计算是否大于0。
使用SVM来构造复杂的非线性分类器、主要的技巧是核函数;为更好的获得判定边界,利用核函数计算新的特征。
核函数的作用是特征升维,确定决策边界。比如之前图里特征是2维时,一方数据被另一方包裹,线性不可分。升到更高维特征时,变的线性可分(超平面隔开双方)。
SVM参数对性能的影响:
12-6.使用SVM P75 - 07:34
逻辑回归和SVM比较
13-1.无监督学习 P76 - 03:06
首先,拿监督学习来进行比较,这是一个典型的监督学习的例子,有一个带标签的训练集,目标是找到一条能够区分正样本和负样本的决策边界。
如下图:
这里的监督学习问题是指有一系列标签,用假设函数去拟合它。
而相比于无监督学习中,数据并不带有任何标签,得到的数据如下图:
因此在无监督学习中,要将这系列无标签的数据输入到算法中,然后让算法找到一些隐含在数据中的结构,上图中能找到的结构就是两组分开的有紧密关系的子集或者是簇,而这些能找出这些子集或者是簇的算法被称为聚类算法。
13-2.K-Means算法 P77 - 00:24
假设有一个无标签数据集如下图所示:
现在想将其分为两个簇,使用K-Means算法来进行操作,操作步骤:
(1)首先随机生成两个点,这两点叫做聚类中心。K-Means算法是一个迭代算法,它会做两件事,第一个是簇分配,第二个是移动聚类中心。
(2)簇分配:K-Means算法中每次内循环的第一步要进行簇分配,也就是说,遍历每个样本点,根据每个样本与红色聚类中心更近还是蓝色中心更近来将每个样本点分配个两个聚类中心之一。具体的说,就是讲靠近蓝色聚类中心的点染成蓝色,靠近红色聚类中心的点染成红色。
(3)移动聚类中心:K-Means算法中每次内循环的第二步要移动聚类中心,要做是找到所有蓝点并计算出它们的均值,然后把蓝色聚类中心移到那里,红色聚类中心也是一样的操作。
(4)然后接着继续做簇分配和移动聚类中心,迭代多次之后,就会完成最终的两个点集的聚类,这就可以说K-Means算法已经聚合了。
下面用更规范的格式写出K-Means算法:
第一步: 随机初始化K个聚类中心, μ1,μ2,…,μk。
第二步:进行内循环
第一个是簇分配,算出样本与k个聚类中心的距离,看样本与哪个聚类中心更近,然后将每个数据点分配给k个聚类中心之一。
用数学公式表示为 min∣∣x(i)−μk∣∣² ,能够最小化这个式子的 k 值就是要赋值给 c(i) 的值,c(i) 表示的是当前样本所指的那个簇的索引或序号。
第二个是移动聚类中心,将k个聚类中心移动到其同簇点的均值处。
如果存在一个没有点的聚类中心,最常见的做法是直接移除这个聚类中心,但这样就变成了K-1个簇而不是K个,如果一定需要K个簇则可以重新随机初始化这个聚类中心。
13-3.优化目标 P78 - 01:56
一个是选择ci来最小化J,一个是移动聚类中心来最小化J。
均值来将族类中心迁往该类点密集处实现优化。
K均值算法最小化代价函数,就是优化目标如下:
找到能够最小化代价函数 J 的 μi 和 ci ,这个代价函数又叫失真代价函数或K均值算法的失真;每个样本与此样本所属聚类中心的距离的平方值。
目标函数是:各个点到其所在类的中心的距离之和最小。
簇分配(k均值算法第一步)其实就是最小化 J 关于变量 c,先保持 μ1,μ2,…,μk 不变,选出 c1,c2,…,cm 来最小化J。
移动聚类中心(k均值算法第二步)其实就是最小化 J 关于变量 μ,选择 μ1,μ2,…,μk 值来最小化J。
——————————————————————
两种参数要选择,一个是初始化的中心点位置,一个是簇的个数。
13-4.随机初始化 P79 - 02:36
因为有K簇,随机选K个样本点作为初始K个簇的中心点。K就是要划分的簇的数目。
当运行K-Means算法时:
(1)应该把聚类中心的数值K设置为比训练样本数量m小的值;
(2)随机挑选K个训练样本,作为初始聚类中心;
(3)设定μ1,…,μk,让它们等于这K个样本。
K-Means算法最终可能会落在局部最优,给定以下的数据集,执行算法,最终可能得到一个比较好的局部最优,实际是全局最优。如图1所示:
但是如果随机初始化,得到的结果不好的话,就可能会得到不同的局部最优值,如下图2、3所示。
实际上,上述图3中的红色聚类只捕捉到了一个无标签的样本,而局部最优这个术语指的是代价函数J的局部最优。
多次初始化防止K均值算法落到局部最优
为了防止落到局部最优,我们可以进行多次初始化K均值算法,这样我们可以得到一个足够好的结果。
具体做法如下:
我们运行100次(由你而定,一般是50到1000次)K均值算法,最后得到100个聚类结果,然后在这所有100个分类数据的方法中找到代价最小的一个。
如果k在2到10之间,多次随机初始化能保证我们找到局部最优解,但如果k比10大很多,多次随机初始化就不会有太大改善。
13-5.选取聚类数量 P80 - 00:17
选择聚类数量并不容易,因为通常在数据集中有几个聚类是不清楚的,看下面这样的数据集,有时候会觉得有4个聚类,有时会觉得只有2个聚类。
当讨论选择聚类方法时,可能会谈到肘部法则这个方法,在肘部法则中,要做的是改变K也就是聚类总数,先用一个类来聚类,这就意味着所有的数据都会分到一个类里,然后计算代价函数J,用更多的类执行K-Means算法可能就会得到更小的J值,从下图中可以看到在K=3处有个突出来的部分,把这就叫作“肘部法则”。
当应用“肘部法则”时,遇到类似上图,这将是一种用来选择聚类个数的合理方法,但是“肘部法则”并不常用的原因是在实际运用到聚类问题上时,往往最后会得到一条看上去相当模糊的曲线,如下图:
观察上图,看不到某个突出的点,看上去J值是连续下降的,所以这样并不能确定拐点合适的位置,这种情况下用“肘部法则”来选择聚类数目是很困难的。
另外一种选择K值的思路:决定聚类数量更好的方式是看哪个聚类数量能更好地适应后续的目的,下面用具体的例子解释。
思考,如果有5个分类,T恤能否更好地满足顾客的需求?可以卖出多少T恤?客户是否会感到满意?所以考虑到后续的发展,就可以帮助你来选择是3种尺码好一些还是用5种尺码更适合。
总结:大部分时候聚类数量K仍然是通过手动、人工输入或者经验来决定的,一种可以尝试方式是“肘部法则”,但不能期望它每次都有效果,选择聚类数量更好的思路是问自己运行K-Means算法的目的是什么,然后再决定聚类数量K取多少更好地服务于后续的目的。
14-1.目标.I:数据压缩 P81 - 06:07
数据压缩不仅能让我们对数据进行压缩,使得数据占用较少的内存和硬盘空间,还能对学习算法进行加速。
(1)二维降到一维:
如果能把数据从二维减少到一维,用来减少这种冗余,通过降维,也就说想找出一条线,看起来大多数样本所在的线,所有的数据都投影到这条线上,通过这种做法,能够测量出每个样本在线上的位置。就可以建立新的特征,只需要一个数就能确定新特征。
意味着:之前要用一个二维数字表示的特征可以一维数直接表示。
通过这种方法,就能够把内存的需求减半或者数据空间需求减半。
(2)三维降到二维:
很难看出图中的数据分布在一个平面上,所以这时降维的方法就是把所有的数据都投影到一个二维平面上:
14-2.目标.II:可视化 P82 - 05:22
用一个具体的例子来说:
假设收集了许多统计数据的大数据集,如下图中的全世界各国的情况:
这里有50个特征,但是很难绘制50维的数据,如何可视化这些数据?可以用使用降维的方法。
例如用下面二维向量表示:
这样的话,如果能用2个数字来表示50个特征,要做是从50维降到2维,就可以把这些国家在二维平面上表示出来。
在图中,每个国家用一个点来表示,横轴可能表示国家的经济规模、总GDP等一些特征,而纵轴可能对应于人均GDP、个人经济活跃程度等一些特征,这样可以通过这个图了解国家的大致情况。
这就是降维如何把高维的数据降到二维或者三维,这样就能把它绘制出来,并更好地理解这些数据。
14-3.主成分分析问题规划1 P83 - 00:02
对降维问题来说,目前最流行的的算法是叫做主成分分析法(PCA)。
假设有如图的数据集,想要将它从二维降到一维,可能会选择图中的线:
通过选择的这条线,发现每个点到它们对应的直线上的投影点之间的距离是非常小的。
所以,PCA会找一个低维平面(上图中是这条直线)然后将数据投影在上面,使点到投影点之间的距离平方最小。(这些距离有时也称为投影误差)
核心思想:最小化投影误差
在应用PCA之前,常规的做法是先进行均值归一化和特征规范化,使得特征x1、x2的均值为0,并且其数值在可比较的范围内。
PCA问题的正式定义:PCA做的就是如果想将数据从二维降到一维,要试着找一个向量(假设是向量u(1))投影后能够使最小化投影误差的方向。
通常的情况是有N维数据,并且想将其降到K维,这时并不是找单个向量来对数据进行投影,而是想寻找K个方向(K个方向向量:u(1),u(2),…,u(K))来对数据进行投影,投影到这K个向量展开的线性子空间上,来最小化投影误差。
正式的来说:要找出一组向量,要做的是将这些数据投影到这K个向量展开的线性子空间上。举个例子,如果有下图所示的三维点云:
那么也就是要找出一对向量,这两个向量一起定义了一个二维平面,将数据投影到平面上,并且要求数据点投影到平面上的距离最小。
因此,PCA做的是它试图找出一条直线、一个平面或其他维的空间,然后对数据进行投影,以最小化平方投影、90度投影或正交投影的误差。
PCA和线性回归的关系如何?
PCA不是线性回归,它们是两种不同的算法。
线性回归要做的是用所有的x值来预测y,然而在PCA中,没有什么特殊的变量y是需要预测的。
14-4.主成分分析问题规划2 P84 - 01:32
在应用PCA之前首先是对数据的预处理:执行均值标准化(可能根据数据也要进行特征缩放)
如果不同特征有非常不相同的缩放,则如下:
sj可以是最大值减去最小值,或更普遍的是一个特征j的标准偏差。
完这一系列的数据预处理之后,接下来是PCA算法需要做的:
PCA要做的是需要想出一个方法计算两个东西,一个是计算这些向量u^(1),另一个是如何计算这些数字z。
—————————————————————-
https://www.zhihu.com/question//answer/
PCA实则就是对协方差矩阵进行对角化,从协方差矩阵的定义看: Σ=E{(x-E(x)) * (x-E(x))T},PCA的第一步就是要去均值化。
零均值化,又叫中心化,就是一组数据,其中每一个都减去这组的平均值。
(移动到中心,各维度均值为0)
——————————————————————
PCA的主要步骤:
https://blog.csdn.net/a/article/details/
1、输入样本矩阵,大小:m*n。每一行为一个n维样本,共m个,如下图:
样本矩阵X=
取第一行为例,它的下标含义是 行表示样本序号,列表示样本维度。
2、对样本矩阵进行中心化(取均值);
3、计算样本的协方差矩阵;
4、计算协方差矩阵的特征值并取出最大的k个特征值所对应的特征向量,构成一个新的矩阵;
5、这个矩阵就是我们要求的特征矩阵,里面每一列就为样本的一维主成分。把样本矩阵投影到以该矩阵为基的新空间中,便可以将n维数据降低成k维数据。
PCA算法的优化目标就是:
① 降维后同一维度的方差最大(去冗余)
② 不同维度之间的相关性为0(降噪)
根据线性代数,同一元素的协方差就表示该元素的方差,不同元素之间的协方差就表示它们的相关性。
因此两个优化目标可以用协方差矩阵来表示:
PCA原理以及应用
https://blog.csdn.net/master_hunter/article/details/
https://blog.csdn.net/zhongkelee/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/190080.html