人工智能基础笔记 · Part A 通识和传统机器学习

C1 一些通识

当代基本常识

监督学习 (supervised learning) : 数据有标签,识别。

非监督学习(unsupervised learning):聚类。

自监督学习(self-supervised learning):也是一种无监督学习,但是过程中存在循环和生成标签的行为。

GPT 老师评论 1.1 两者的区别

标签生成: 自监督学习通过转换原始数据或定义预测任务来自动生成标签,而普通无监督学习通常不涉及任何形式的标签生成。

学习目标: 自监督学习通常专注于学习可以转移到其他任务的特征表示,而普通无监督学习更多地集中在发现数据中的模式或结构。

应用领域: 自监督学习尤其在处理高维数据(如图像和文本)时表现出色,而普通无监督学习在诸如聚类、维度缩减等任务中更为常见。

具体而言,GPT 是一类单向的、通过上文进行的文本生成的模型,长于文本生成;而 BERT 是一类双向的、通过上下文进行文本理解的模型,长于文本预测(类似完形填空)。

涌现现象:随着模型规模的增大,整个模型会产生未遇见的性能和功能。GPT-3 参数 1750 亿,BERT-LARGE 仅有 3.4 亿。高下立现。

溯源

弱人工智能:能够在某一方面表现出智慧。Turing Test(Behave Intelligently)。

强人工智能:能够思考。Chinese Room Argument(process, MEMORY or REASONING ? )。

智能的特征:perception, action, reasoning, problem-solving, language, learning and adaptation, sociality, creativity.

Symbolic AI 符号智能

将问题转化为符号推理(GPS/深蓝)。问题求解 -> 专家系统 -> 知识工程。

Learning 学习

监督(train/validator/test)/ 非监督(clustering and associate rule mining)/ 强化(interacting with environment)

Some issues : overfit, bias/hypothsis, rubustness, CC, transparency.

Computational Swarm Intelligence 群体智能

核心特点是通过个体间的简单交互产生复杂的全局行为,这些个体通常遵循简单的规则并在没有集中控制的情况下行动。

特点:

  • 分布式和去中心化:计算群体智能的系统通常是分布式的,没有中央控制结构。
  • 简单个体,复杂行为:每个个体遵循简单的规则,但整个系统表现出复杂的行为。
  • 自组织:系统能够在没有外部干预的情况下自我组织。
  • 适应性和鲁棒性:系统能够适应环境的变化,并且对个体的故障和变化具有较高的容忍度。

应用领域

  • 优化问题:例如,蚁群优化算法(Ant Colony Optimization)和粒子群优化(Particle Swarm Optimization)用于求解路径规划、调度问题等。
  • 数据挖掘:群体智能算法可以用于聚类分析、特征选择等。
  • 机器人学:用于开发能够在复杂环境中自主协作的机器人群。

Connectionism 连接主义

似乎就是神经网络。暂时没看出区别。

Nouvelle AI 新 AI

通过模拟自然智能体(如动物和人类)的基本认知功能来发展人工智能系统。

Evolutionary Computation 进化算法

图模型。群体进化。Selection and Mutation,适者生存(能够产生后代)和突变。

C2 机器学习

Improve on Task with respect to Performance metric based on Experience.

通过经验来完成基于某项指标的任务的优化。所以机器学习能够解决的任务,可以分成三部分:Task, Performance and Experience。

Supervised Learning

可以看做是对人类认知(键值对)的一种压缩。A trade-off between costs of saving and computing。

\(f\) 是目标函数。监督学习的任务,就是对于一组键值对 \((x,f(x))\),求出一个假设 \(h\) 使得 \(h \approx f\)

因此问题就是求解这样一个 \(h\) :

  • 如何确定 \(h\) 的形式。

  • 如何优化 \(h\) 的参数和结构。

曲线拟合 Curve Fitting

奥卡姆剃刀原则(Occam's Razor) :没有必要增加更多假设的情况下,不应使解释过于复杂。

如果采用太复杂的曲线来拟合,会带来过拟合的问题。

决策树

是比较轻量级的模型,复杂度比较低,是一种通过树状结构来进行决策和预测的机器学习模型。

通常情况下,决策树会首先学习多个测试集的值对 \((\mathbf{x},y)\),其中 \(~\mathbf{x}\)\(~k\) 维向量,也被称为 \(~k\)决策\(~y\)\(\mathrm{~x}\) 对应的输出,也被称为决策的结果。当然,在此过程中的全部决策也可以被视为特征,因此决策树本质上可以认为是一种分类器。

决策树本身是有根树,边表示决策,结点表示决策结果。对于某个非叶子节点 \(~x\),其子结点集合往往可以写作 \(~son_x = f(x, A)\),其中 \(~A\) 为当前决策的依据,也即当前用于分类的特征。很显然,\(~A\) 决定了当前决策产生的子结点个数,也间接决定了整棵树的深度。因此,不难得出这样一个结论:对于一个 \(~k\) 重决策 \(\mathbf{~x} = {A_1,A_2,A_3,...,A_k}\)\(~A_i\) 的顺序可以决定树的结构,那么更合理地安排决策顺序便可以得到复杂度更低的决策树模型。另一方面,根据 \(~\)Ockham’s Razor 原则,更复杂的模型不仅会带来更大的时间和空间开销,也更容易受测试集的噪声影响,出现过拟合的情况。因此,决策树需要追求模型的简单和高效。

更简单的树模型,意味着决策树需要拥有更少的枝叶、更少的逻辑分支。而更少的逻辑分支则需要当前决策的决策结果尽量相似,也即需要决策结果具有更低的不确定性。

Idea: a good attribute splits the examples into subsets that are (ideally) "all positive" or "all negative".

信息容量(信息熵)

\[I(P(v_1),P(v_2),P(v_3),...,P(v_n)) = \sum _i -P(v_i) \log_2 P(v_i) \]

这个可以用来衡量信息的复杂程度或者不确定程度。假设决策树当前的决策只会导致 \(~\)positive 和 \(~\)negative 两种结果,那么:

\[I(\frac{p}{p+n}, \frac{n}{p+n}) = -\frac{p}{p+n} \log _2 \frac{p}{p+n}-\frac{n}{p+n} \log _2 \frac{n}{p+n} \]

而对于每个决策 \(A\),在决策之后假设会形成 \(k\) 种结果,也即当前有 \(k\) 个节点会通过当前决策生成子节点时,我们设

\[\mathrm{remainder} (A)=\sum_{i=1}^k \frac{p_i+n_i}{p+n} I\left(\frac{p_i}{p_i+n_i}, \frac{n_i}{p_i+n_i}\right) \]

那么我们就可以定义 \(~IG(x, A)\) 为当前决策点 \(~x\)\(~A\) 决策下的 \(~\)Information Gain。

\[IG(A)=I\left(\frac{p}{p+n}, \frac{n}{p+n}\right)- \mathrm{remainder} (A) \]

也即

\[IG(A)=I\left(\frac{p}{p+n}, \frac{n}{p+n}\right) - \sum_{i=1}^v \frac{p_i+n_i}{p+n} I\left(\frac{p_i}{p_i+n_i}, \frac{n_i}{p_i+n_i}\right) \]

其中 \(~p,n\) 分别表示当前决策的 \(~\)positive 结果数和 \(~\)negative 结果数,\(p_i,n_i\) 分别表示当前第 \(i\) 的子节点决策获得的 \(~\)positive 结果数和 \(~\)negative 结果数。根据上述定义不难看出,Information Gain 可以较好的刻画当前选择对总信息熵,即总信息不确定度的减少效果。因此,可以根据上述算法从根节点开始生成整棵树,每次选择 IG 值最大的决策 \(~A\) 执行即可完成理想建树。

例 1


那么结合以上两张图,我们可以计算出当前情况下两种情况的 IG:

\[IG(Patrons) = I(6,6) - \left(\frac{2}{2+4+6}\times I(0,2) + \frac{4}{2+4+6}\times I(4,0) + \frac{6}{2+4+6}\times I(2,4)\right) = 0.0541\\ IG(Type) = I(6,6) - \left(\frac{2}{2+4+6}\times I(1,1) + \frac{2}{2+4+6}\times I(1,1) + \frac{4}{2+4+6}\times I(2,2) + \frac{4}{2+4+6}\times I(2,2)\right) = 0 \]

所以前者更优。那么最后建出来的树就长下面这样。看起来是需要合并一些同类项的。

例 2

大概就是算了。总的结果熵是 $I_s = I(9,4) = 0.94 $ bits。第一次的不同决策的 IG 如下:

\[IG(s,outlook) = I_s - \left(\frac{5}{14}\times I(2,3) + \frac{4}{14}\times I(4,0) + \frac{5}{14}\times I(3,2)\right) = \\ IG(s,temperature) = I_s - \left(\frac{4}{14}\times I(2,2) + \frac{4}{14}\times I(3,1) + \frac{6}{14}\times I(4,2)\right) =\\ IG(s,humidity) = I_s - \left(\frac{7}{14}\times I(3,4) + \frac{7}{14}\times I(6,1)\right) =\\ IG(s,wind) = I_s - \left(\frac{8}{14}\times I(6,2) + \frac{6}{14}\times I(3,3) \right) =\\ \]

所以最后第一次应该选择 outlook。那么第二次的不同决策 IG 需要考虑第一次的影响。会发现,第一次决策的三个分支中,OverCast 这种情况全部是正例,所以可以合并、结束。而对于另外两种情况,则需要继续分开算:

晴天:

\[IG(s_{sunny},temperature) = I_s - \left(\frac{2}{5}\times I(2,0) + \frac{2}{5}\times I(1,1) + \frac{1}{5}\times I(1,0)\right) =\\ IG(s_{sunny},humidity) = I_s - \left(\frac{3}{5}\times I(3,0) + \frac{2}{5}\times I(0,2)\right) = \\ IG(s_{sunny},wind) = I_s - \left(\frac{2}{5}\times I(1,1) + \frac{3}{5}\times I(2,1)\right) =\\ \]

不难发现最终应该选择 humidity。而选择 humidity 后,这一条链上全部的 high 均为负例,normal 均为正例。

雨天

\[IG(s_{rain},temperature) = I_s - \left(\frac{3}{5}\times I(2,1) + \frac{2}{5}\times I(1,1)\right) =\\ IG(s_{rain},humidity) = I_s - \left(\frac{3}{5}\times I(2,1) + \frac{2}{5}\times I(2,0)\right) =\\ IG(s_{rain},wind) = I_s - \left(\frac{2}{5}\times I(2,0) + \frac{3}{5}\times I(0,3)\right) =\\ \]

不难发现最终应该选择 wind。而选择 wind 后,这一条链上全部的 strong 均为负例,weak 均为正例。所以最后的决策树长这样:

至于为什么不同的递归层中,算式的最前面都是 \(I_s\)——因为用什么减没有区别,大家反正都是一样的。所以这个地方就是走个形式,只看后面括号里谁的结果最小也是可以的。但也许考试的时候需要多写一些过程。

复杂度

大概是叶子节点编码为 1,非叶节点编码为 0,不同的决策采用 \(\log_21,\log_22,\log_23...\) 这种来记录。最终来核算整棵树的代价。

这个结果的算法就是 \(20 +\log_21+\log_22+\log_23.+\log_24 = 24.585\) bits。

但实际上,决策树可以通过特判一部分给定信息来简化最终的树结构,这些信息被称为噪音。假设要特判 \(k\) 条信息,那么这部分的开销就是

\[k\times \log_2 R \]

其中 \(R\) 是全部可能的决策,在打网球这个问题里就是 \(3\times 3\times 2\times 3 = 54\)

贝叶斯相关

基本贝叶斯理论

贝叶斯用在机器学习领域的话,可以理解为是在分析 \(h\) (假设)和 \(D\) (数据)之间的关系。我们希望求出使得 \(P(h|D)\) 最大的 \(h\),那么也就是在做这样一件事:

\[\begin{aligned} h_{M A P}=&\arg \min _h P(h \mid D) \\ =&\arg \max _h \frac{P(D \mid h) P(h)}{P(D)}\\=&\arg \max _h P(D \mid h) P(h)\end{aligned} \]

所谓的 MAP 就是 Maximum A Posterior (MAP) Criterion,最大后验准则。其中 \(P(h)\) 是先验概率(Prior Probability),可以认为是预先计算到的 \(h\) 的可能性;\(P(D\mid h)\) 是类条件概率(Class-conditional Probability),符号往往表示为 \(P(X∣C)\),其中 \(X\) 是特征或数据,\(C\) 是一个特定的类别,其意义是若知道某个观测属于类别 \(C\),那么这个观测具有特征
\(X\) 的可能性有多大。而我们所求的 \(P(h\mid D)\) 就是根据数据得出的后验概率(Posterior Probability)了,这也是我们需要的。

但如果从非数学建模的另一个角度来看,这个问题或许会变得更熟悉。试回想,监督学习最常见的应用是什么?是分类。所以我们就可以把这个问题中的假设 \(h\) 当做分的某一类,而 \(P(D\mid h)\) 就是在看某个数据 \(D\) 是否是这一类的概率。这样的思路就是朴素贝叶斯分类器 (Naïve Bayesian Classifiers,NBC)。因此,分开考虑 \(P(D \mid h)\)\(P(h)\)

  • \(P(h)\) :可以根据数据来估测(例如通过简单分析数据得出 \(P(h_1)=0.7,P(h_2)=0.3\)),或者默认不同的分类概率同等。这个地方就有很关键的一个小细节:朴素贝叶斯认为不同分类/特征彼此是独立的。

  • \(P(D\mid h)\):观测数据满足该假设的概率。在具有离散特征的问题中,算法会统计各种特征值组合在训练样本中出现的频率。

BBN,Bayesian Belief Networks

学名是贝叶斯信念网络,本质上是个 DAG。

理论基础是如果 \(x,y\) 独立,那么 \(P(x\mid y,z) = P(x \mid z)\) 。这个的意义是,我们可以成功把一张完全图转换成 DAG,也就是每个点只需要管自己的“祖先”,而不用考虑全部的点。而 BBN 解决的问题基本上如图所示,是多个变量之间的复杂关系。

所以基本上是在给每个事件分配一个结果,然后求某种局面的概率。

但事实上,不是所有变量的概率表都能被观测到,那么 BBN 的结构也并不是实际的结构。所以这个时候需要用最大似然估计的方法,找出使得数据集合 \(D\) 出现概率最大的概率表。所以这就可以转化成一个最优化问题。

Unsupervised Learning

根据相似性将数据划分成簇,有助于发现一些不显示的特征。 三个关键课题:

  • 如何衡量数据或簇之间的相似性?

  • 如何划分数据集?

  • 如何处理大数据、高维数据? (可扩展性)

K-means 算法

核心是使用簇内全部点的平均位置作为簇的位置。\(O(tkn), t\) 是 迭代次数。

  • Step1 . 从集合中随机选择 k 个点作为簇的初始均值向量。

  • Step2. 其他数据会被划分进距离最接近的簇。

  • Step3. 更新簇的均值向量。

  • Step4. 重复Step2-3,直到聚类稳定。

K-medoids 算法

整体思路跟 K-means 一样,但是簇的位置是要找簇里最靠近中心的点。鲁棒性显然强于 K-means,因为不会因为某一个或几个极端点(噪声点)而使得均值难绷。但是复杂度也更高,因为多了一步选“最近的点”的步骤。这玩意的主要实现是 PAM (Partitioning Around Medoids) 算法:

PAM 算法

步骤:

  • Step1, 随机选择 \(k\) 个 medoids,然后将剩下的 \(n-k\) 个点分配进初始的簇中。

  • Step2 对于每个簇,考虑簇中其他的非代表点 \(i\) 和当前代表点 \(h\)。计算替换成本 \(TC_{ih}\),即将 \(h\) 替换为 \(i\) 后的成本(簇中点距离和)变化。

  • Step3. 如果最小的 \(TC_{ih} < 0\),则用 \(i\) 替换 \(h\)。则执行替换。这意味着新的 medoid 提供了更好的簇中心。

  • Step4. 重复步骤 \(2~3\),直到最小的 \(TC_{ih} \geq 0\)

之后再去执行原来的 K-medoids 步骤 。

当然这玩意复杂度一看就是 \(O(n^2)\) 的。所以可以继续针对复杂度进行优化。

CLARA 和 CLARANS

一些奇怪的优化。都是近似算法。

  • CLARA

所做的优化是采样。通过在大数据中进行多次随机抽样,对每个抽样的样本使用 PAM ,再在每个样本聚类出的最佳中心点中寻找一个代价最小的聚类中心,将其作为当前的大数据样本的最佳聚类。这个的好处就是快,但是缺点显然是很难找出最优解。

  • CLARANS

所做的优化是随机。对于每个当前最优的簇代表点 \(h\),随机找到一些簇内的点 \(i\) 来判断是否更优。实现上大概就是设置两个阈值 maxIterneighborThreshold 。前者控制迭代次数,后者则是每次迭代、每个簇要进行比较的次数。

层次聚类算法 Hierarchical clustering

另一种视角。大通过簇之间的相似性度量来决定合并或者分裂。

  • 自下而上聚合
    • 首先将每个数据作为一个簇,然后将它们逐渐组合。
  • 自上而下分裂
    • 首先将整个集合作为一个簇,然后将它们逐渐分裂。

那么所谓的“相似度”,本质上还是先把问题转化到向量空间里,然后再用距离表达。那么这就可以分成几个不同的思路:

  • Single-Linkage algorithm : 距离 = 数据之间的最小距离。
  • Complete-Linkage algorithm : 距离 = 数据之间的最大距离。
  • Average-Linkage algorithm : 距离 = 数据之间的平均距离。
  • And So on...

BIRCH 算法

Balanced Iterative Reducing and Clustering using Hierarchies。用层次数据结构来平衡迭代减少和聚类。好吧这个名字感觉没看懂。

基本逻辑

某个簇的特征 (cluster feature, CF) 可以被用一个三元组来表示:

\[\rm \mathbf{C F}=(N, \overrightarrow{L S}, S S) \]

其中,\(\rm N\) 表示簇中的点数, \(\rm \overrightarrow{L S}\) 是簇中点的向量线性求和,\(\rm SS\) 是簇中点的平方和。

然后需要根据 \(\rm CF\) 值来构建一棵平衡树 ——CF 树。CF 树多层存储数据点的聚类特征,每个节点包含多个聚类特征和指向子节点的指针。树的大小(即分支因子和节点容量)可以调节,以适应内存限制。

工作流程

  • 首先,逐个读取数据点并插入 CF 树。如果当前数据点可以合并到现有的聚类特征中(基于给定阈值),则更新该聚类特征;否则,创建一个新的聚类特征。
  • 之后,如果 CF 树的大小超过了内存限制,则进行一次或多次扫描以减小树的大小。这可能涉及重建树或合并相似的节点。
  • 最后,在 CF 树上应用其他聚类算法(如 K-means)以获得最终的聚类结果。

特性

适用于处理大规模低维数据集,对噪声有一定抵抗力,且可以在内存使用和聚类精度之间取得平衡。

值得一提的是,CF 树只存储原始数据的特征信息,并不需要存储原始数据信息,内存开销上更优。并且由于平衡树支持插入,所以可以对流数据进行处理,不需要一开始就知道全部数据。因此,之所以选择平衡树,是因为平衡树可以告诉完成以下任务:

  • 维护特征(向量求和)。
  • 分裂和合并。这一点有助于动态平衡内存使用和聚类精度。
  • 插入新数据。

CURE 算法

Clustering Using REpresentatives。核心思想是使用一定数量的“分散的”点来代表一个簇。步骤如下:

  • 首先,随机选取一个样本,利用层次聚类算法把这个样本聚类,形成最初的簇 \(c_i,(i=1,2,…,n)\)
  • 之后,对于每个簇选取 \(k\) 个代表点。似乎直接随机就挺对的(或者可以选择边缘一点的点)\(a_1, a_2, a_3,...,a_k\)
  • 接下来,需要按照固定的比例 \(α\),如 \(0.2\),把每个样本点向簇的“质心”收缩,生成代表点 \(a_1', a_2', a_3',...,a_k'\)
  • 最后,重新扫描所有的数据,把每个数据放到最近的簇。对于某个点 \(p\),最近的簇可以如此计算:

\[c_{aim} = \mathrm{arg~} \min || p - a || \]

显然,当 \(α\) 趋于 \(0\) 时,所有代表点都汇聚到质心,算法退化为基于“质心”的聚类;当 \(α\) 趋于 \(1\) 时,“代表点”完全没有收缩,算法退化为基于“全连接”的聚类。

而 CURE 算法的优势在于对奇异结构的聚类效果好,也即能更好地处理非球形的簇,对噪声和异常值也更为鲁棒。最开始的随机采样则是一种加速手段。

变色龙算法 CHAMELEON

一般实际生活中的数据都是结构化数据。而变色龙算法的思路则是通过图论的方式来表达“相似”。

  • 首先,先根据某种判断方法判断“相似”数据。接着将数据转化成点,每个点和自己最相似的 \(k\) 个点相连。 在这一步里产生的图往往是稀疏的。
  • 然后,对图做 cut。最传统的方法是让割边的数目最小化,这样可以保持高度相似的点在同一个子图中。较少的边切割意味着更高的内部相似性。
  • 最后,如果图的 part 过多,则需要再去合并一些比较相似的 part,原因是要平衡聚类的局部和全局特性:不仅考虑子图内部的相似性(紧密程度和连接性),也要考虑子图间的相对接近度。这一步骤是变色龙算法的核心,因为它允许算法动态适应数据的不同特性,类似于变色龙根据环境改变颜色。

变色龙在需要识别复杂、不规则簇形状的数据集中表现出色。例如:

  • 高维数据分析。
  • 空间数据和地理信息系统(GIS)。空间数据分析中的数据点的分布可能非常不规则。
  • 社交网络分析。变色龙算法擅长识别社区结构,尤其是在网络结构复杂且动态变化的情况下。
  • 生物信息学和基因组学。
  • 市场细分。用来识别具有相似购买行为或偏好的消费者群体。

基于密度的聚类 Density-Based Clustering

之前的方法都是依据距离来聚类的,但事实上,如果遇到了图示情况,可能聚类效果会很差:

【老师是真的帅】

大概是说“不规则”的聚类。所以这种情况下应该使用基于密度的聚类

DBSCAN

步骤

Density Based Spatial Clustering of Applications with Noise。

这个算法的核心是两个参数 \(\varepsilon\)(Eps) 和 MaxPts,前者表示邻域的半径大小,后者表示一个邻域内点数目,即邻居的下界。那么一个点的邻居集合的定义为:

\[N_{\varepsilon}(p) ={q Є D | dist(p,q) \leq \varepsilon} \]

那么算法的步骤其实就类似于 dfs:我每次把我邻域里的点都加进来。DBSCAN 实际上将所有点分了类:

  • 核心点 (Core Points): 如果一个点的 \(ε\) 邻域内至少有 MinPts 个点,它就是核心点。
  • 边界点 (Border Points): 边界点在一个核心点的 \(ε\) 邻域内,但它自己的 \(ε\) 邻域内的点数少于 MinPts。
  • 离群点 (Outliers): 既不是核心点也不是边界点的点。

步骤如下:

  • 首先,随机选择一个未被标记为访问的点。
  • 之后,检查这个点的 \(ε\) 邻域内有多少点。
  • 如果该点的 \(ε\) 邻域内至少有 MinPts 个点,它被标记为核心点。否则,它被标记为离群点或边界点。
  • 若是核心点,算法则尝试扩展聚类。这意味着算法会查看核心点的所有邻近点,并将它们添加到聚类中,如果这些邻近点自己也是核心点,则继续扩展。
  • 重复进行,直到所有的点都被访问过。

正确性证明

依赖于三个理论(概念):

  • Directly Density-Reachable(直接密度可达)

    • 定义: 在 DBSCAN 算法中,如果点 A 在点 B 的 \(ε-\) 邻域内(即点 A 与点 B 的距离不超过 \(ε\)),并且点 B 有足够多的邻居点(至少 MinPts,包括 A),则称点 A 从点 B 直接密度可达。
    • 意义: 这个概念用于定义核心点和建立聚类。如果一个点是另一个点的直接密度可达,那么第二个点是一个核心点,并且两个点属于同一聚类。
  • Density-Reachable(密度可达)

    • 定义: 如果存在一个点的序列 \((p_1, p_2, ..., p_n)\),其中 \(p_1\) 是 A,\(p_n\) 是 B,且每个点 \(p_{i+1}\)\(p_i\) 直接密度可达,则称点 B 从点 A 密度可达。
    • 意义: 这个概念用于将聚类扩展到边界点。即使一个点不是核心点,只要它可以通过一系列核心点(直接或间接)密度可达,它就被包括在聚类中。
  • Density-Connected(密度连接)

    • 定义: 如果存在一个点 C,使得点 A 和点 B 都是从 C 密度可达的,那么称点 A 和点 B 是密度连接的。
    • 意义: 这个概念用于连接聚类内部的各个点。即使两个点不直接密度可达,它们仍然可以通过一个共同的“桥梁”点(核心点)相连。

以上三点共通确保了 DBSCAN 算法在处理各种数据集时的有效性和一致性。

算法名字里的“噪音”,指的是算法会忽略一些很孤立的数据点,它们甚至无法成为 cluster。

DENCLUE

DENsity-based CLUstEring。

参数量高,但是比 DBSCAN 快得多。

基本思想

核心思想是计算一个点的吸引力(Influence function)。这个函数大概是具有传播性和递减性,recursive and decreasing。

基于此,可以定义一个点的密度(Density function)。即全部点的影响力的对这个点的和。\(d(x) = \sum_y f(x,y)\)

Influence function 有很多种不同的求法。比如:

如此一来,DENCLUE 可以有两种产生不同形态的 cluster 的思路:

  • 中心定义的聚类(Center Defined Clusters):

    • 这种聚类形态基于密度吸引子(density attractors),即数据空间中 \(d(x)\) 的局部最大值点,密度吸引子处的值必须超过一个预定义的阈值。
    • 所有被密度吸引到给定密度吸引子的点都构成了一个聚类,被吸引到密度较小的局部最大值的点被认为是离群点。
    • 这样的话,聚类形态基本上呈现有限圆橡胶的情况。
  • 任意形状的聚类(Arbitrary-Shape Clusters):

    • 通过连续 \(\geq\) 某个密度阈值的路径连接起来的中心定义聚类。
    • 如果两个或多个中心定义的聚类之间存在这样的路径,它们可以合并成一个更大的聚类,从而形成任意形状的聚类。
    • 允许聚类超越传统的球形或椭圆形界限,适应更复杂和不规则的数据结构。

步骤

咕咕咕?

这地方课上被一带而过了,又是超立方体又是 B+ 树的,难绷。

针对时空的聚类方式 Grid-based Clustering Methods

STING

A STatistical INformation Grid Approach 。

大概是把空间区域切分成矩形单元。整个思想大概是汇总低级矩形单元的信息得到高级矩形单元的。有点像线段树,反正是在 merge。回答查询的时候也是使用自上而下的方法。

每次向下查询时,也就是从粗粒度到细粒度的过程中,会筛出很多没用的格子。

  • 优点:就是快。并且因为可以独立询问,所以并行性强。
  • 缺点:只有水平和竖直的分割,没有对角线,更没有更复杂的。

CLIQUE

CLustering In QUEst。

这个的大概思路是说,我从高维度观察数据的 cluster 不好观察,但如果从某个低纬度来观察可能就会比较容易成簇。下面这个图还挺直观的:

主要步骤

  • 首先,将每个维度划分为相同数量的单元(bins)或区间。这个划分是基于数据在每个维度上的分布。通常,这种划分是均匀的,但也可以根据数据的特性进行调整。

  • 然后,在每个维度上分别去识别密集单元。这一步似乎也可也使用别的算法,比如前面的几种密度聚类算法。

  • 之后可以通过组合不同维度上的密集单元来生成候选的聚类。这一步涉及到识别在多维空间中相邻的密集单元,并将它们组合为更大的聚类,或者说是生成“极大”聚类。

  • 最后需要进一步处理这些聚类,以识别和优化最终的聚类,包括合并相交的聚类或去除噪声,以及对聚类求最小覆盖。

优点

Obvious from GPT4。

  • 处理高维数据:CLIQUE 特别适合于高维数据集,因为它通过在不同维度上识别密集单元来发现聚类。
  • 无需指定聚类数量:与需要预先定义聚类数量的算法不同,CLIQUE 自动确定聚类的数量。
  • 子空间聚类:CLIQUE 能够识别仅在部分维度上密集的聚类,这对于高维数据中常见的子空间聚类特别有效。
  • 可扩展性:由于其基于网格的方法,CLIQUE 可以有效地应用于大规模数据集。

缺点

  • 网格划分的选择:网格划分的粒度(即每个维度的单元数量)对结果有显著影响,但这个选择往往是基于经验的。同时,你企图从低维度来窥探高维度的特征,这本身就会导致最后聚簇的精确度大幅下降。

  • 子空间聚类的复杂性:在高维数据中,可能存在大量的子空间组合,这使得算法的计算复杂性增加。

撒花,以上就是第一章和第二章的全部内容了。

posted @ 2023-12-05 11:11  皎月半洒花  阅读(16)  评论(0编辑  收藏  举报