第三周学习周报
- 摘要
- Abstract
- 深度学习
-
- [1. Classification](#1. Classification)
- [1.1 Classification的应用场景](#1.1 Classification的应用场景)
- [1.2 Classification宝可梦案例](#1.2 Classification宝可梦案例)
-
- [1.2.1 案例的背景说明以及实际作用](#1.2.1 案例的背景说明以及实际作用)
- [1.2.2 拓展:用Regression处理Classification问题存在的弊端](#1.2.2 拓展:用Regression处理Classification问题存在的弊端)
- [1.2.3 Classification思路](#1.2.3 Classification思路)
-
- [1.2.3.1 生成模型(Generative Models)](#1.2.3.1 生成模型(Generative Models))
- [1.2.3.2 Gaussian Distribution(高斯(正态)分布)](#1.2.3.2 Gaussian Distribution(高斯(正态)分布))
- [1.2.3.3 Maximum Likelihood(极大似然估计)](#1.2.3.3 Maximum Likelihood(极大似然估计))
- [1.2.3.3 分类结果](#1.2.3.3 分类结果)
- [1.2.3.4 改善Model](#1.2.3.4 改善Model)
-
- [1.2.3.4.1 关于共用 Σ 的疑问](#1.2.3.4.1 关于共用 Σ 的疑问)
- [1.3 Classification总结以及拓展](#1.3 Classification总结以及拓展)
-
- [1.3.1 Classification Model的Three Step](#1.3.1 Classification Model的Three Step)
- [1.3.2 一定要使用高斯分布吗?](#1.3.2 一定要使用高斯分布吗?)
- [1.3.3 posterior probability(后验概率)](#1.3.3 posterior probability(后验概率))
- [2. Logistic Regression(逻辑回归)](#2. Logistic Regression(逻辑回归))
-
- [2.1 Step 1:Function Set(设计函数)](#2.1 Step 1:Function Set(设计函数))
-
- [2.1.1 logistic regression与linear regression在step 1的区别](#2.1.1 logistic regression与linear regression在step 1的区别)
- [2.2 Step 2:Goodness of Function(评估函数好坏)](#2.2 Step 2:Goodness of Function(评估函数好坏))
-
- [2.2.1 logistic regression与linear regression在step 2的区别](#2.2.1 logistic regression与linear regression在step 2的区别)
- [2.2.2 在logistic regression使用Square Error会产生的问题](#2.2.2 在logistic regression使用Square Error会产生的问题)
- [2.3 Step 3:Find the best function(找到最佳的函数)](#2.3 Step 3:Find the best function(找到最佳的函数))
-
- [2.3.1 logistic regression与linear regression在step 3的区别](#2.3.1 logistic regression与linear regression在step 3的区别)
- [2.4 Logistic Regression的限制](#2.4 Logistic Regression的限制)
-
- [2.4.1 Cascading logistic regression model (级联逻辑回归模型)](#2.4.1 Cascading logistic regression model (级联逻辑回归模型))
- [3. Generative(生成模型) V.S. Discriminative(判别模型)](#3. Generative(生成模型) V.S. Discriminative(判别模型))
- [4. Multi-class Classification](#4. Multi-class Classification)
- 总结
摘要
这一周学习了classification的宝可梦案例,对Classification的应用场景、Classification的实现步骤、以及对Probability Distribution(概率分布),如:高斯分布、和一些概率论的基础知识进行了学习。此外还学习了Logistic Regression(逻辑回归),学习了Logistic Regression的三个步骤和它的限制,并理清了Generative(生成模型) V.S. Discriminative(判别模型)的区别以及优劣势,其中学习到了贝叶斯公式以及伯努利分布以及交叉熵的计算。最后对多个Class的分类过程进行学习,懂得了其过程。
Abstract
This week, I studied the Pok é mon case of classification, including its application scenarios, implementation steps, and the basics of probability distribution such as Gaussian distribution and probability theory. In addition, I also learned about Logistic Regression, the three steps and limitations of Logistic Regression, and clarified the differences and advantages and disadvantages of Generative V.S. Discriminative models. I learned about Bayesian formulas, Bernoulli distributions, and the calculation of cross entropy. Finally, I learned the classification process of multiple classes and understood its process.
深度学习
1. Classification
1.1 Classification的应用场景
classification常常用于分类问题
常见的场景有:
1、信用分评估:根据收入、职业、年龄综合因素作为input,最后决定是否接受借贷。
2、医疗诊断:根据现在的症状、年龄、性别等作为input,最后输出疾病类型。
3、手写识别:根据手写的内容作为input,输出手写的字。
1.2 Classification宝可梦案例
1.2.1 案例的背景说明以及实际作用
接下来,我们继续使用宝可梦的例子来学习Classification。
我们需要实现的就是不同的宝可梦,来判断它属于哪一个属性(即宝可梦作为input,属性为output)
比如:比卡丘 = 电属性、杰尼龟 = 水属性 等等
我们如何用宝可梦作为input呢?
我们可以用数字来表示宝可梦 ,因为我们的宝可梦都是由很多数值属性组成,例如:血量(HP)、攻击力(Attack)、防御力(Defense)等
所以,我们可以用7个数字组成的vector(向量)表示一只宝可梦
下图中,我们就可以使用如下数字来表示比卡丘。
那我们预测宝可梦属性有什么作用呢?
下图是一直1818的属性相克表。
如果我们正确的使用classification预测到了属性,在宝可梦对决中,根据18 18的属性相克表,我们就可以使用合理的战略去战胜对方的宝可梦了。
1.2.2 拓展:用Regression处理Classification问题存在的弊端
我们之前学习了Regression,假设我们在不了解Classification之前,用Regression去解决我们现在的问题会存在判断失误的问题
下图中,我们直接把Classification视为二分类问题,Class 1 代表目标为 1 ;Class 2 代表目标为 -1(因为Classification 输出的是一个数字结果,如:0.8、0.6等等)
这个例子中简单来说就是结果越接近1就是Class 1;越接近-1就是为Class 2
假设我们用这个Model
b + w 1 x 1 + w 2 x 2 = 0 b + w_{1}x_{1} + w_{2}x_{2} = 0 b+w1x1+w2x2=0
为分界线,即在绿色线上边>0,在绿色线下方<0 ,按照下图左1的分布情况来说,我们完成分类还是能够正确进行的。
但是!
如果像右图的情况,结果如下:
再者,如果我们有很多分类,他们之间并不存在关系,我们也无法使用Regression的Model完成。
1.2.3 Classification思路
如下图:
其中perceptron,SVM的概念如下:
感知机(perceptron):
感知机(perceptron)
又称"人工神经元"或"朴素感知机",由Frank Rosenblatt于1957年提出。
作为神经网络的起源算法,通过深入学习可以帮助我们更好的理解神经网络的部分工作原理。
感知机接受多个输入信号,输出一个信号。感知机的信号只有"0(不传递信号)"和"1(传递信号)"两种。
SVM(支持向量机):
支持向量机(Support Vector Machine, SVM)
一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier)
其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)
这两种方法,我们后续再进行研究学习。
1.2.3.1 生成模型(Generative Models)
下面我们用两个盒子的案例来认知Generative Models
解释如下:
P ( X ∣ Y ) P(X|Y) P(X∣Y)
表示在Y的前提下,抽到X的几率有多少
所以蓝球从Box1里面抽出的概率表示为:
P ( B 1 ∣ Blue ) = P ( Blue ∣ B 1 ) P ( B 1 ) P ( Blue ∣ B 1 ) P ( B 1 ) + P ( Blue ∣ B 2 ) P ( B 2 ) \mathrm{P}\left(\mathrm{B}{1} \mid \text { Blue }\right)=\frac{P\left(\text { Blue } \mid B{1}\right) P\left(B_{1}\right)}{P\left(\text { Blue } \mid B_{1}\right) P\left(B_{1}\right)+P\left(\text { Blue } \mid B_{2}\right) P\left(B_{2}\right)} P(B1∣ Blue )=P( Blue ∣B1)P(B1)+P( Blue ∣B2)P(B2)P( Blue ∣B1)P(B1)
假设我们的Two Boxes变为Two Class ,其他的都跟着改变,那么我们想要求一个x在Class 1的概率 。
同理得,我们求得x在Class 1 的几率为:
P ( C 1 ∣ x ) = P ( x ∣ C 1 ) P ( C 1 ) P ( x ∣ C 1 ) P ( C 1 ) + P ( x ∣ C 2 ) P ( C 2 ) \mathrm{P}\left(\mathrm{C}{1} \mid \text { x }\right)=\frac{P\left(\text {x} \mid C{1}\right) P\left(C_{1}\right)}{P\left(\text { x } \mid C_{1}\right) P\left(C_{1}\right)+P\left(\text { x } \mid C_{2}\right) P\left(C_{2}\right)} P(C1∣ x )=P( x ∣C1)P(C1)+P( x ∣C2)P(C2)P(x∣C1)P(C1)
而以下这些概率为
Prior(先验概率):
先验概率(prior probability):是指根据以往经验和分析得到的概率
P ( C 1 ) P\left(C_{1}\right) P(C1)
P ( C 2 ) P\left(C_{2}\right) P(C2)
P ( x ∣ C 1 ) \mathrm{P}\left(\mathrm{x} \mid \text {C}_{1}\right) P(x∣C1)
P ( x ∣ C 2 ) \mathrm{P}\left(\mathrm{x} \mid \text {C}_{2}\right) P(x∣C2)
这些都需要在training data里面估算出来
上面这一套流程生成的Model就叫做生成模型(Generative Models),可以用这个model计算某个x出现的几率,概率为:
P ( x ) = P ( C 1 ) P ( x ∣ C 1 ) + P ( C 2 ) P ( x ∣ C 2 ) \begin{array}{c} P \left( {x} \right) = P\left(C_{1}\right){P}\left(\mathrm{x} \mid \text {C}{1}\right)+P\left(C{2}\right){P}\left(\mathrm{x} \mid \text {C}_{2}\right) \end{array} P(x)=P(C1)P(x∣C1)+P(C2)P(x∣C2)
继续以宝可梦的案例套入,假设我们只研究水属性和普通属性进行分类,我们需要计算出其Prior(先验概率)。
水系为Class 1(C₁) 、Normal 为Class 2(C₂)
ID < 400为训练集,其余为测试集
假设training data里有 79只水系、61只normal系
我们很简单地计算出P(C₁)、P(C₂)
那如果,我们遇到了这是海龟是training data里面79只水系以外的物种(感觉上x似乎0),那怎么判断其是什么属性呢?
一开始我们介绍背景的时候就说到,我们的宝可梦都是以7个数值组成的vector来构成的,这也是宝可梦的的特征值,也就是feature,所以我们并不会遇到x为0的情况
1.2.3.2 Gaussian Distribution(高斯(正态)分布)
我们的training data中79个水系宝可梦由Defense(防御)和SP Defense特殊防御组成 ,如下图画红色圈的地方所示。
那么海龟在我们training data之外 ,难道就直接为0吗?
这样肯定是不合理的,因为我们这79只水系神奇宝贝只是冰山一角,我们要根据现有的数据去预测水系中抽中海龟的概率。这时候就要用到高斯分布 了。
我们可以把这种高维的高斯分布看作是一个Function
它的input就是vector x(即某一只宝可梦的数值)
它的output就是x从这个分布背抽取出来的几率
其中 ,其形状是由 𝜇 跟 𝛴 决定的 ( 𝜇 与 𝛴的解释在下面),就是同一个x, 𝜇 跟 𝛴 不同,函数的图像就会不一样。
高斯公式的解释:
高斯分布,也称为正态分布,是一种概率分布,其概率密度函数呈钟形曲线,具有两个参数:均值μ和方差σ²。
高斯分布的曲线呈钟型,两头低,中间高,左右对称。
若随机变量X服从一个数学期望为μ、方差为σ²的正态分布,记为N(μ,σ²)。
其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。
当μ = 0,σ = 1时的正态分布是标准正态分布。
![](https://i-blog.csdnimg.cn/direct/18b0513863db4fc19ed80720693ff795.png)
其中,多维高斯分布公式为:
f μ , Σ ( x ) = 1 ( 2 π ) D / 2 1 ∣ Σ ∣ 1 / 2 exp { − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) } f_{\mu, \Sigma}(x)=\frac{1}{(2 \pi)^{D / 2}} \frac{1}{|\Sigma|^{1 / 2}} \exp \left\{-\frac{1}{2}(x-\mu)^{T} \Sigma^{-1}(x-\mu)\right\} fμ,Σ(x)=(2π)D/21∣Σ∣1/21exp{−21(x−μ)TΣ−1(x−μ)}
D 表示 维度
𝜇 是 𝐷 维 期望向量,𝛴 是 𝐷×𝐷 维协方差矩阵, |𝛴| 表示 𝛴 的行列式
exp 是自然指数函数,即以实数e(e≈2.71828)为底的指数函数,其表达式为exp(x)=e^x。
按照图像,可以理解为 𝜇 为一个点,𝛴 为一个范围 ,如果x离 𝛴 越远,则概率值越小
1.2.3.3 Maximum Likelihood(极大似然估计)
那么 𝜇 跟 𝛴 要怎么找呢?
其中L(μ,Σ)的表达式如下:
L ( μ , Σ ) = f μ , Σ ( x 1 ) f μ , Σ ( x 2 ) ⋯ ⋯ f μ , Σ ( x 79 ) L(\mu ,\Sigma) = \mathop{{f}}\nolimits_{\mu ,\Sigma}(x^1)\mathop{{f}}\nolimits_{\mu ,\Sigma}(x^2) \dotsb\dotsb \mathop{{f}}\nolimits_{\mu ,\Sigma}(x^{79}) L(μ,Σ)=fμ,Σ(x1)fμ,Σ(x2)⋯⋯fμ,Σ(x79)
我们用上述方法就可以计算出水系以及Normal系各自的 μ 与 Σ ,如下图:
1.2.3.3 分类结果
有了这些数据,我们就可以套用我们的这个公式了
P ( C 1 ∣ x ) = P ( x ∣ C 1 ) P ( C 1 ) P ( x ∣ C 1 ) P ( C 1 ) + P ( x ∣ C 2 ) P ( C 2 ) \mathrm{P}\left(\mathrm{C}{1} \mid \text { x }\right)=\frac{P\left(\text {x} \mid C{1}\right) P\left(C_{1}\right)}{P\left(\text { x } \mid C_{1}\right) P\left(C_{1}\right)+P\left(\text { x } \mid C_{2}\right) P\left(C_{2}\right)} P(C1∣ x )=P( x ∣C1)P(C1)+P( x ∣C2)P(C2)P(x∣C1)P(C1)
![](https://i-blog.csdnimg.cn/direct/08aec740613943108dd5609872101525.jpeg)
计算结果如下:
红色点代表Normal系;蓝色点代表水系。
越偏红色区域就是越贴近Class 1(水系)、蓝色区域则贴近Class 2
当P(C₁|x)>0.5时,可以看到在training data上蓝色点还是很集中的,而在测试集上,其分类的正确率仅仅只有47%,效果还是差强人意。
所以,我们考虑更多因素进去,让Model变得更复杂
除了Defense与SP Defense ,我们继续加入例如攻击力、速度、HP等factor
构成 D = 7(7维)的vector ,可以看到我们在测试集中的分类正确率有所提升 ,从47%------>54%,但是效果还是一般般,任然需要改进。
1.2.3.4 改善Model
既然分类的正确率那么低,我们有必要去改善一下我们的模型
我们尝试把 Σ 变成公用的(即Class 1与Class 2共用一个 Σ )
那么如何实现共用 Σ 呢?
那么这样做会发生什么事情呢?
从图像可以看到,在二维的情况下(只考虑Defense 与SP Defense),我们原来的分布分界线由曲线变成了直线,变成了Classification的linear Model
当我们考虑7个factor变为7维时,我们的预测正确率达到了73%,比原来大幅度的提升了。
1.2.3.4.1 关于共用 Σ 的疑问
为什么能够提升分类正确率呢?
AI的回答是,共用 Σ 提升了泛化能力,减少了过拟合风险,从而提高了分类正确率。
那为什么不同类别共用 Σ 以后,分界线会从曲线变为线性?
1.3 Classification总结以及拓展
1.3.1 Classification Model的Three Step
Classification同样分为三部,跟Regression一样都是老三样
第一步:设置Model
我们前面提到的生成模型(Generative Models)
即
P ( C 1 ∣ x ) = P ( x ∣ C 1 ) P ( C 1 ) P ( x ∣ C 1 ) P ( C 1 ) + P ( x ∣ C 2 ) P ( C 2 ) \mathrm{P}\left(\mathrm{C}{1} \mid \text { x }\right)=\frac{P\left(\text {x} \mid C{1}\right) P\left(C_{1}\right)}{P\left(\text { x } \mid C_{1}\right) P\left(C_{1}\right)+P\left(\text { x } \mid C_{2}\right) P\left(C_{2}\right)} P(C1∣ x )=P( x ∣C1)P(C1)+P( x ∣C2)P(C2)P(x∣C1)P(C1)
假设只有Class 1 与 Class 2。
加上 if else
当P(C₁|x)>某个值时,就是class 1 否则 则为Class 2。
第二步:评估模型好坏
就是计算Likelihood的值,例如上述的L(μ,Σ),L越大越好
第三步:找到最佳的function(确定最佳值)
即确定了 μ* 、 Σ* 之后带进去的function
1.3.2 一定要使用高斯分布吗?
那么我们一定要使用高斯分布来求得P(x₁|C₁)吗?
答案当然不是的,我们可以使用其他的**probability distribution(概率分布)**去完成classification
当然要分场景使用
例如:
1、用在一个binary feature(二元特征,例如结果只有 是 或者 否),我们就可以使用Bernoulli distribution(伯努利分布)
伯努利分布(Bernoulli Distribution)是一种离散型概率分布,以瑞士科学家詹姆斯·伯努利命名。
这种分布的特点是随机变量只有两个可能的取值,通常表示为1和0,或者成功和失败。
2、假设我们的feature全部是独立产生的,我们并不需要寻找它们之间的关系,我们就可以使用朴素贝叶斯分类器(Naive Bayes Classifier)
朴素贝叶斯分类器是一种基于贝叶斯定理与特征条件独立假设的分类方法。
它发源于古典数学理论,拥有坚实的数学基础和稳定的分类效率。
与决策树模型相比,朴素贝叶斯分类器所需的估计参数较少,对缺失数据不太敏感,并且算法相对简单。
这种分类器特别适用于处理多类别分类问题,如文档分类和垃圾邮件检测等,其中多项式朴素贝叶斯是一种常用的文本分类算法,主要用于处理特征是离散型变量的情况。
![](https://i-blog.csdnimg.cn/direct/b1957a8a70974e6aadfdba143286bc3c.png)
1.3.3 posterior probability(后验概率)
后验慨率(posterior probability) ,亦译"统计概率"或"频数概率"。
大量试验中随机事件出现的频率逐渐稳定于其附近的某常数
我们对
P ( C 1 ∣ x ) = P ( x ∣ C 1 ) P ( C 1 ) P ( x ∣ C 1 ) P ( C 1 ) + P ( x ∣ C 2 ) P ( C 2 ) \mathrm{P}\left(\mathrm{C}{1} \mid \text { x }\right)=\frac{P\left(\text {x} \mid C{1}\right) P\left(C_{1}\right)}{P\left(\text { x } \mid C_{1}\right) P\left(C_{1}\right)+P\left(\text { x } \mid C_{2}\right) P\left(C_{2}\right)} P(C1∣ x )=P( x ∣C1)P(C1)+P( x ∣C2)P(C2)P(x∣C1)P(C1)
进行展开,推导,计算其最终结果
推导过程如下:
接下来对z进行展开:
综上所述,再把 z 带入,然后共用 Σ 的情况得:
这也解释了,为什么我们共用Σ时候,分界线会变成线性的了,因为最后都会变成一个线性方程。
最后我们似乎又回到了学习Regression时候的Model
那么我们为何不直接求w与b呢?
这个问题留到下面的Logistic Regression继续学习。
2. Logistic Regression(逻辑回归)
2.1 Step 1:Function Set(设计函数)
前面我们说到
P ( C 1 ∣ x ) \mathrm{P}\left(\mathrm{C}_{1} \mid \text { x }\right) P(C1∣ x )
经过我们上面的推导,实际上就是
P w , b ( C 1 ∣ x ) = σ ( z ) {\color{Red} P_{w,b}(C_1|x)= \sigma (z)} Pw,b(C1∣x)=σ(z)
z = w x + b = ∑ i w i x i + b {\color{Red} z = wx + b =\sum_{i}w_ix_i +b } z=wx+b=i∑wixi+b
当P(C₁|x) > 0.5,证明属于Class 1则输出C₁;否则输出C₂。
图像化,如图所示:
这个就叫做logistic regression
2.1.1 logistic regression与linear regression在step 1的区别
可以看到logistic regression与linear regression的既有相似部分,但是区别也是很明显的.例如:在Output中,因为受到sigmoid函数的限制,Regression的output只能输出0~1的范围。
2.2 Step 2:Goodness of Function(评估函数好坏)
接下来计算L(w,b)
由于位置原因,手写最下面的f省略了下标w,b
上图中,下半部分的方法就是计算的是两个伯努利分布之间的交叉熵
伯努利分布(0-1分布)
0---1分布就是n=1情况下的二项分布。
即只先进行一次事件试验,该事件发生的概率为p,不发生的概率为1-p
交叉熵(Cross Entropy)是Shannon信息论中一个重要概念
主要用于度量两个概率分布间的差异性信息。
Cross entropy的表达式为:
H ( p , q ) = − ∑ x p ( x ) l n ( q ( x ) ) {\color{red} H(p,q) = -\sum_{x}p(x)ln(q(x))} H(p,q)=−x∑p(x)ln(q(x))
2.2.1 logistic regression与linear regression在step 2的区别
可以看logistic regression与linear regression在Step 2中,区别也是很明显,如下:
区别1:真实值的不同
logistic regression 中真实值是:1 代表 class 1 ,0 代表 class 2。
而linear regression 中真实值是一个真实数字。
区别2:损失函数不同
logistic regression 的Loss function是cross entropy(交叉熵)
而linear regression 的Loss function是square error(平方差)或者average error(均值差)
注意:是在只有两个类别的前提下
其中 C 具体公式如下:
C ( f ( x n ) , y ^ n ) = − [ y ^ n ln f ( x n ) + ( 1 − y ^ n ) ln ( 1 − f ( x n ) ) ] {\color{Red} C\left(f\left(x^{n}\right), \hat{y}^{n}\right)=-\left[\hat{y}^{n} \ln f\left(x^{n}\right)+\left(1-\hat{y}^{n}\right) \ln \left(1-f\left(x^{n}\right)\right)]\right.} C(f(xn),y^n)=−[y^nlnf(xn)+(1−y^n)ln(1−f(xn))]
2.2.2 在logistic regression使用Square Error会产生的问题
根据上面的图示,不禁产生了一个疑问 :
那为什么不可以在logistics regression用square error(平方差)来计算误差呢?
假如,我们真的这样做了
经过一系列计算后
假如:
f w , b ( x n ) = 1 f_{w,b}(x^n) = 1 fw,b(xn)=1
时,我们就进行gradient descent时候,对w求导的时候结果就为0
但是
f w , b ( x n ) = 0 f_{w,b}(x^n) = 0 fw,b(xn)=0
求导结果也为0
所以根据计算,我们可以对Cross Entropy与Square Error进行一个比较:
从图像中我们可以很明显的看到,
Cross Entropy远离目标值时候,差距会很大,但是接近目标值会变得平坦。总体波动很大,适合我们调整Learning Rate(学习率)。
但是,使用Square Error,可以看到总体很平坦(变化小),无论距离目标远近,变化都不大,所以都不好调节Learning Rate参数。
所以在Logistic Regression使用 Square Error会影响我们调整Learning Rate(学习率),不容易得到好的结果。
2.3 Step 3:Find the best function(找到最佳的函数)
既然我们有了L(w,b)的表达式,我们就可以使用gradient descent完成,求出w与b
按求w*为例子,过程如下
2.3.1 logistic regression与linear regression在step 3的区别
可以看到, logistic regression与linear regression在step 3中 ,形式基本上是一样的,都是使用的梯度下降算法,求导计算。
但是推导的过程确实不尽相同 ,值得探讨
补充linear regression的推导过程
2.4 Logistic Regression的限制
Logistic Regression有非常强的限制性
有两个Class,C₁、C₂的分布如下图所示
如果我们使用Logistic Regression进行分类,是不可以的
因为Logistic Regression的分界线就是一条直线 ,这样的对角分布,Logistic Regression是无法将这些点分成两边,从而完成不了Class 1与Class 2的判定
那么要怎么解决呢?
我们可以把x₁、x₂按照我们的方式转到另外一个space上面,比如变成到某点的距离,这样Logistic Regression就可以完成分类了,如下图所示:
但是人为找到一个好的transformation是非常不容易的,肯定要交给机器来产生。
那么如何实现呢?
2.4.1 Cascading logistic regression model (级联逻辑回归模型)
把很多个logistic regression接起来就可以完成,这就可以用机器来完成feature transformation了
前面的两个Logistic Regression做的就是feature transformation,后面Logistic Regression做的是Classification完成分类
把这个方式应用到对角点的例子上,就是如下结果:
多个过后,就可以用一条boundary去区分x是属于Class 1 与Class 2了
通过这样多个Logistic Regression级联,我们就得到了一个Neural Network,
每一个Logistic Regression就是一个Neuron
3. Generative(生成模型) V.S. Discriminative(判别模型)
上面一、二小节中
我们使用logistic Regression时是属于Discriminative(判别模型) 方法。
当我们使用高斯分布对Probability Distribution进行分析时是属于Generative(生成模型)方法 。
但它们之间的function set是一模一样的,都是:
P w , b ( C 1 ∣ x ) = σ ( z ) = σ ( w ∗ x + b ) = σ ( ∑ i w i x i + b ) {\color{Red} P_{w,b}(C_1|x)= \sigma (z) = \sigma(w*x + b) =\sigma(\sum_{i}w_ix_i +b)} Pw,b(C1∣x)=σ(z)=σ(w∗x+b)=σ(i∑wixi+b)
当我们使用Discriminative方法时候,我们可以直接把w与b求出来
但
当我们使用Generative方法时候,需要计算 Σ 与 μ再算出w与b 。
那它们计算出来的w,b会是同一个数值吗?
那肯定是不一样的,不然也不需要区分这两种方法了。
那这两个模型谁的表现效果会更好呢?
如下图所示,Discriminative的效果似乎更好一些。
为什么会这样呢?
接下来我们举个例子说明:
如下图中:
共分为2个Class(C₁、C₂)
其中共有1(Class 1) + 4 + 4 +4(12个Class 2) = 13组data
每个data有两个feature(x₁与x₂,结果只有0或1)。
那么我们测试集出现两个红色时候,其实属于Class 1还是Class 2呢?
我们使用Naive Bayes(朴素贝叶斯),去分析一下
机器学习中的十大算法之一的朴素贝叶斯(Naive Bayes)算法
是一种基于贝叶斯定理和特征条件独立假设的分类方法。
其核心原理在于利用贝叶斯定理计算给定数据样本下各类别的后验概率,并选择具有最高后验概率的类别作为该样本的预测类别。
朴素贝叶斯算法假设特征之间是相互独立的,这一假设虽然简化了计算,但也可能影响分类的准确性
由于其简单易懂、学习效率高,朴素贝叶斯算法在实际应用中仍然被广泛使用,特别是在文本分类、垃圾邮件过滤等领域取得了显著的效果。
贝叶斯公式为:
P ( A ∣ B ) = P ( B ∣ A ) ∗ P ( A ) P ( B ) P(A|B) = \frac{P(B|A)*P(A)} {P(B)} P(A∣B)=P(B)P(B∣A)∗P(A)
在这个案例就是
某一个Class产生x的几率 = 某一个Class产生x₁的几率 * 某个Class产生x₂的几率
P ( x ∣ C i ) = P ( x 1 ∣ C i ) P ( x 2 ∣ C i ) P(x|C_i) = P(x_1|C_i)P(x_2|C_i) P(x∣Ci)=P(x1∣Ci)P(x2∣Ci)
![](https://i-blog.csdnimg.cn/direct/1f52c794ebc84fcb81f4dc36ca51812d.png)
于是得到下面的概率:
算出来这组testing data属于C₁的几率是<0.5的,证明属于Class 2的概率比较大
可以看到Naive Bayes"脑补" 出了Class 2 产生这一组data的结果,而Generative是基这种方式去"脑补"的,所以结果未必是好事
而在Training Data中明明没有并且我们人的直觉会感觉这组data就是Class 1的
但脑补一定是坏事吗?
肯定不是的Generative也是有优势的,不同情况下,Generative 要优于 Discriminative。
例如:
鲁棒性指的是模型对于输入数据变化的健壮性。
具体来说,一个具有鲁棒性的深度学习模型,在遇到各种不同的输入变化时,能够保持良好的性能,并准确地做出预测。
这种鲁棒性不仅体现在模型对噪声、缺失数据或其他异常情况的适应能力上,也体现在模型对于新数据或未知情况的适应能力上
4. Multi-class Classification
之前我们举的例子都是只有两个Class,如果有多个Class的Classification要怎么做呢?
假如有三个Class(C₁、C₂、C₃)
每一个Class都有自己的weight和bias
并各自与x相乘得到z₁、z₂、z₃,其值可以是无穷小到无穷大
然后将其放入一个softmax function中
oftmax 函数可以将一个实数向量转换为概率分布。
具体来说,对于一个向量 x,softmax 函数将其转换为概率分布
使得每个元素的输出值都在 0 和 1 之间,并且所有元素的和为 1。
其实就是
1、将
z 1 、 z 2 、 z 3 z_1、z_2、z_3 z1、z2、z3
都变为
e z 1 、 e z 2 、 e z 3 e^{z_1}、e^{z_2}、e^{z_3} ez1、ez2、ez3
2、再将其相加得到
∑ j = 1 e z j \sum_{j=1}e^{z_j} j=1∑ezj
3、再用z₁、z₂、z₃ 各自除 这个求和 得到最终结果y₁、y₂、y₃
( y的范围(0,1),所有y加起来等于1 )
于是便得到:
y i = P ( C i ∣ x ) y_i = P(C_i|x) yi=P(Ci∣x)
如下图所示:
可见Softmax会强化值,大的值经过exp化后会变得更大,会拉开数值的差距
然后总体的流程如下图:
最后算出y后,与真实值做Cross Entropy
但是真实值是一个vector ,不同的vector对应不同的Class
总结
这一周学习了classification的宝可梦案例,学习了Classification的应用场景,并学习了高斯分布、generative model、posterior probability等知识。然后还探究了Logistic Regression(逻辑回归),学习了Logistic Regression的三个步骤,它的限制以及feature transformation解决限制的方法,并了解Generative(生成模型) V.S. Discriminative(判别模型)的区别以及优劣势,其中学习了贝叶斯公式以及伯努利分布以及交叉熵的计算和公式的推导。按照学长给出文章数学公式要更加格式化的建议,在学习期间我学会使用数学公式编辑器LaTeX在线公式编辑器(点击进入网站)完成对数学公式的编辑,让周报行文更加规范。在本周的学习过程中发现自己的概率论都忘得七七八八了,所以整体有点吃力,后面还要找时间深究一下贝叶斯分类器、高斯分布等概率论知识的底层原理。
因为概率论功底不好,在高斯分布的概念、Two Boxes概率案例的理解等,为了加深理解,我花了较多时间回顾,并花了大量时间进行手动推导学习Classification过程中的公式。所以导致这周学习PyTorch的任务并未如自己的规划完成,所以PyTorch的学习要留在下一周进行了。
下一周计划继续学习PyTorch并学习李宏毅的机器学习任务攻略。