AI基本概念
一、算法复杂度
1. 归并排序
A=[3,4,1,6,7,2,5,9] # 将A划分成两个数组B、C
B,C=[3,4,1,6],[7,2,5,9] # 总体时间复杂度=两个递归运算时间复杂度相加(递归时间复杂度):T(n)=T(n/2)+T(n/2)
B,C=[1,3,4,6],[2,5,7,9] # 再对B、C进行排序。
res=[1,2,3,4,5,6,7,9] # 再将B、C分别取出逐一对比大小,按照由小到大排序。每确定一个元素对比一次,n个元素需要对比n次。所以总的时间复杂度:T(n)=T(n/2)+T(n/2)+n
# 如果划分成3堆,在最后对比时候,每确定一个元素需要对比2次,T(n)=T(n/3)+T(n/3)+T(n/3)+2n
递归时间复杂度主定理分析:
T
(
n
)
=
a
T
(
n
/
b
)
+
f
(
n
)
T(n)=aT(n/b)+f(n)
T(n)=aT(n/b)+f(n),可以从以下角度考虑:
(
1
)
i
f
n
l
o
g
b
a
>
f
(
n
)
→
时
间
复
杂
度
=
O
(
n
l
o
g
b
a
)
(
2
)
i
f
n
l
o
g
b
a
=
f
(
n
)
先
不
考
虑
l
o
g
n
的
部
分
f
(
n
)
=
n
l
o
g
b
a
l
o
g
k
n
→
时
间
复
杂
度
=
O
(
n
l
o
g
b
a
l
o
g
k
+
1
n
)
(
3
)
i
f
n
l
o
g
b
a
<
f
(
n
)
→
时
间
复
杂
度
=
f
(
n
)
(1)if\quad n^{log_ba}>f(n)\quad →\quad 时间复杂度=O(n^{log_ba})\\ (2)if\quad n^{log_ba}=f(n)先不考虑logn的部分\quad f(n)=n^{log_ba}log^kn\quad →\quad 时间复杂度=O(n^{log_ba}log^{k+1}n)\\ (3)if\quad n^{log_ba}<f(n)\quad →\quad 时间复杂度=f(n)\\
(1)ifnlogba>f(n)→时间复杂度=O(nlogba)(2)ifnlogba=f(n)先不考虑logn的部分f(n)=nlogbalogkn→时间复杂度=O(nlogbalogk+1n)(3)ifnlogba<f(n)→时间复杂度=f(n)
以上面归并排序为例:
T
(
n
)
=
2
T
(
n
/
2
)
+
n
T(n)=2T(n/2)+n
T(n)=2T(n/2)+n,其中a=2划分为2个子问题,b=2每个子问题数据为原来的一半,f(n)=n最后再遍历一遍进行合并。
n l o g b a = n l o g 2 2 = n = f ( n ) 并 且 f ( n ) = n = n ∗ l o g 0 n 所 以 k = 0 n^{log_ba}=n^{log_22}=n=f(n)\quad 并且f(n)=n=n*log^0n\quad 所以k=0 nlogba=nlog22=n=f(n)并且f(n)=n=n∗log0n所以k=0,
所以归并排序时间复杂度为 = O ( n l o g b a l o g k + 1 n ) = O ( n ∗ l o g n ) =O(n^{log_ba}log^{k+1}n)=O(n*logn) =O(nlogbalogk+1n)=O(n∗logn)
2. 斐波那契数列时间复杂度
运用递归树的思想:因为递归会重复的计算树节点值,所以时间复杂度= O ( 2 n ) O(2^n) O(2n)
斐波那契空间复杂度:操作系统会进行上下文切换,最多只会用到n的内存空间,所以空间复杂度为O(n)。
3. 动态规划(DP)优化斐波拉契
递归是自顶向下求解,动态规划自底向上求解。动态规划DP核心是:将大问题转化为同类型小问题来求解,并存储子问题的解,避免重复计算子问题,最终通过子问题的解得到原问题的解。降低复杂度,目标仍然是全局最优解,相当于能看到全局最优解。
动态规划算法基本要素:最优子结构性质、重叠子问题。(1)最优子结构性质:问题的最优解包含着它的子问题的最优解。(2)重叠子问题:用递归算法自顶向下解时,每次产生的子问题并不总是新问题,有些问题被反复计算多次。
# 利用列表将前面的值存储下来,不用每次都去求一次前面两个值,减少了计算量,优化了时间复杂度。
# 时间复杂度为:O(n),空间复杂度为:O(n)
import numpy as np
def fib(n):
fiblist=np.zeros(n)
fiblist[0]=1
fiblist[0]=1
for i in range(2,n):
fiblist[i]=fiblist[i-2]+fiblist[i-1]
return fiblist[n-1]
# 时间复杂度为:O(n),空间复杂度为:O(1)
def fib(n):
a,b=1,1
c=0
for i in range(2,n):
c=a+b
a,b=b,c
return c
4. P和NPHard问题
任何一个问题根据时间复杂度的不同都能分成:指数级复杂度( O ( p n ) O(p^n) O(pn))、多项式复杂度两个大类( O ( n p ) O(n^p) O(np))。多项式复杂度问题是能够解决的问题(P问题),指数级复杂度问题是不可以解决的问题(NPHard问题)。对于指数级复杂度问题可以通过三个方法进行解决:(1)对于小型的问题,可以直接采用指数级复杂度方法进行求解。(2)运用Approximate Algorithm(近似算法)进行求解,但是不保证获得精确结果。(3)利用量子计算机进行求解。
Approximate Algorithm(近似算法)步骤:①指出近似算法。②指出算法时间复杂度。③给出近似算法最后解离我们想要的最优解的距离。
二、建模基础
选择模型就是确定目标函数,训练模型就是优化目标函数。
1. 模型分类
有监督模型:逻辑回归、朴素贝叶斯、SVM、随机森林、神经网络等。
无监督模型:K-means聚类、PCA降维、ICA降维、MF矩阵分解、LSA潜在语义分析、LDA主题模型等。
生成式模型(P(x,y)):生成模型就是生成样本。生成模型是根据山羊的特征首先学习出一个山羊特征模型,然后根据绵羊的特征学习出一个绵羊特征模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。
判别式模型(P(y|x)):判别模型是从历史数据中学习到区别模型,然后提取样本的特征通过区别模型来预测出这是山羊的概率、绵羊的概率。
判别式模型是根据一只羊的特征可以直接给出这只羊的概率(比如logistic regression,这概率大于0.5时则为正例,否则为反例),而生成式模型是要都试一试,最大的概率的那个就是最后结果。
四个样本如下:
样本1 | 样本2 | 样本3 | 样本4 | |
---|---|---|---|---|
X | 0 | 0 | 1 | 1 |
Y | 0 | 0 | 0 | 1 |
生成模型:联合概率P(X,Y)
Y=0 | Y=1 | |
---|---|---|
X=0 | 1 2 \frac{1}{2} 21 | 0 |
X=1 | 1 4 \frac{1}{4} 41 | 1 4 \frac{1}{4} 41 |
判别模型:条件概率P(Y|X)
Y=0 | Y=1 | |
---|---|---|
X=0 | 1 | 0 |
X=1 | 1 2 \frac{1}{2} 21 | 1 2 \frac{1}{2} 21 |
2. 特征选择
Forward Stepwise
Forward Stepwise利用了贪心算法,得到的是局部最优解。生成一个空的最优特征集合,然后遍历每个特征,选出准确率最高的一个特征f2加入到最优特征集合中。再在f1的基础上,遍历剩下的特征,分别与特征集合里面的特征进行组合,选出准确率最高的组合f2f4,如果这个组合准确率高于f2单独的准确率,就加入最优特征集合中。当f2f4f1特征组合是剩下的特征中最优特征组合时,如果准确率低于前面f2f4的特征组合,就停止寻找。最优特征组合就是f2f4。
Backward Stepwise
跟fs相反的方向,先生成一个全集的最优特征集合计算准确率acc1,然后遍历每个特征分别删除后计算组合的准确率,选出准确率最高的一个特征组合,如果这个组合准确率高于acc1,那么这个组合就是最优特征组合,再进行循环筛选。直到删除后最优特征组合准确率低于前一轮准确率了,就停止循环,前一轮就是最优特征组合。
3. 目标函数
任何一个目标函数都能写成以下形式:在一定条件下的目标函数。
M
i
n
i
m
i
z
e
f
0
(
x
)
s
.
t
.
f
i
(
x
)
<
=
0
,
i
=
1
,
.
.
.
k
g
i
(
x
)
<
=
0
,
j
=
1
,
.
.
.
k
Minimize\quad f_0(x)\\ s.t.\quad f_i(x)<=0,i={1,...k}\\ \quad g_i(x)<=0,j={1,...k}\\
Minimizef0(x)s.t.fi(x)<=0,i=1,...kgi(x)<=0,j=1,...k
模型和目标函数
模型是一个抽象的概率,将模型实例化后最后要给定目标函数,再将目标函数进行优化。
最大似然MLE
最大似然值只有在样本足够大的时候才成立,当样本数量很少的时候值会偏差很大。既然事情已经发生了,为什么不让这个出现的结果的可能性最大呢?这也就是最大似然估计的核心。
(1)极大似然估计中采样产生的样本需要满足一个重要假设,所有采样的样本都是独立同分布的;
(2)极大似然估计是在模型已定,参数未知的情况下,估计模型中的具体参数;
(3)极大似然估计的核心是让产生所采样的样本出现的概率最大。即利用已知的样本结果信息,反推具有最大可能导致这些样本结果出现的模型的参数值。
对于函数 P ( x ∣ θ ) P(x|\theta) P(x∣θ) 输入有两个:x表示某一个具体的样本数据, θ \theta θ表示模型的参数。如果 θ \theta θ是已知确定的,x是变量,这个函数叫做概率函数,它描述对于不同的样本点x出现概率是多少。如果x是已知确定的, θ \theta θ是变量,这个函数叫做似然函数,它描述对于不同的模型参数,出现x这个样本点的概率是多少。
一个罐子里面有黑白两种颜色的球,我们想知道罐中白球和黑球的比例。现在我们有放回的拿出一个球,记录球的颜色,用记录的球的颜色来估计罐中黑白球的比例。假如在前100次记录中,有70次是白球,请问白球所占的比例最有可能是多少?白球占比为70%,其背后的理论支撑就是最大似然函数。
相当于通过模型生成出来了样本
x
1
,
x
2
,
x
3
.
.
.
x
100
x_1,x_2,x_3...x_{100}
x1,x2,x3...x100,而我们要求得这个模型,就相当于求这个模型生成的这些样本的最大概率值。相当于在模型驱动下产生了样本,我们求得样本最大化概率来求得模型。表达式如下:
P
(
样
本
结
果
∣
M
o
d
e
l
)
=
P
(
x
1
,
x
2
.
.
.
x
100
∣
M
)
=
P
(
x
1
∣
M
)
P
(
x
2
∣
M
)
.
.
.
P
(
x
100
∣
M
)
=
p
70
(
1
−
p
)
30
P(样本结果|Model)= P(x_1,x_2...x_{100}|M)= P(x_1|M)P(x_2|M)...P(x_{100}|M)=p^{70}(1-p)^{30}
P(样本结果∣Model)=P(x1,x2...x100∣M)=P(x1∣M)P(x2∣M)...P(x100∣M)=p70(1−p)30
采取的方法是让这个样本结果出现的可能性最大,也就是使得
p
70
(
1
−
p
)
30
p^{70}(1-p)^{30}
p70(1−p)30值最大,那么我们就可以看成是p的方程,求导即可!
极大似然估计只有在样本值足够大时准确,就是利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值!**极大似然估计中采样需满足一个重要的假设,就是所有的采样都是独立同分布。**样本太多,无法得出分布的参数值,可以采样小样本后,利用极大似然估计获取假设中分布的参数值。
MLE与MAP关系
MAP适用于样本量少的时候,样本量大的时候用MLE。先验概率等同于加了一个正则项,正态分布的先验等同于L2正则,拉普拉斯的先验等同于L1正则。
M
A
P
(
后
验
概
率
估
计
)
=
M
L
E
∗
P
(
θ
)
−
−
−
−
》
P
(
θ
)
为
先
验
概
率
MAP(后验概率估计)=MLE * P(θ)----》P(θ)为先验概率
MAP(后验概率估计)=MLE∗P(θ)−−−−》P(θ)为先验概率
4. 优化目标种类识别
优化目标的种类有:
Least Squares Problem(最小二乘问题),Linear programming(LP线性规划问题),Quadratic Programming(QP二次规划问题),Semi-Definite Programming(SDP半正定规划),Integer programming(整数规划)。
先定义问题,将问题抽象为数学问题,然后将数学问题表示出来,判定数学问题类型,根据类型进行问题优化。
步
骤
如
下
:
问
题
—
—
》
数
学
表
示
—
—
》
类
型
—
—
》
优
化
步骤如下:问题——》数学表示——》类型——》优化
步骤如下:问题——》数学表示——》类型——》优化
1.smooth or non-smooth 2.convex or non-convex 3.continues or discrete 4.constraint or non-constraint
(1)(smooth or non-smooth)是否为平滑函数。(2)(convex or non-convex)是否能找到全局最优解(凸函数为全局最优,非凸函数为局部最优)。(3)(continues or discrete)定义域是连续函数问题还是离散(Integer)函数问题(连续的可以通过梯度求解,离散的通过转化为近似问题来求解,近似不能保证为全局最优解。求参数w一般为连续性向量,集合覆盖为离散问题)。(4)(constraint or non-constraint)除目标函数外是否有其他约束条件。
遇到离散定义域(Integer)问题可以将其转化为连续区间,然后进行区间映射来近似化求解。
凸函数与非凸函数
convex or non-convex:凸函数的前提是:定义域为凸集。凸函数、凹函数都能互相转化。
凸函数:定义域为凸集,并且函数定义域上任意取两点x、y,再两点之间的任意一点m,其f(m)一定小于等于以x,y为直线的方程g(m)的值。
函数的二阶导数值大于等于0,或者二阶求导后矩阵为半正定矩阵,则为凸函数。多个凸函数相加也为凸函数。
5. 优化算法
常见三种优化算法
(1)求极值法。(2)梯度下降法(一阶偏导数)。(3)牛顿法(二阶偏导数)。
梯度下降
凸优化问题:可以通过函数上任意连线上面的值都在函数内部,来判断是否是凸函数。凸函数能找到全局最优解,非凸函数可以找到局部最优解。
总
样
本
误
差
:
l
o
s
s
=
Σ
(
y
p
r
e
d
−
y
)
2
2
=
Σ
(
w
0
+
w
1
.
x
−
y
)
2
2
总样本误差:loss =\frac{\Sigma(y_{pred} - y)^2}{2}= \frac{\Sigma(w_0 + w_1.x - y)^2}{2}
总样本误差:loss=2Σ(ypred−y)2=2Σ(w0+w1.x−y)2
损失函数就是总样本误差关于模型参数的函数,目标函数通过求偏导后,就化简为预测值与真实值(已知)的差。再通过所有样本梯度下降的向量和进行参数更新(每个样本点都会产生一个梯度向量,最优的结果是所有梯度向量的和)。梯度下降用来更新参数,目标函数可以转化为含参数的目标函数,通过对各个参数求偏导来优化参数值。
w
t
=
w
t
−
1
−
学
习
率
.
损
失
函
数
关
于
w
的
偏
导
数
w
t
=
w
t
−
1
−
η
.
∂
f
(
x
)
∂
w
w_t=w_{t-1}-学习率.损失函数关于w的偏导数\\ w_t=w_{t-1}-\eta .\frac{\partial f(x) }{\partial w}
wt=wt−1−学习率.损失函数关于w的偏导数wt=wt−1−η.∂w∂f(x)
梯度下降法求最优解:
Coordinate Descent
用于Lasso算法会收敛,效果较好。
拉格朗日条件处理
等号条件:对于有限制条件的优化,等号条件就直接将限制条件 λ ( x 2 + y 2 − 1 ) λ(x^2+y^2-1) λ(x2+y2−1)带入目标函数中,再计算极值。
不等号(小于等于0)条件:相当于条件换成了: λ h ( x ) = 0 , h ( x ) < = 0 λh(x)=0,h(x)<=0 λh(x)=0,h(x)<=0这个条件。
KKT条件
在等式条件与不等式条件中都有 λ > = 0 λ>=0 λ>=0,将等式与不等式条件都加到目标函数中,再形成三个新的约束条件,这三个条件合称KKT条件。
6. 正则项
正则可以用来减小参数值!!!过拟合的曲线对噪声点的容错率太低!!!
模型训练出来一个参数空间,最后模型会选择其中最优的参数组合作为模型参数。正则就是可以限制参数空间中选择参数时候的取值范围,从而选择值较小的参数。
我们要最小化目标函数,那么为了最小化这个新的代价函数,我们要让θ3和θ4尽可能小。因为,如果你在原有代价函数的基础上加上1000乘以θ3这一项 ,那么这个新的代价函数将变得很大,所以,当我们最小化这个新的代价函数时, 我们将使θ3 的值接近于0,同样θ4的值也接近于0,就像我们忽略了这两个值一样。如果我们做到这一点(θ3和θ4接近0),那么我们将得到一个近似的二次函数。
L1(
∣
∣
w
∣
∣
1
||w||_1
∣∣w∣∣1)与L2(
∣
∣
w
∣
∣
2
2
||w||_2^2
∣∣w∣∣22)范式的共同作用是使得w的值变得更小。L1会产生稀疏的解,可以用于选择最为重要的一部分变量特征(一小部分优秀的参数),将其余的参数变为0。L2会选择所有符合要求变量参数。有时候也可以将L1与L2一起使用。
L
1
范
式
:
∣
∣
w
∣
∣
1
=
∣
w
1
∣
+
∣
w
2
∣
+
∣
w
3
∣
.
.
.
+
∣
w
d
∣
L
2
范
式
:
∣
∣
w
∣
∣
2
2
=
w
1
2
+
w
2
2
+
w
3
2
.
.
.
+
w
d
2
L_1范式:||w||_1=|w_1|+|w_2|+|w_3|...+|w_d|\\ L_2范式:||w||_2^2=w_1^2+w_2^2+w_3^2...+w_d^2\\
L1范式:∣∣w∣∣1=∣w1∣+∣w2∣+∣w3∣...+∣wd∣L2范式:∣∣w∣∣22=w12+w22+w32...+wd2
7. 原问题与对偶问题
转换后可以减少计算复杂度。有的原问题可能会很复杂,很难优化求解。当转换为对偶问题的时候,可能会很简单就能优化求解。对偶问题得出来的最优解可能只是原问题的次最优解。
8. 条件随机场(CRF)
有向图模型:类似于条件概率,在前面时间发生情况下后面发生的概率。HMM、贝叶斯网络。
无向图:要考虑前后双重影响,条件随机场(CRF)。