人工智能重点汇总(搜索策略、博弈、贝叶斯、SVM、神经网络、弧相容、SVM、决策树、反向传播、卷积神经网络)

前言:智能Agent

理性Agent:信息手机 + 自主学习;

任务环境(PEAS)四要素:

  • 性能;
  • 环境;
  • 执行器;
  • 传感器;
    在这里插入图片描述

环境的性质
在这里插入图片描述
环境的性质决定了agent的设计
最难处理的情况:
部分可观察的,随机的,连续的,动态的,延续式的,多agent的

Agent的类型与结构
四种基本的类型
简单反射agent
在这里插入图片描述
基于模型的反射agent
在这里插入图片描述
基于目标的agent
在这里插入图片描述
基于效用的agent
在这里插入图片描述
学习Agent
在这里插入图片描述

一、搜索算法

评价指标:
完备性:如果问题存在解,算法可找到解
最优性:找到的解是最优解
时间复杂度:花费的时间
空间复杂度:花费的内存

1.1 无信息搜索策略

除了问题定义中提供的状态信息外没有任何附加信息
 算法只能区分状态是不是目标状态
无法比较非目标状态的好坏

策略:
宽度优先搜索
一致代价搜索
深度优先搜索
迭代加深的深度优先搜索

1.1.1 BFS

算法流程:

宽度优先搜索的具体实现采用的数据结构是队列,直接使用STL库的queue即可,算法步骤如下:
①根据开始城市Arid来创建搜索树的根结点,将根结点入队;
②判断此时队列是否为空,非空则:
③取出队首元素——待拓展的城市作为当前扩展城市,并标记当前城市已拓展;
④拓展当前城市的所有相邻城市。对于每一个相邻的城市,创建一个新的子结点,将当前相邻的城市城市信息、路径耗散赋给子结点,子结点的父结点为当前正在拓展的结点。
⑤此时判断子结点城市是不是目标城市,如果是,则输出搜索的路径,搜索结束。若不是目标城市,则继续下一步。(在扩展子结点时判断是否到达目标城市)
⑥对于每一个被扩展的子结点,判断对应的城市是否已经被拓展过,如果该相邻城市没被拓展过,则将该相邻城市加入队列中,回到②。

在这里插入图片描述
在这里插入图片描述

首先,我们假设搜索树的状态空间中每个状态都有b个后继。

时间复杂度分析
  搜索树的根节点生成第一层的b个节点,每个子节点又生成b个子节点,第二层则有b平方个节点,依次类推。于是可以得到生成的节点总数为O(bd),其中d为深度。这也就是宽度优先搜索的时间复杂度。

空间复杂度分析
  因为FIFO队列中最多存储O(bd-1)个节点在探索集中,O(bd)个节点在边缘节点集中,所以空间复杂度由边缘节点机的大小决定,即空间复杂度为O(bd).

宽度优先搜索的优缺点:

  • 优点:宽度优先搜索是完备的,能够找到目标节点,且能保证最短(在所有行动的代价都相同的情况下),即保证最优性;
  • 缺点:在深度d比较大的时候,时间和空间都会指数爆炸!

1.1.2 ❗一致代价搜索

  一致代价搜索总是扩展路径消耗最小的节点N,N点的路径消耗等于前一节点N-1的路径消耗加上N-1到N节点的路径消耗;即扩展的是路径消耗g(n)最小的节点n,用优先队列来实现,对解的路径步数不关心,只关心路径总代价。即使找到目标节点也不会结束,而是再检查新路径是不是要比老路径好,确实好,则丢弃老路径。

算法流程:
实现 一致代价搜索算法 的数据结构是优先队列,直接使用STL库中的priority_queue,排序方法为结点中的评估值f从小到大排序,算法步骤如下:
①根据Arid的信息创建搜索树的根结点,将根节点加入优先队列中。
②判断此时优先队列是否为空,不为空则:
③取出 当前优先队列中队首 元素,获取当前需要拓展的城市城市信息,并将当前城市标记已被拓展。
④ 此时判断当前城市是不是目标城市,如果是,则输出搜索的路径,搜索结束。若不是,则继续下一步。
⑤拓展当前城市的所有相邻城市。对于每一个相邻的城市创建一个新的子结点,根据当前城市的信息和路径耗散给子结点赋值,尤其这里需要给子结点的评估值f赋值为路径耗散用来作为优先队列排序标准,子结点的父亲结点是当前正在拓展的结点,并且在当前结点的子结点队列中加入该子结点。
⑥判断子结点中的城市是否被扩展过,若没有则将子结点都直接加入优先队列中,回到②。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.1.3 DFS

深度优先搜索依赖的数据结构是栈,可以满足DFS的LIFO队列需求;
在这里插入图片描述
所遍历的不是目标节点所在的那边并且深度(子节点)趋于无穷时,是不完备的;
在这里插入图片描述

深度受限搜索DLS

1.1.4 ❗迭代加深的DFS

使用情形:在搜索树很宽很深时,但是我们能确定答案一定在浅层节点时,就可以使用迭代加深DFS;

使用方式
1、先设定搜索深度为1,就 DFS 搜索到深度 第一层就停止

2、如果没有找到答案,则将搜索深度设为2,继续搜索。

3、直到搜索到答案为止

  迭代加深的深度优先搜索是基于深度受限搜索的一种策略,它经常和深度优先搜索结合使用来确定最好的深度界限。做法是不断地增大深度限制——首先为 0,接着为 1,然后是 2,以此类推直到找到目标。当深度界限达到 d,即最浅的目标结点所在深度时,就能找到目标结点。
迭代加深的深度优先搜索算法结合了深度优先搜索和宽度优先搜索的优点,它的空间需求是合适的:O(bd)和深度优先搜索一样,时间复杂度:O(bd),当分支因子有限时,该搜索算法是完备的,当路径代价是结点深度的非递减函数时该算法是最优的。

算法步骤:
实现 迭代加深的深度优先搜索算法 的数据结构与深度优先相同都是栈
①根据Arid信息创建搜索树的根结点,将根结点的深度初始化为 0,将根结点加入栈中。
②判断此时栈是否为空,若为空,返回搜索失败,需要继续迭代加深界限值,否则:
③ 取出 栈中栈顶元素,判断当前结点的深度是否超过限界,如果深度超过限界,跳过该结点。如果深度没有超过限界,则获取当前结点的城市信息,并标记当前城市为已被拓展。
④ 此时判断当前城市是不是目标城市,如果是,则输出搜索的路径,返回搜索成功,搜索结束。若不是目标城市,则继续下一步。
⑤ 拓展当前城市的所有相邻城市。对于每一个相邻的城市,根据相邻城市的信息创建一个新的子结点,将当前相邻的城市城市信息赋给子结点,同时子结点的深度为父亲结点的深度加一。子结点的父亲结点是当前正在拓展的结点,并且在当前结点的孩子列表中加入该子结点。
⑥判断该相邻城市是否已经被拓展过,如果该相邻城市没被拓展过,则将该结点栈中。
在这里插入图片描述

1.1.5 算法性能比较

在这里插入图片描述

1.2 有信息搜索策略

有信息搜索(informed search)=启发式搜索,启发式搜索比无信息搜索更加有效,因为前者使用了除问题本身定义之外的特定知识。

1.2.1 最佳优先搜索

基本思路:通过对每一个结点计算评价函数f(n)值,找到一个f(n)最低的未扩散的结点;

实现:队列中,结点按照评价函数值从低到高排序

大多数评价函数由启发函数h构成 -> h(n):结点到目标结点的最小代价估计值;

最佳优先搜索是依据估计值,而一致代价搜搜是实际值;
贪婪最佳优先搜索
  贪婪最佳优先搜索:首先扩展与目标结点估测距离最近的结点;它只用到启发信息,也就是f(n)=h(n) ;即使用启发函数,从状态n到目标的最短路径的估计耗散值 h(n) 作为从起点经过n到目标的最短路径估计耗散值 f(n) ;

使用两点之间的直线距离来估测两点之间的实际距离;

在这里插入图片描述
在这里插入图片描述
完备性
树搜索:(GBFS tree)
可能会进入死循环,出不来。
在有限空间内和无限空间:不完备

图搜索:(GBFS graph)
不会进入死循环。
有限空间:完备; 无限空间:不完备。

贪婪最佳优先搜索与深度优先搜索相似,即便是有限状态空间,它也是不完备的。

最优性
不能保证最优性

时间和空间复杂度
算法的时间复杂度和空间复杂度都是 O(bm) O(bm),其中m是搜索空间的最大深度。

1.2.2 A*搜索

A* 搜索对节点的评估结合了 g(n) ,即到达此节点已经花费的代价,和 h(n) ,故f(n)=g(n)+h(n) ,即经过节点n的最小代价;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
A算法的最优化:如果h(n)是一致的,A使用图搜索是最优的;
在这里插入图片描述

❗A*解决八数码问题

1.2.3 可采纳性和一致性

可采纳启发式:是指启发式函数从不会过高估计到达目标的代价。所以:f(n)=g(n)+h(n)永远不会超过经过节点n的解的实际代价。
(罗马尼亚问题就是一个例子,因为直线距离最短)

一致性(也叫单调性),只作用在图搜索中使用A*算法:如果对每个节点n和通过任一行动a生成的n的每个后继节点n’,从节点n到达目标的估计代价不大于从n到n’的单步代价与从n’到达目标的估计代价之和。

最优性:如果A是可采纳的,那么A的树搜索版本是最优的,如果h(n)是一致的,那么图搜索的A*算法是最优的。

缺点:A的时间复杂度比较高,严重依赖于对状态空间所做的假设。而且内存保留了所有已生成的节点,使得A算法常常在计算完之前就耗尽了自己的内存。

1.2.3 松弛问题

减少了行动限制的问题即为松弛问题;
松弛问题增加了状态空间的边;
原有问题的任一最优解同样也是松弛问题的解,但松弛问题可能存在更好的解;

1.3 ❗局部搜索算法

局部搜索是解决最优化问题的一种启发式算法。对于某些计算起来非常复杂的最优化问题,比如各种NP完全问题,要找到最优解需要的时间随问题规模呈指数增长,因此诞生了各种启发式算法来退而求其次寻找次优解,是一种近似算法(Approximate algorithms),以时间换精度的思想,能用很少的内存在很大or无限的状态空间中找到合理解

1.3.1 爬山法

在这里插入图片描述
可能得到局部非全局最优值

1.3.2 模拟退火

思想:爬山法+随机发 => 允许算法向坏的方向移动以摆脱局部最大值,但这种移动随着时间的推移概率逐步下降;
如果时间下降得足够慢,那么模拟退火是能找到全局最优解的;
在这里插入图片描述

1.3.3 局部束搜索&随机束搜索

局部束搜索(loca beam search)算法记录k个状态而不是只记录一个,它从k个随机生成的状态开始,每一步全部k个状态的所有后继全被生成。如果其中有一个是目标状态,则算法停,否则从整个后继列表(注意:是整个,这时候不再分开来看)中选择k个最佳后继,重复之。

但是这样的局部束搜索缺乏多样性,很快就会聚集到状态空间中的一小块区域内,使得搜索代价比高昂的爬山法版本还多。随机束搜索(stochastic beam search)与随机爬山法类似,并不是选最好的k个,而是随机选择k个,其中选中概率是状态值的递增函数(正比)。随机束搜索类似于自然选择

1.3.4 遗传算法

以k个随机产生的状态开始(population)
一个后继状态由两个父状态决定
通常一个状态表示成一个字符串
定义一个健康度量函数用来评价状态的好坏程度
通过选择,交叉,突变的操作产生下一轮状态
在这里插入图片描述

二、对抗搜索

2.1 ❗博弈

竞争环境中多个agent之间的目标是有冲突的,称为对抗搜索问题,也称为博弈;

有完整信息的,确定的,轮流行动的,两个游戏者的零和游戏,如国际象棋;
 难于求解
 分支因子大
 注重时间效率

博弈问题的的6个元素:
1)S0S0:初始状态(游戏开始时的情况)
2)Player(s):定义此时该谁动
3)Actions(s):此状态下的合法移动集合
4)Result(s,a):转移模型,定义行动的结果
5)Terminal-test(s):终止测试,游戏结束返回真,否则假。
6)Utility(s,p):效用函数,定义游戏者p在终止状态s下的数值。 零和博弈是指所有棋手的收益之和在每个棋局实例中都相同。国际象棋中是0+1, 1+0或1/2+1/2。

2.2 极大极小值算法

max 要最大回报,min 要最小回报,目标相反,竞争关系;
在这里插入图片描述
在这里插入图片描述

其实就是从叶子节点往前推,我MAX要往大值走,而MIN就去捣乱,类似一个DFS的过程;
在这里插入图片描述

2.3 ❗α-β剪枝

如果我能确定某些枝比我目前已知的最好的结果要差时,就可以把它剪掉;即剪掉一些没有必要检测的分支;
α = > 对于MAX来说最好的结果;
β = > 对于MIN来说最好的结果;
只要满足α>=β,该结点的父节点的剩下的结点就可以被剪掉了;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最优解和MIN-MAX搜索的最优解一样,α-β剪枝能够提高效率,但它的效率与最优解的位置排序有关;这里最好的结果刚好处在第一个位置,刚好一开始就能检测到;如果在最后,那么就相当于全部遍历一次;

即α-β剪枝的效率很大程度上依赖于检查后继状态的顺序,最佳剪枝情况下可以将时间复杂度从极大,极小算法的O(bm)减少到O(bm/2),采用随机顺序检查的总结点数大约是O(b3m/4);

三、约束满足问题

3.1 CSP

使用要素化来描述状态:一组变量,每个变量有自己的值。当每个变量都有自己的赋值同时满足所有关于变量的约束时,问题就得到了解决。这类问题就叫做约束满足问题(CSP),全称Constraint Satisfaction Problem。

CSP利用了状态结构的优势,使用的是通用策略而不是问题专业启发式来求解复杂问题。

主要思想:通过识别违反约束的变量/值的组合迅速消除大规模的搜索空间。

定义CSP:
CSP包含三个成分X,D,C:
X:变量集合 (variables)
D:值域集合,每个变量有自己的值域 (domain)
C:描述变量取值的约束集合 (constraint)

比如这个地图着色问题:
在这里插入图片描述
注意变量和值域得区分,在什么当中干什么,即在变量当中做值域,在地图当中进行着色;

CSP的形式化:
一元约束:只涉及一个变量
Eg., SA!=green
二元约束:涉及两个变量
Eg.,SA!=WA
高阶约束:涉及3个或者3个以上变量

变量个数任意的约束称为全局约束;

3.2 约束传播

约束传播:使用约束来减小一个变量的合法取值范围,从而影响到跟此变量有约束关系的另一变量的取值,如此进行;
约束传播与搜索交替进行;

核心思想:局部相容性

结点相容:单个变量(对应一个节点)值域中的所有取值满足它的一元约束,就是节点相容的。

弧相容:

有向弧:约束图中连接两个变量;
弧相容:如果对于变量X得每个取值x,变量Y都有某个取值能和x保持相容,则连接X->Y的弧是相容的;

比如:对变量X1,X2,如果D1中每个数值在D2中都存在一些数值满足弧(X1,X2)的二元约束,那么X1相对X2是弧相容的。

如果每个变量相对其他变量都是弧相容的,则称该网络是弧相容的。

弧相容可能缩小变量的值域,有时甚至还能找到解(每各变量值域大小都为1时),或者有时发现CSP无解(一些变量的值域大小=0)。但是弧相容也会失败(比如澳大利亚地图着色问题,如果只有两种颜色,弧相容意义不大),所以才要用更强的相容概念。

❗弧相容算法AC-3

在这里插入图片描述
在这里插入图片描述

其它

k-相容:如果对于任何k-1个变量的相容赋值,第k个变量总能被赋予一个和前k-1个变量相容的值,那么这个CSP就是k相容的。

全局约束
1)Alldiff约束:表示所有相关变量必须取不同的值。
2)atmost约束(另一个重要的高阶约束):也叫资源约束。

如果对于每个变量X和它的取值上下界,每个变量Y都存在某个取值满足X和Y之间的约束,则称该CSP是边界相容(此边界传播广泛应用于实际CSP)。

3.3 CSP的回溯搜索

很多CSP只用推理是无法求解的,还需要通过搜索来求解。

部分赋值的回溯搜索算法:
可以用标准的深度优先搜索,状态可能是部分赋值,行动是将var=value加入到赋值中。

回溯搜索用于深度优先搜索中,每次为一个变量选一个赋值,没有合法的值的时候就回溯。

3.4 有效解决CSP问题

在这里插入图片描述

四、一阶逻辑

4.1 概念符号

语法
常量符号: Hunan, University,…
 谓词符号:Brother, >,…
 函数涵词:Sqrt, LeftLegOf,…
 变量:x,y,a,b,…
 连接符:∧, ∨, ﹁,…
 量词:∀、∃

量词属性:
在这里插入图片描述

4.2 举例

在这里插入图片描述

五、❗不确定性问题 & 贝叶斯网络

5.1 条件概率

条件概率是指事件A在事件B发生的条件下发生的概率。条件概率表示为:P(A|B),读作“A在B发生的条件下发生的概率”。若只有两个事件A,B,那么,在这里插入图片描述

注意和联合概率的区分:联合概率表示两个事件共同发生的概率。A与B的联合概率表示为 P(AB) 或者P(A,B),或者P(A∩B);

在这里插入图片描述
完备事件组、样本空间划分
在这里插入图片描述
把样本空间Ω分成n份,每份发生的概率之和为1;
全概率公式

若事件A1,A2,…An构成一个完备事件组且都有正概率,则对任意一个事件B,有公式

P(B)=P(A1)P(B|A1)+P(A2)P(B|A2)+P(A3)P(B|A3)+…+P(An)P(B|An)
在这里插入图片描述

若事件A1,A2,…An构成一个完备事件组且都有正概率,则贝叶斯公式为:
在这里插入图片描述
在这里插入图片描述

5.2 条件独立

P(A₁A₂|A)=P(A₁|A)•P(A₂|A)

当A发生时,A₁发生与否与A₂发生与否是无关的.

5.3 贝叶斯规则

贝叶斯定理:P(A|B)=P(B|A)P(A)/P(B)
在这里插入图片描述
在贝叶斯法则中,每个名词都有约定俗成的名称:
Pr(A)是A的先验概率或边缘概率。之所以称为"先验"是因为它不考虑任何B方面的因素。
Pr(A|B)是已知B发生后A的条件概率,也由于得自B的取值而被称作A的后验概率。
Pr(B|A)是已知A发生后B的条件概率,也由于得自A的取值而被称作B的后验概率。
Pr(B)是B的先验概率或边缘概率,也作标准化常量(normalized constant)。

贝叶斯定理其实就是从P(A|B)推出P(B|A):
**P(A∩B) = P(A)P(B|A)=P(B)P(A|B); -> p(B|A)=P(A|B)P(B)/P(A)
在这里插入图片描述

5.4 贝叶斯网络

概率图模型PGM分为:无向图的马尔可夫网络和有向的贝叶斯网络;二者有交集;
在这里插入图片描述
在这里插入图片描述
每个结点在给定其直接前驱时,条件独立于其后继;
在这里插入图片描述
全连接贝叶斯网络
在这里插入图片描述
在这里插入图片描述
为什么要得到联合分布?
如上图,得到x1-x7的联合分布后,想算任何一个分布的概率都能算出来;

对一个实际贝叶斯网络的分析:
在这里插入图片描述
比如这个警报:
在这里插入图片描述
对于报警问题,条件概率表有1 + 1 + 4 + 2 + 2 = 10 行;
知道条件概率表后,我们可以算出任何一个分布的概率,比如这里联合分布P,只用看里面结点以及它们的 parent 结点 然后列出条件概率式P(x|parent(x))计算即可;
跟下面这个表达其实一样:
在这里插入图片描述

条件概率表
①每一行对应于一个条件事件的条件概率;
②对于有k个父结点布尔变量,总共有2k行;
③没有父结点的结点的条件概率就是先验概率;

通过贝叶斯网络判断条件独立
tail - to - tail
在这里插入图片描述
head - to - tail
在这里插入图片描述

六、朴素贝叶斯算法

6.1 强化学习等介绍

学习Agent
一个学习原件(Learning element)的设计被下列因素影响:
从性能原件的哪一个组件中学习
学习采用的反馈类型

学习的反馈类型可分为以下几种:
在这里插入图片描述
强化学习
Agent选择一个动作用于环境,环境接受该动作后状态发生变化,同时产生一个强化信号(奖或惩)反馈给Agent,Agent根据强化信号和环境当前状态再选择下一个动作,选择的原则是使受到正强化(奖)的概率增大。

K折交叉验证
思想:每个样本既作为训练数据,又作为测试数据
将数据分成k个相等的子集
执行k轮次学习,每一轮1/k个数据作为测试数据,其他作为训练数据
在这里插入图片描述
精度增加伴随着代价增加
性能度量:正确率

好的训练性能 != 好的测试性能 - > 过拟合问题
训练集学习得到的目标函数在训练集上性能很好,在测试集上性能不高;
避免过拟合 -> 选择简单的目标函数;

6.2 朴素贝叶斯原理

在这里插入图片描述

  • 类别就是我们最终要得到的,给具有这些特征的东西分为某类的概率
  • P(特征)表示待分类自身的概率,结果是一个常数且不影响结果,一般忽略;
  • P(类别i)表示每个类别的先验概率,即类别i的概率;
  • P(类别i | 特征)表示在给定特征后属于 类别i 的概率;
  • P(特征 | 类别i)表示某个类别i产生X的概率;
  • P(特征i | 类别i)表示某个类别i产生某个特征i的概率;
    在这里插入图片描述
    写正规点就是这样:
    在这里插入图片描述

6.3 举例(通俗易懂)

在这里插入图片描述
现在给我们的问题是,如果一对男女朋友,男生想女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?

这是一个典型的分类问题,转为数学问题就是比较p(嫁|(不帅、性格不好、身高矮、不上进))与p(不嫁|(不帅、性格不好、身高矮、不上进))的概率,谁的概率大,我就能给出嫁或者不嫁的答案!

这里我们联系到朴素贝叶斯公式:
在这里插入图片描述
p(不帅、性格不好、身高矮、不上进|嫁) = p(不帅|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上进|嫁),那么我就要分别统计后面几个概率,也就得到了左边的概率!

等等,为什么这个成立呢?学过概率论的同学可能有感觉了,这个等式成立的条件需要特征之间相互独立吧!

对的!这也就是为什么朴素贝叶斯分类有朴素一词的来源,朴素贝叶斯算法是假设各个特征之间相互独立,那么这个等式就成立了!

但是为什么需要假设特征之间相互独立呢?
1、我们这么想,假如没有这个假设,那么我们对右边这些概率的估计其实是不可做的,这么说,我们这个例子有4个特征,其中帅包括{帅,不帅},性格包括{不好,好,爆好},身高包括{高,矮,中},上进包括{不上进,上进},那么四个特征的联合概率分布总共是4维空间,总个数为233*2=36个。

36个,计算机扫描统计还可以,但是现实生活中,往往有非常多的特征,每一个特征的取值也是非常之多,那么通过统计来估计后面概率的值,变得几乎不可做,这也是为什么需要假设特征之间独立的原因。

2、假如我们没有假设特征之间相互独立,那么我们统计的时候,就需要在整个特征空间中去找,比如统计p(不帅、性格不好、身高矮、不上进|嫁),

我们就需要在嫁的条件下,去找四种特征全满足分别是不帅,性格不好,身高矮,不上进的人的个数,这样的话,由于数据的稀疏性,很容易统计到0的情况。 这样是不合适的。

根据上面俩个原因,朴素贝叶斯法对条件概率分布做了条件独立性的假设,由于这是一个较强的假设,朴素贝叶斯也由此得名!这一假设使得朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。

在这里插入图片描述

则 p(嫁) = 6/12(总样本数) = 1/2
则p(不帅|嫁) = 3/6 = 1/2
则p(性格不好|嫁)= 1/6
则p(矮|嫁) = 1/6
则p(不上进|嫁) = 1/6

则p(不嫁)=6/12 = 1/2
则p(不帅|不嫁) = 1/6
则p(性格不好|不嫁) =3/6 = 1/2
则p(矮|不嫁) = 6/6 = 1
则p(不上进|不嫁) = 3/6 = 1/2

根据公式:
P(嫁|不帅、性格不合、升高矮、不上进)= 1/21/61/61/61/2=1/864;
P(不嫁|不帅、性格不合、升高矮、不上进)= 1/61/211/21/2=1/48;

于是有p (不嫁|不帅、性格不好、身高矮、不上进)>p (嫁|不帅、性格不好、身高矮、不上进)
所以我们根据朴素贝叶斯算法可以给这个女生答案,是不嫁!!!!

参考文章:
https://blog.csdn.net/lyl771857509/article/details/78993493
https://blog.csdn.net/weixin_42137700/article/details/86635737

七、决策树

选择最好的属性为根节点:一个好的属性应该能尽量将正样本与负样本区分开来;

7.1 PPT上的原理

如何衡量属性好坏:信息理论!
在这里插入图片描述
在这里插入图片描述
方法一:
在这里插入图片描述
这里这个 I(p/(p+n),n/(p+n)),就是把概率直接放进去的简化后的H();
算的话就直接 I(p/(p+n),n/(p+n))= I(a,b)= - a log 2a - blog2b;

方法二:
在这里插入图片描述

7.2 ❗西瓜书上的原理

7.3.1 信息熵

在这里插入图片描述
即信息熵代表的是不纯度,信息熵越小,不纯度越小,纯度越高;

7.3.2 信息增益

在这里插入图片描述
举例
西瓜书上这个例子就挺完美了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.3.3 增益率

在这里插入图片描述
先从候选划分属性中找出信息增益率高于平均水平的水下,再从中选择增益率最高的!

7.3.4 基尼指数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
熵越小 -> 纯度越高;
信息增益越大 -> 纯度越高;
GINI越小 -> 纯度越高

7.4 决策树剪枝

解决过拟合问题
在这里插入图片描述

八、神经网络

8.1 介绍

8.1.1 分类

  • 标准的神经网络:一般应用再像房价预测、广告推荐这种的;
  • CNN(卷积神经网络):应用图像处理领域
  • RNN(循环神经网络):序列相关数据,比如时间序列、语言、单词这些
  • 混合神经网络:复杂的应用,比如无人驾驶这块;
    在这里插入图片描述

8.1.2 结构化数据与非结构化数据

在这里插入图片描述
很明显,非结构化数据对计算机来说更难理解;

8.2 神经元

在这里插入图片描述

典型的人工神经网络
在这里插入图片描述
激活函数:
在这里插入图片描述

8.3 ❗感知机

输入信号送到神经元时,分别乘以各自的权重,神经元计算总和,然后与阈值θ比较,大于θ输出1,小于则输出0;
在这里插入图片描述
感知机的局限在于他只能表示用一条直线分隔开的空间,弯曲的就不行;
即一层神经元,功能有限,只能解决与或非这种线性问题,无法解决异或这种非线性问题;
在这里插入图片描述
通过组合与门、与非门、或门来实现异或门,两层感知机;
在这里插入图片描述
输入层神经元接受外界输入,隐藏层和输出层对信号进行加工,最终结果由输出层神经元输出;输入层神经元仅仅是接受输入,不进行函数处理;

8.4 激活函数

在这里插入图片描述
这样一个h(x)就是激活函数:即将输入信号处理后的总和转化为输出信号;
激活函数是连接感知机和神经网络的桥梁;

朴素感知机指激活函数适用阶跃函数(激活函数以阈值为界,一旦输入超过阈值,就切换输出)的模型,而多层感知机指神经网络,指使用sigmoid等平滑函数作为激活函数;

相对于阶跃函数只能返回0或1,sigmoid函数可以返回0.731 …、0.880 …等实数(这一点和刚才的平滑性有关)。也就是说,感知机中神经元之间流动的是0或1的二元信号,而神经网络中流动的是连续的实数值信号;

神经网络的激活函数必须使用非线性函数(阶跃函数、sigmoid这些),否则使用线性函数,那么网络加多层就没意义了;线性函数的问题在于,不管如何加深层数,总是存在与之等效的“无隐藏层的神经网络“;

ReLU函数
sigmoid很早就开始用了,最近一直在用ReLU函数;
在这里插入图片描述
一般地,回归问题可以使用恒等函数,二元分类问题可以使用 sigmoid函数,多元分类问题可以使用 softmax函数;

softmax
softmax的总和是1,这样他就可以表示每个分类所占的概率;
在这里插入图片描述
对于指数运算,单纯的softmax函数容易溢出,做如下改进:
在这里插入图片描述
因为反正表示比例,共同分母的大小无所谓,那么就把它和分子同时缩小;
在这里插入图片描述
以手写数字识别为例,这里的W1,W2,W3是从已经训练好的模型中读取的权重;
在这里插入图片描述
和求解机器学习问题的步骤(分成学习和推理两个阶段进行)一样,使用神经网络解决问题时,也需要首先使用训练数据(学习数据)进行权重参数的学习;进行推理时,使用刚才学习到的参数,对输入数据进行分类。

8.5 神经网络的学习

神经网络的学习是指从训练数据中自动获取最优权重参数的过程;为了使神经网络能进行学习,将导入损失函数这一指标。而学习的目的就是以该损失函数为基准,找出能使它的值达到最小的权重参数

泛化能力是指处理未被观察过的数据(不包含在训练数据中的数据)的能力。获得泛化能力是机器学习的最终目标

仅仅用一个数据集去学习和评价参数,是无法进行正确评价的。这样会导致可以顺利地处理某个数据集,但无法处理其他数据集的情况。顺便说一下,只对某个数据集过度拟合的状态称为过拟合;

损失函数:神经网络的学习通过某个指标表示现在的状态,可以用任意函数,但一般采用均方误差和交叉熵误差;

均方误差就不说了,说一下交叉熵误差:
在这里插入图片描述
就是得到正确解的概率越大,交叉熵误差越小;
在这里插入图片描述
注意,神经网络不能以精度为目标;

8.6 梯度下降法

在这里插入图片描述
梯度:全部变量的偏导数汇总而成的向量就是梯度;
在这里插入图片描述
虽然梯度的方向并不一定指向最小值,但沿着它的方向能够最大限度地减小函数的值。因此,在寻找函数的最小值(或者尽可能小的值)的位置的任务中,要以梯度的信息为线索,决定前进的方向;

根据目的是寻找最小值还是最大值,梯度法的叫法有所不同。严格地讲,寻找最小值的梯度法称为梯度下降法(gradient descent method),寻找最大值的梯度法称为梯度上升法(gradient ascent method)。但是通过反转损失函数的符号,求最小值的问题和求最大值的问题会变成相同的问题,因此“下降”还是“上升”的差异本质上并不重要。
w=w-α
无论左边还是右边,都会朝最低点前进,导数为正,w减小;导数为负,w增加;

在这里插入图片描述
学习率这样的参数称为超参数。这是一种和神经网络的参数(权重和偏置)性质不同的参数。相对于神经网络的权重参数是通过训练数据和学习算法自动获得的,学习率这样的超参数则是人工设定的

8.7 ❗误差反向传播算法(BP)

error BackPropagation => BP神经网络;
核心思想:训练数据输入到神经网络中,神经网络计算真实输出与实际输出之间的差异,然后通过调节权值来减小这种差异;

两阶段
训练数据输入,通过前向层层计算到输出层输出结果
计算真实输出与实际输出之间的错误,通过反向从输出层-隐藏层-输入层的调节权值来减少错误

在这里插入图片描述
如何决定学习率:
如果错误连续几个训练周期有着相同的符号,则应该增加学习率,如错误的符号出现交替,则学习率应该减小;

8.7.1 计算图

在这里插入图片描述这里的第“从左向右进行计算”是一种正方向上的传播,简称为正向传播(forward propagation)。正向传播是从计算图出发点到结束点的传播。既然有正向传播这个名称,当然也可以考虑反向(从图上看的话,就是从右向左)的传播。实际上,这种传播称为反向传播(backward propagation)。

8.7.2 局部计算

在这里插入图片描述
局部计算,只考虑跟自己相关的,计算图可以集中精力于局部计算。无论全局的计算有多么复杂,各个步骤所要做的就是对象节点的局部计算;

实际上,使用计算图最大的原因是,可以通过反向传播高效计算导数

在这里插入图片描述
反向传播传递“局部导数”,将导数的值写在箭头的下方。在这个例子中,反向传播从右向左传递导数的值(1 → 1.1 → 2.2)。从这个结果中可知,“支付金额关于苹果的价格的导数”的值是2.2。这意味着,如果苹果的价格上涨1日元,最终的支付金额会增加2.2日元;

这里只求了关于苹果的价格的导数,不过“支付金额关于消费税的导数”“支付金额关于苹果的个数的导数”等也都可以用同样的方式算出来。并且,计算中途求得的导数的结果(中间传递的导数)可以被共享,从而可以高效地计算多个导数。综上,计算图的优点是,可以通过正向传播和反向传播高效地计算各个变量的导数值;

8.7.3 链式法则

说到底就是复合函数的求导;
在这里插入图片描述

8.7.4 ❗举例

记这么多不如一个例子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以参考这个:
在这里插入图片描述
B站 八分钟搞懂神经网络反向传播

九、线性模型与支持向量机

9.1 分类与回归

多元线性回归
在这里插入图片描述
目标也就和单变量线性回归问题中的一样,找出使得代价函数最小的一系列参数。我们也是用批量梯度下降(Batch Gradient Descent)的方法:
在这里插入图片描述
在初始状态,我们随机选择一系列参数值,计算所有的预测结果之后,再给所有的参数一个新的值,如此循环直到收敛(convergence)。
在这里插入图片描述
在这里插入图片描述

9.2 带logistic回归得线性分类器

带硬阈值的线性分类器的输出函数是不连续函数,因此是不可微的;
在这里插入图片描述

9.3 ❗支持向量机

当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分支持向量机;
当训练样本近似线性可分时,通过软间隔最大化,学习一个线性支持向量机;
当训练样本线性不可分时,通过核技巧和软间隔最大化,学习一个非线性支持向量机;

SVM三大特性:
在这里插入图片描述

9.3.1 硬间隔

在这里插入图片描述
根据直觉和PAC理论,最大化margin的分类器是最好的;
在这里插入图片描述
样本中距离超平面最近的一些点,这些点叫做支持向量;
在这里插入图片描述
转化为二次最优化问题来求解w和b
在这里插入图片描述

9.3.2 软间隔

硬边缘分类有2个问题:
1)只有数据线性分离才有效。

2)对异常值太敏感。
在这里插入图片描述
在上面的数据分类图中,有一个蓝色的异常值。如果我们对该数据集应用硬间隔分类,我们将得到左边图所示的小间距的决策边界。为了避免这些问题,最好使用更弹性的模型。目的是在保持街道尽可能大和不允许实例过界之间找到一个良好的平衡(就是说会出现实例最终可能在街道中间甚至道路另一面的情况)。这称为软间隔分类。如果我们对该数据集应用软间隔分类,则我们将得到比硬间隔分类更大决策边界。如右图中所示。

即允许个别样本点出现在间隔带里面;
在这里插入图片描述

9.4 核函数

基本思想: 将原有的数据空间映射到更高维度的数据空间使得训练数据具有线性可分离性;
在这里插入图片描述
在这里插入图片描述
常见核函数
在这里插入图片描述
就是把原函数映射为核函数的形式,比如K( x , y ) = ex+y + √xy + 3 转换为(ex,√x,√3)T·(ey,√y,√3),
即φ(x)=(ex,√x,√3),原函数变为φ(x)T·φ(y);

十、卷积神经网络

CNN - Convolutional Neural Networks
适用目标分类、目标检测
在这里插入图片描述
输入层
在这里插入图片描述
就把图像转化为数据;

10.1 卷积层

在这里插入图片描述
在这里插入图片描述

10.2 激活函数

Sigmoid函数:
在这里插入图片描述
tanh函数:
在这里插入图片描述
ReLU(Rectified linear unit,修正线性单元)函数:x<0,y=0;x>0,y=x;
把矩阵中的负数变为0;
在这里插入图片描述

10.3 池化层

空间池化,也叫亚采样或下采样降低了每个特征映射的维度,但是保留了最重要的信息;
空间池化可以有很多种形式:最大(Max),平均(Average),求和(Sum)等等。最大池化成效最好;
同样也是设定步长,边缘补零;
在这里插入图片描述
在这里插入图片描述
池化层的功能

  • 减少网络中的参数计算数量,从而遏制过拟合
  • 增强网络对输入图像中的小变形、扭曲、平移的鲁棒性(输入里的微小扭曲不会改变池化输出——因为我们在局部邻域已经取了最大值/平均值)。
  • 帮助我们获得不因尺寸而改变的等效图片表征。这非常有用,因为这样我们就可以探测到图片里的物体,不论那个物体在哪。

卷积、激活、池化可以多次排列组合;

卷积+池化 = 特征提取器
在这里插入图片描述

10.4 全连接层 = 分类器

使用softmax激励函数作为输出层的多层感知机(Multi-Layer Perceptron)。

卷积层和池化层的输出代表了输入图像的高级特征,全连接层的目的就是类别基于训练集用这些特征进行分类

把二维矩阵变为一维矩阵,排成一列;
各自乘以各自的权重(通过训练得到,BP神经网络),得到是目标的概率;
全连接的意思就是最后每一个神经元都要乘以权重,再加起来;

10.5 反向传播训练

这些都在神经网络说过了,不重复了;
在这里插入图片描述

10.6 优化

高维非凸优化问题之所以困难,是因为存在大量的鞍点(梯度为零并且Hessian矩阵特征值有正有负)而不是局部极值;

和局部极小值相同的是,在该点处的梯度都等于零,不同在于在鞍点附近Hessian矩阵有正的和负的特征值,即是不定的,而在局部极值附近的Hessian矩阵是正定的;

在鞍点附近,基于梯度的优化算法(几乎目前所有的实际使用的优化算法都是基于梯度的)会遇到较为严重的问题,鞍点附近梯度很小,可能会长时间卡在该点附近。在鞍点数目极大的时候,这个问题会变得非常严重

10.6.1 梯度下降

在这里插入图片描述

10.6.2 动量

在这里插入图片描述

10.7 防止过拟合

这是解决过拟合最有效的方法,只要给足够多的数据,让模型「看见」尽可能多的「例外情况」,它就会不断修正自己,从而得到更好的结果;
在这里插入图片描述

10.7.1 L1/L2正则

在这里插入图片描述

10.7.2 Early Stopping

在这里插入图片描述

10.7.3 Dropout

在这里插入图片描述

10.8 经典CNN网络

Lenet
在这里插入图片描述
Alexnet
在这里插入图片描述
VGG-16

Resnet-50

十一、强化学习

强化(reinforcement)学习是指从环境状 态到行为映射的学习,以使系统行为从环境 中获得的累积奖励值最大;

学习过程:Agent 选择一个动作a作用于环境,环境接收该动作后发生变 化,同时产生一个强化信号(奖或罚)反馈给Agent,Agent再根据强化信 号和环境的当前状态s 再选择下一个动作,选择的原则是使受到正的奖赏 值的概率增大。

考试时间比较紧,不是那么重要的就不写了;

十二、HMM隐马尔可夫模型

两个例子

摇骰子例题:
在这里插入图片描述
假设我们开始掷骰子,我们先从三个骰子里挑一个,挑到每一个骰子的概率都是1/3。然后我们掷骰子,得到一个数字,1,2,3,4,5,6,7,8中的一个。不停的重复上述过程,我们会得到一串数字,每个数字都是1,2,3,4,5,6,7,8中的一个。例如我们可能得到这么一串数字(掷骰子10次):1 6 3 5 2 7 3 5 2 4;

这串数字叫做可见状态链。但是在隐马尔可夫模型中,我们不仅仅有这么一串可见状态链,还有一串隐含状态链。在这个例子里,这串隐含状态链就是你用的骰子的序列。比如,隐含状态链有可能是:D6 D8 D8 D6 D4 D8 D6 D6 D4 D8

一般来说,HMM中说到的马尔可夫链其实是指隐含状态链,因为隐含状态(骰子)之间存在转换概率(transition probability)。在我们这个例子里,D6的下一个状态是D4,D6,D8的概率都是1/3。D4,D8的下一个状态是D4,D6,D8的转换概率也都一样是1/3;

在这里插入图片描述

12.1 简单问题

0.一个简单问题
其实这个问题实用价值不高。由于对下面较难的问题有帮助,所以先在这里提一下。
知道骰子有几种,每种骰子是什么,每次掷的都是什么骰子,根据掷骰子掷出的结果,求产生这个结果的概率
在这里插入图片描述

12.2 Viterbi 算法

1.看见不可见的,破解骰子序列
这里我说的是第一种解法,解最大似然路径问题。
举例来说,我知道我有三个骰子,六面骰,四面骰,八面骰。我也知道我掷了十次的结果(1 6 3 5 2 7 3 5 2 4),我不知道每次用了那种骰子,我想知道最有可能的骰子序列。

其实最简单而暴力的方法就是穷举所有可能的骰子序列,然后依照第零个问题的解法把每个序列对应的概率算出来。然后我们从里面把对应最大概率的序列挑出来就行了。如果马尔可夫链不长,当然可行。如果长的话,穷举的数量太大,就很难完成了。

另外一种很有名的算法叫做Viterbi algorithm. 要理解这个算法,我们先看几个简单的列子。
在这里插入图片描述
在这里插入图片描述
后面还有两个难的,不过没时间了:
参考文章:https://www.zhihu.com/question/20962240

例题二:
在这里插入图片描述
在这里插入图片描述

十三、八数码问题

介绍

八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。
 
要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。所谓问题的一个状态就是棋子在棋盘上的一种摆法。棋子移动后,状态就会发生改变。解八数码问题实际上就是找出从初始状态到达目标状态所经过的一系列中间过渡状态。

BFS

每次在将新的棋子移动到空格时都有四种状态,也就是将上下左右位置的棋子移到空格里,利用BFS很好解决,也就是将所有的状态都遍历一遍,直到得到目标状态,示意图如下:
在这里插入图片描述
我们用一个队列来表示需要遍历的状态,但是不是所有的状态都可以加入到队列中,因为在遍历状态的时候,可能存在很多状态重复,所以我们需要避免这些无用的判断,这里我是用哈希解决的,哈希冲突采用链表避免。

打印所有经过的状态,只需要用一个是数组保存它的父状态就可以了。

宽度优先搜索的优势在于当问题有解时,一定能找到解,当问题为单位耗散值,且当问题有解时,一定能找到最优解。在进行宽度优先搜索时需要创建一个队列以保存所有的待扩展节点,而不是像深度优先搜索那样只需要保存当前状态即可,这样就使BFS比DFS需要占用更多的空间,常常是指数级增长的,但由于BFS是按层次遍历的,一般来说能比DFS更快地找到解,因为它找到的第一个可行解一般来说都是最优解,而无需像DFS那样为了找到最优解而进行回溯,尽管如此,宽度优先还是很容易扩展那些没有用的节点,因此很容易造成状态的指数增长,甚至“组合爆炸”。

DFS

DFS相比BFS的话,可以说是一条道走到黑,例如说先不断优先判断从左边位置移棋子过来,再解决别的方向移棋子过来,防止搜索过程沿着无益的路径扩展下去,往往给出一个节点扩展的最大深度——深度界限,示意图如下:
在这里插入图片描述
与BFS不同的是数据结构采用了deque,因为方便控制最大深度。
在这里插入图片描述

A*算法

在BFS搜索算法中,如果能在搜索的每一步都利用估价函数f(n)=g(n)+h(n)对Open表(队列)中的节点进行排序,则该搜索算法为A算法。由于估价函数中带有问题自身的启发性信息,因此,A算法又称为启发式搜索算法。

f(n) = g(n) + h(n),其中g(n)为从初始节点到当前节点的步数(层数),h(n)为与目标棋盘不一致的节点数(含空格);

在这里插入图片描述
A*算法工作流程:红圈数字表示扩展顺序
在这里插入图片描述
参考文章:
7种方法求解八数码问题
利用BFS,DFS,A-解决八数码难题

  • 17
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里是一些简单的介绍: 1. SVM(支持向量机):SVM是一种基于统计学习理论的分类算法,主要目的是将数据分为两个类别。SVM的优点是可以处理高维数据,并且在处理小样本数据时表现优异。 2. LDA(线性判别分析):LDA是一种常用的分类算法,主要目的是将数据投影到低维空间中,以便更好地分离分类。LDA的优点是可以处理多分类问题,并且对于样本量较小的数据集表现良好。 3. LR(逻辑回归):LR是一种基于概率模型的分类算法,主要用于二分类问题。LR的优点是计算效率高、易于实现,并且能够处理线性可分和线性不可分的数据。 4. 贝叶斯分类器:贝叶斯分类器是一种基于贝叶斯定理的分类算法,主要用于处理多分类问题。贝叶斯分类器的优点是能够处理噪声、缺失数据和非线性可分的数据。 5. 神经网络神经网络是一种基于生物神经系统的分类算法,主要用于处理非线性问题。神经网络的优点是能够自适应地学习和处理数据,但是在处理大规模数据时计算成本较高。 6. K近邻算法:K近邻算法是一种基于距离度量的分类算法,主要用于处理多分类问题。K近邻算法的优点是易于实现,并且能够处理非线性可分和非平衡的数据。 7. 决策树决策树是一种基于树形结构的分类算法,主要用于处理多分类问题。决策树的优点是易于理解和解释,并且能够处理非线性可分和非平衡的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值