数学建模常用模型算法学习(部分)
神经网络(较好)
大量的数据,不需要模型,只需要输入和输出,黑箱处理,建议作为检验的办法,不过可以和其他方法进行组合或改进,可以拿来做评价和分类。
DNNs的监督学习
混沌序列预测(高大上)
适用于大数据预测,其难点在于时延和维数的计算。
数据包络(DEA)分析法(较好)
优化问题,对各省发展状况进行评判。
数据包络分析方法(DEA, Data Envelopment Analysis):
- 适用于多输出-多出入的有效性综合评价问题,在处理多输出-多输入的有效性评价方面具有绝对优势。
- DEA方法并不直接对数据进行综合,因此决策单元的最有效率指标与投入指标及产出指标值的量纲选取无关,应用DEA方法建立模型钱无须对数据进行无量纲化处理(当然也可以)。
- 无须任何权重假设,而已决策单元的输入参数出的实际数据求得最有权重,排除了很多主观因素,具有很强额客观性。
- DEA方法假定每个输入都关联到一个或者多个输出,且输入输出之间确实存在某种联系,但不必确定这种关系的显示表达式。
-
C
2
R
C^2R
C2R模型:
C 2 R 模 型 推 导 介 绍 C^2R模型推导介绍 C2R模型推导介绍- h j = ∑ r = 1 s u r y r j ∑ i = 1 s v i y i j , j = 1 , 2 , . . . , n h_j = \frac{\sum^{s}_{r=1}u_ry_{rj}}{\sum^{s}_{i=1}v_iy_{ij}}, j =1,2,...,n hj=∑i=1sviyij∑r=1suryrj,j=1,2,...,n
- 若 h h h = 1, 相对于其他,生产效率(产出比)最高
- 若 h h h < 1, 相对于其他,生产效率有待于提高
支持向量机(高大上)
支持向量机实现是通过某种事先选择的非线性映射(核函数)将输入向量映射到一个高维特征空间,在这个空间中构造最优分类超平面。主要用于分类。
假设农场主,圈养了一批羊群,但为预防狼群袭击羊群,你需要搭建一个篱笆来把羊群围起来。但是篱笆应该建在哪里呢?你很可能需要依据牛群和狼群的位置建立一个“分类器”,比较下图这几种不同的分类器,我们可以看到SVM完成了一个很完美的解决方案。
多元分析
1. 聚类分析
聚类分析是根据事物本身的特性研究个体分类的方法,原则是同一类中的个体有较大的相似性,不同类中的个体差异很大
2. 判别分析
判别分析是根据表明事物特点的变量值和它们所属的类,求出判别函数。根据判别函数对未知所属类别的事物进行分类的一种分析方法
判别分析一般步骤:
1. 已知分类的训练样本
2. 判别分析方法
3. 得到判别函数
4. 建立判别准则
5. 未知样品的判别归类
-
距离判别法
(1) 马氏距离
(2) 两个总体的距离判别法
(3) 多个总体的距离判别法 -
贝叶斯判别法
(1) 标准贝叶斯判别
(2) 考虑错判损失的贝叶斯判别
-
费歇尔判别法
基本思想:通过将多维数据投影到某一方向上,使得投影后类与类之间尽可能的分开,然后再选择合适的判别准则。费歇尔判别法就是要找一个由p个变量组成的线性函数,使得各类中点的函数值尽可能接近,而不同类之间的函数值尽可能的远离。 -
逐步判别法
基本思想:在判别问题中,当判别变量个数较多时,如果不加选择地一概采用来建立判别函数,不仅计算量大,还由于变量之间的相关性,可能使求解逆矩阵的计算精度下降,建立判别函数不稳定。因此适当地筛选变量的问题就成为一个很重要的事情。凡是具有筛选变量能力的判别分析法就统称为逐步判别法。
3 多维标度法(MDS)(一般)
多维标度法: 是一种在低维空间展示“距离”数据结构的多元数据分析技术,简称MDS
假如给一组城市,总能从地图上测出任何一对城市之间的距离。但如果只有若干城市的距离,如何确定这些城市之间的相对位置。假定知道只是哪两个城市最近,那两个城市次近等,是否还能确定它们之间的相对位置。
假定通过调查了解了10种饮料产品在消费者心中的相似程度,能否确定这些产品在这些产品的消费者心理空间种的相对位置。
已知上图美国十个城市之间的飞行距离,我们如何在平面坐标上标出这10个城市之间的相对位置,试着尽可能接近表中的距离数据呢。
主流聚类方法
1. 基于划分的方法
给定一个有N个元组或者纪录的数据集,分裂法将构造K个分组,每一个分组就代表一个聚类,K<N。
特点:计算量大。很适合发现中小规模的数据库中小规模的数据库中的球状簇。
(1) K-means算法
- 优点: 算法简单易实现,速度快;
- 缺点: 需要用户事先指定类簇个数; 聚类结果对初始类簇中心的选取较为敏感; 容易陷入局部最优; 只能发现球形类簇;对孤立点(噪声)很敏感。
- 算法基本步骤:
- 首先选好数据分成k类,随机初始化k个点作为中心点;
- 对于每个数据点,选取与之距离(闵可夫斯基距离, 欧氏距离, 曼哈顿距离)最近的中心点作为自己的类别;
- 当所有数据点都归类完后,调整中心点,把中心点重新设置为该类别中所有数据点的中心位置,每一轴都设为平均值;
- 重复上2 3 步骤,计算标准测度函数,之道达到最大迭代次数,则停止,否则,继续操作。
(2) K-medoids算法
- 优点: 不受极值影响;
- 缺点: 无法处理大数据。
- 算法基本步骤:
- 首先选好数据分成k类,随机初始化k个点作为中心点;
- 对于每个数据点,选取与之距离(闵可夫斯基距离, 欧氏距离, 曼哈顿距离)最近的中心点作为自己的类别
- 当所有数据点都归类完后,再对每个类 的所有点 计算其他所有点到这个点的距离和。将最小值点作为新的聚类中心点;
- 重复上2 3 步骤,计算标准测度函数,之道达到最大迭代次数,则停止,否则,继续操作。
(3) Clarans算法
-
优点: 能够处理大量数据(T级别);
-
缺点: 运行速度慢。
CLARA的有效性主要取决于样本的大小。如果任何一个最佳抽样中心点不在最佳的K个中心之中,则CLARA将永远不能找到数据集合的最佳聚类。同时这也是为了聚类效率做付出的代价。
CLARANS聚类则是将CLARA和PAM有效的结合起来,CLARANS在任何时候都不把自身局限于任何样本,CLARANS在搜素的每一步都以某种随机性选取样本。算法步骤如下(算法步骤摘自百度文库):
- 算法基本步骤:
-
输入参数 numlocal( 表示抽样的次数) 和 maxneighbor(表示一个节点可以与任意特定邻居进行比较的数目)。令:i=1,i用来表示已经选样的次数 mincost为最小代价,初始时设为大数。
-
设置当前节点 current 为 Gn 中的任意一个节点。
-
令 j =1。( j 用来表示已经与 current 进行比较的邻居的个数)
-
考虑当前点的一个随机的邻居S,并计算两个节点的代价差。
-
如果S的代价较低,则 current := S,转到步骤3。
-
否则,令 j=j+1。如果 j <= maxneighbor , 则转到步骤4。
-
否则 ,当 j>maxneighbor,当前节点为本次选样最小代价节点. 如果其代价小于 mincost,令mincost为当前节点的代价,bestnode为当前的节点。
-
令 i= i+1,如果 i > numlocal,输出 bestnode,运算中止.否则,转到步骤2。
-
2. 基于层次的方法
对给定的数据集进行层次似的分解,直到某种条件满足为止。具体又可分为“自底向上”和“自顶向下”两种方案。
特点:较小的计算开销。然而这种技术不能更正错误的决定。
(1) Birch算法
-
BIRCH算法的主要优点有:
-
节约内存,所有的样本都在磁盘上,CF Tree仅仅存了CF节点和对应的指针。
-
聚类速度快,只需要一遍扫描训练集就可以建立CF Tree,CF Tree的增删改都很快。
-
可以识别噪音点,还可以对数据集进行初步分类的预处理
-
-
BIRCH算法的主要缺点有:
-
由于CF Tree对每个节点的CF个数有限制,导致聚类的结果可能和真实的类别分布不同.
-
对高维特征的数据聚类效果不好。此时可以选择Mini Batch K-Means
-
如果数据集的分布簇不是类似于超球体,或者说不是凸的,则聚类效果不好。
-
BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)平衡迭代规约和聚类算法 比较适合于数据量大,类别数K也比较多的情况。它运行速度很快,只需要单遍扫描数据集就能进行聚类。
BIRCH算法利用了一个树结构来帮助我们快速的聚类,这个数结构类似于平衡B+树,一般将它称之为聚类特征树(Clustering Feature Tree,简称CF Tree)每个节点包括叶子节点都有若干个CF,而内部节点的CF有指向孩子节点的指针,所有的叶子节点用一个双向链表链接起来。
在聚类特征树中,一个聚类特征CF是这样定义的:每一个CF(Clustering Feature)是一个三元组,可以用(N,LS,SS)表示。其中N代表了这个CF中拥有的样本点的数量,这个好理解;LS代表了这个CF中拥有的样本点各特征维度的和向量,SS代表了这个CF中拥有的样本点各特征维度的平方和。举个例子如下图,在CF Tree中的某一个节点的某一个CF中,有下面5个样本(3,4), (2,6), (4,5), (4,7), (3,8)。
则它对应的
N
=
5
N=5
N=5
L
S
=
(
3
+
2
+
4
+
4
+
3
,
4
+
6
+
5
+
7
+
8
)
=
(
16
,
30
)
LS=(3+2+4+4+3 , 4+6+5+7+8)=(16, 30)
LS=(3+2+4+4+3,4+6+5+7+8)=(16,30)
S
S
=
(
3
2
+
2
2
+
4
2
+
4
2
+
3
2
+
4
2
+
6
2
+
5
2
+
7
2
+
8
2
)
=
(
54
+
190
)
=
244
SS =(3^2+2^2+4^2+4^2+3^2+4^2+6^2+5^2+7^2+8^2)=(54+190)=244
SS=(32+22+42+42+32+42+62+52+72+82)=(54+190)=244
CF有一个很好的性质,就是满足线性关系,
也就是
C
F
1
+
C
F
2
=
(
N
1
+
N
2
,
L
S
1
+
L
S
2
,
S
S
1
+
S
S
2
)
CF1+CF2=(N1+N2,LS1+LS2,SS1+SS2)
CF1+CF2=(N1+N2,LS1+LS2,SS1+SS2)
如果把这个性质放在CF Tree上,也就是说,在CF Tree中,对于每个父节点中的CF节点,它的(N,LS,SS)三元组的值等于这个CF节点所指向的所有子节点的三元组之和。如下图所示:
对于CF Tree,我们一般有几个重要参数,第一个参数是每个内部节点的最大CF数B,第二个参数是每个叶子节点的最大CF数L,第三个参数是针对叶子节点中某个CF中的样本点来说的,它是叶节点每个CF的最大样本半径阈值T,也就是说,在这个CF中的所有样本点一定要在半径小于T的一个超球体内。对于上图中的CF Tree,限定了B=7, L=5, 也就是说内部节点最多有7个CF,而叶子节点最多有5个CF。
算法过程:
1) 将所有的样本依次读入,在内存中建立一颗CF Tree, 建立的方法参考上一节。
2)(可选)将第一步建立的CF Tree进行筛选,去除一些异常CF节点,这些节点一般里面的样本点很少。对于一些超球体距离非常近的元组进行合并
3)(可选)利用其它的一些聚类算法比如K-Means对所有的CF元组进行聚类,得到一颗比较好的CF Tree.这一步的主要目的是消除由于样本读入顺序导致的不合理的树结构,以及一些由于节点CF个数限制导致的树结构分裂。
4)(可选)利用第三步生成的CF Tree的所有CF节点的质心,作为初始质心点,对所有的样本点按距离远近进行聚类。这样进一步减少了由于CF Tree的一些限制导致的聚类不合理的情况。
从上面可以看出,BIRCH算法的关键就是步骤1,也就是CF Tree的生成,其他步骤都是为了优化最后的聚类结果。
(2) Cure算法
(3) Chameleon算法
3. 基于密度的方法
只要一个区域中的点的密度大过某个阈值,就把它加到与之相近的聚类中去。
特点:能克服基于距离的算法只能发现“类圆形”的聚类的缺点。
(1) Dbscan算法
Dbscan聚类算法可视化
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)具有噪声的基于密度的聚类方法
-
优点:
- 聚类速度快且能够有效处理噪声点和发现任意形状的空间聚类;
- 与K-MEANS比较起来,不需要输入要划分的聚类个数;
- 聚类簇的形状没有偏倚;
- 可以在需要时输入过滤噪声的参数。
-
缺点:
- 当数据量增大时,要求较大的内存支持I/O消耗也很大;
- 当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差,因为这种情况下参数MinPts和Eps选取困难;
- 算法聚类效果依赖与距离公式选取,实际应用中常用欧式距离,对于高维数据,存在“维数灾难”。
一般将数据点分以下三类:
-
核心点: 在半径Eps内含有超过MinPts数目的点
-
边界点: 在半径Eps内点的数量小于MinPts,但是落在核心点的领域内
-
噪音点: 既不是核心点也不是边界点的点
这里有两个量,一个是半径Eps,另一个是指定的数目MinPts: -
Eps领域: 简单来讲就是与点p的距离小于Eps的所有的点的集合,可以表示为 N E p s ( p ) N_{Eps}(p) NEps(p)
-
直接密度可达:如果点p在核心对象q的Eps领域内,则称对象q出发是直接密度可达的。
-
密度可达:对于对象链: p 1 , p 2 , . . . , p n , p n + 1 p_1,p_2,...,p_n,p_{n+1} p1,p2,...,pn,pn+1是从 p s p_s ps关于Eps和MinPts直接密度可达的,则对象 p n p_n pn是从对象 p 1 p_1 p1关于Eps和MinPts密度可达的。
常用的评估方法:轮廓系数(Sihouette Coefficient):
计算样本i到同簇其它样本到平均距离
a
i
a_i
ai。
a
i
a_i
ai越小,说明样本i越应该被聚类到该簇(将
a
i
a_i
ai称为样本i到簇内不相似度)。
计算样本
i
i
i到其它某簇
C
j
C_j
Cj的所有样本的平均距离
b
i
j
b_{ij}
bij,称为样本
i
i
i与簇
C
j
C_j
Cj的不相似度。定义为样本i的簇间不相似度:
b
i
=
m
i
n
(
b
i
1
,
b
i
2
,
.
.
.
,
b
i
k
)
b_i=min(b_{i_1},b_{i_2},...,b_{i_k})
bi=min(bi1,bi2,...,bik)
- S i S_i Si接近1,则说明样本 i i i聚类合理
- S i S_i Si接近-1, 则说明样本 i i i更应该分类到另外的簇
- S I S_I SI近似为0, 则说明样本 i i i在两个簇的边界上
(2) Optics算法
OPTICS(Ordering Point To Identify the Cluster Structure),它可视为DBSCAN算法的一种改进算法。与DBSCAN算法相比,OPTICS算法的改进主要在于对输入参数不敏感。
OPTICS算法不显示地生成数据聚类,它只是对数据对象集合中的对象进行排序,得到一个有序的对象列表,其中包含了足够的信息用来提取聚类。事实上,利用该有序的对象列表,还可以对数据的分布和关联作进一步分析。
(3) Denclue算法
4. 基于网格的方法
将数据空间划分成为有限个单元(cell)的网格结构,所有的处理都是以单个的单元为对象的。
特点:处理速度很快,通常这是与目标数据库中记录的个数无关的,只与把数据空间分为多少个单元有关。
(1) Sting算法
(2) Clique算法
(3) Wave-Cluster算法
Wave-Cluster方法的主要思想是把多维数据看作一个多维信号来处理。它首先将数据空间划分成网格结构,然后通过小波变换将数据空间变换成频域空间,在频域空间通过与一个核函数作卷积后,数据的自然聚类属性就显现出来。Wave-Cluster方法是一个多分辨率的算法,高分辨率可以获得细节的信息,低分辨率可以获得轮廓信息。方法的时间复杂度是D(疗),其中疗是数据库中对象的个数。
关联与因果
1. pearson、spearman、kendall等级相关分析
三个相关性系数(pearson, spearman, kendall)反应的都是两个变量之间变化趋势的方向以及程度,其值范围为-1到+1,0表示两个变量不相关,正值表示正相关,负值表示负相关,值越大表示相关性越强。
-
person correlation coefficient(皮尔森相关性系数)
皮尔森相关系数 = 它们之间的协方差 / 各自标准差的乘积缺点:对数据要求比较高;实验数据之间的差距不能太大,也就是说 皮尔森相关性系数受异常值的影响比较大。
-
spearman correlation coefficient(斯皮尔曼相关性系数)
斯皮尔曼相关性系数,通常也叫斯皮尔曼秩相关系数。“秩”,可以理解成就是一种顺序或者排序,那么它就是根据原始数据的排序位置进行求解,这种表征形式就没有了求皮尔森相关性系数时那些限制
不用管X和Y这两个变量具体的值到底差了多少,只需要算一下它们每个值所处的排列位置的差值,就可以求出相关性系数了
而且,即便在变量值没有变化的情况下,也不会出现像皮尔森系数那样分母为0而无法计算的情况。另外,即使出现异常值,由于异常值的秩次通常不会有明显的变化(比如过大或者过小,那要么排第一,要么排最后),所以对斯皮尔曼相关性系数的影响也非常小!
由于斯皮尔曼相关性系数没有那些数据条件要求,适用的范围就广多了。生物实验数据分析中,尤其是在分析多组学交叉的数据中说明不同组学数据之间的相关性时,使用的频率很高。
-
kendall correlation coefficient(肯德尔相关性系数)
肯德尔相关性系数,又称肯德尔秩相关系数,它也是一种秩相关系数,不过它所计算的对象是分类变量。分类变量可以理解成有类别的变量,可以分为
无序的,比如性别(男、女)、血型(A、B、O、AB);
有序的,比如肥胖等级(重度肥胖,中度肥胖、轻度肥胖、不肥胖)。
通常需要求相关性系数的都是有序分类变量。举个例子。比如评委对选手的评分(优、中、差等),我们想看两个(或者多个)评委对几位选手的评价标准是否一致;或者医院的尿糖化验报告,想检验各个医院对尿糖的化验结果是否一致,这时候就可以使用肯德尔相关性系数进行衡量。
详细计算案例
2. 典型相关分析
(例:因变量组Y1234,自变量组X1234,各自变量组相关性比较强,问哪一个因变量与哪一个自变量关系比较紧密?)
典型相关分析的基本思想 Canonical Correlation Analysis
- 通常用来研究多个变量之间的相关关系
首先,CCA研究的是两组变量 X = ( x 1 , x 2 , . . . , x n ) X=(x_1,x_2,...,x_n) X=(x1,x2,...,xn)和 Y = ( y 1 , y 2 , . . . , y n ) Y=(y_1,y_2,...,y_n) Y=(y1,y2,...,yn)之间的相关关系。通常相关系数衡量,如下公式:
ρ x y = C o v ( X , Y ) V a r ( X ) V a r ( Y ) \rho_{xy}=\frac{Cov(X,Y)}{\sqrt{Var(X)}\sqrt{Var(Y)}} ρxy=Var(X)Var(Y)Cov(X,Y)
通过找到任意非零向量 α = ( α 1 , α 2 , . . . , α n ) \alpha=(\alpha_1,\alpha_2,...,\alpha_n) α=(α1,α2,...,αn)和 β = ( β 1 , β 2 , . . . , β m ) \beta =(\beta_1,\beta_2,...,\beta_m) β=(β1,β2,...,βm)将两组变量线性组合,得:
U
=
α
1
X
1
+
α
2
X
2
+
.
.
.
+
α
n
X
n
=
α
‘
X
U=\alpha_1X_1+\alpha_2X_2+...+\alpha_nX_n=\alpha^`X
U=α1X1+α2X2+...+αnXn=α‘X
V
=
β
1
Y
1
+
β
2
Y
2
+
.
.
.
+
β
m
Y
m
=
β
‘
Y
V =\beta_1Y_1+\beta_2Y_2+...+\beta_mY_m=\beta^`Y
V=β1Y1+β2Y2+...+βmYm=β‘Y
这样,CCA将研究X和Y的相关问题转换为研究U和V的相关问题,只需要找到 α \alpha α和 β \beta β使得U和V的相关系数最大即可。