数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
四、层次聚类
- 层次聚类
hierarchical clustering
试图在不同层次上对数据集进行划分,从而形成树形的聚类结构。
4.1 AGNES 算法
AGglomerative NESting:AGNES
是一种常用的采用自底向上聚合策略的层次聚类算法。AGNES
首先将数据集中的每个样本看作一个初始的聚类簇,然后在算法运行的每一步中,找出距离最近的两个聚类簇进行合并。合并过程不断重复,直到达到预设的聚类簇的个数。
这里的关键在于:如何计算聚类簇之间的距离?
由于每个簇就是一个集合,因此只需要采用关于集合的某个距离即可。给定聚类簇 $ MathJax-Element-463 $ , 有三种距离:
最小距离 : $ MathJax-Element-464 $ 。
最小距离由两个簇的最近样本决定。
最大距离 : $ MathJax-Element-465 $ 。
最大距离由两个簇的最远样本决定。
平均距离: $ MathJax-Element-466 $ 。
平均距离由两个簇的所有样本决定。
AGNES
算法可以采取上述任意一种距离:- 当
AGNES
算法的聚类簇距离采用 $ MathJax-Element-467 $ 时,称作单链接single-linkage
算法。 - 当
AGNES
算法的聚类簇距离采用 $ MathJax-Element-468 $ 时,称作全链接complete-linkage
算法。 - 当
AGNES
算法的聚类簇距离采用 $ MathJax-Element-469 $ 时,称作均链接average-linkage
算法 。
- 当
AGNES
算法:输入:
- 数据集 $ MathJax-Element-470 $
- 聚类簇距离度量函数 $ MathJax-Element-471 $
- 聚类簇数量 $ MathJax-Element-554 $
输出:簇划分 $ MathJax-Element-473 $
算法步骤:
初始化:将每个样本都作为一个簇
$ \mathbb C_i=\{\mathbf{\vec x}_i\} ,i=1,2,\cdots,N $迭代,终止条件为聚类簇的数量为 $ MathJax-Element-554 $ 。迭代过程为:
计算聚类簇之间的距离,找出距离最近的两个簇,将这两个簇合并。
每进行一次迭代,聚类簇的数量就减少一些。
AGNES
算法的优点:- 距离容易定义,使用限制较少。
- 可以发现聚类的层次关系。
AGNES
算法的缺点:- 计算复杂度较高。
- 算法容易聚成链状。
4.2 BIRCH 算法
BIRCH:Balanced Iterative Reducing and Clustering Using Hierarchies
算法通过聚类特征树CF Tree:Clustering Feature True
来执行层次聚类,适合于样本量较大、聚类类别数较大的场景。
4.2.1 聚类特征
聚类特征
CF
:每个CF
都是刻画一个簇的特征的三元组: $ MathJax-Element-475 $ 。其中:- $ MathJax-Element-476 $ :表示簇内样本数量的数量。
- $ MathJax-Element-477 $ :表示簇内样本的线性求和: $ MathJax-Element-478 $ ,其中 $ MathJax-Element-482 $ 为该
CF
对应的簇。 - $ MathJax-Element-480 $ :表示簇内样本的长度的平方和。 $ MathJax-Element-481 $ ,其中 $ MathJax-Element-482 $ 为该
CF
对应的簇。
根据
CF
的定义可知:如果CF1
和CF2
分别表示两个不相交的簇的特征,如果将这两个簇合并成一个大簇,则大簇的特征为: $ MathJax-Element-483 $ 。即:
CF
满足可加性。给定聚类特征
CF
,则可以统计出簇的一些统计量:- 簇心: $ MathJax-Element-484 $ 。
- 簇内数据点到簇心的平均距离(也称作簇的半径): $ MathJax-Element-485 $ 。
- 簇内两两数据点之间的平均距离(也称作簇的直径): $ MathJax-Element-486 $ 。
给定两个不相交的簇,其特征分别为 $ MathJax-Element-487 $ 和 $ MathJax-Element-488 $ 。
假设合并之后的簇为 $ MathJax-Element-489 $ ,其中 $ MathJax-Element-490 $ , $ MathJax-Element-491 $ , $ MathJax-Element-492 $ 。
可以通过下列的距离来度量
CF1
和CF2
的相异性:簇心欧氏距离
centroid Euclidian distance
: $ MathJax-Element-493 $ ,其中 $ MathJax-Element-494 $ 分别为各自的簇心。簇心曼哈顿距离
centroid Manhattan distance
: $ MathJax-Element-495 $ 。簇连通平均距离
$ d_2=\sqrt{\frac{\sum_{\mathbf{\vec x}_i \in \mathbb S_1}\sum_{\mathbf{\vec x}_j \in \mathbb S_2}||\mathbf{\vec x}_i -\mathbf{\vec x}_j||_2^2}{\text{num}_1\times \text{num}_2}} = \sqrt{\frac{\Sigma_{s,1}}{\text{num}_1}+\frac{\Sigma_{s,2}}{\text{num}_2}-2 \frac{\vec\Sigma_{l,1}^T\vec\Sigma_{l,2}}{\text{num}_1\times\text{num}_2 }} $average inter-cluster distance
:全连通平均距离
$ d_3=\sqrt{\frac{\sum_{\mathbf{\vec x}_i \in \mathbb S_3}\sum_{\mathbf{\vec x}_j \in \mathbb S_3}||\mathbf{\vec x}_i -\mathbf{\vec x}_j||_2^2}{(\text{num}_1+\text{num}_2)\times (\text{num}_1+\text{num}_2-1)}} \\ = \sqrt{\frac{2(\text{num}_1+\text{num}_2)(\Sigma_{s,1}+\Sigma_{s,2})-2||\vec\Sigma_{l,1}-\vec\Sigma_{l,2}||_2^2}{(\text{num}_1+\text{num}_2)\times (\text{num}_1+\text{num}_2-1)}} $average intra-cluster distance
:方差恶化距离
variance incress distance
: $ MathJax-Element-496 $ 。
4.2.2 CF 树
CF
树的结构类似于平衡B+
树 。树由三种结点构成:根结点、中间结点、叶结点。根结点、中间结点:由若干个聚类特征
CF
,以及这些CF
指向子结点的指针组成。叶结点:由若干个聚类特征
CF
组成。- 叶结点没有子结点,因此
CF
没有指向子结点的指针。 - 所有的叶结点通过双向链表连接起来。
- 在
BIRCH
算法结束时,叶结点的每个CF
对应的样本集就对应了一个簇。
- 叶结点没有子结点,因此
CF
树有三个关键参数:- 枝平衡因子 $ MathJax-Element-545 $ :非叶结点中,最多不能包含超过 $ MathJax-Element-545 $ 个
CF
。 - 叶平衡因子 $ MathJax-Element-546 $ :叶结点中,最多不能包含超过 $ MathJax-Element-546 $ 个
CF
。 - 空间阈值 $ MathJax-Element-547 $ :叶结点中,每个
CF
对应的子簇的大小(通过簇半径 $ MathJax-Element-502 $ 来描述)不能超过 $ MathJax-Element-547 $ 。
- 枝平衡因子 $ MathJax-Element-545 $ :非叶结点中,最多不能包含超过 $ MathJax-Element-545 $ 个
由于
CF
的可加性,所以CF
树中,每个父结点的CF
等于它所有子结点的所有CF
之和。CF
树的生成算法:输入:
- 样本集 $ MathJax-Element-544 $
- 枝平衡因子 $ MathJax-Element-545 $
- 叶平衡因子 $ MathJax-Element-546 $
- 空间阈值 $ MathJax-Element-547 $
输出:
CF
树算法步骤:
初始化:
CF
树的根结点为空。随机从样本集 $ MathJax-Element-548 $ 中选出一个样本,放入一个新的
CF
中,并将该CF
放入到根结点中。遍历 $ MathJax-Element-548 $ 中的样本,并向
CF
树中插入。迭代停止条件为:样本集 $ MathJax-Element-548 $ 中所有样本都插入到CF
树中。迭代过程如下:
随机从样本集 $ MathJax-Element-548 $ 中选出一个样本 $ MathJax-Element-523 $ ,从根结点向下寻找与 $ MathJax-Element-523 $ 距离最近的叶结点 $ MathJax-Element-531 $ ,和 $ MathJax-Element-531 $ 里与 $ MathJax-Element-523 $ 最近的 $ MathJax-Element-522 $ 。
如果 $ MathJax-Element-523 $ 加入到 $ MathJax-Element-522 $ 对应的簇中之后,该簇的簇半径 $ MathJax-Element-520 $ ,则将 $ MathJax-Element-523 $ 加入到 $ MathJax-Element-522 $ 对应的簇中,并更新路径上的所有
CF
。本次插入结束。否则,创建一个新的
CF
,将 $ MathJax-Element-523 $ 放入该CF
中,并将该CF
添加到叶结点 $ MathJax-Element-531 $ 中。如果 $ MathJax-Element-531 $ 的
CF
数量小于 $ MathJax-Element-546 $ ,则更新路径上的所有CF
。本次插入结束。否则,将叶结点 $ MathJax-Element-531 $ 分裂为两个新的叶结点 $ MathJax-Element-532 $ 。分裂方式为:
- 选择叶结点 $ MathJax-Element-531 $ 中距离最远的两个
CF
,分别作为 $ MathJax-Element-532 $ 中的首个CF
。 - 将叶结点 $ MathJax-Element-531 $ 中剩下的
CF
按照距离这两个CF
的远近,分别放置到 $ MathJax-Element-532 $ 中。
- 选择叶结点 $ MathJax-Element-531 $ 中距离最远的两个
依次向上检查父结点是否也需要分裂。如果需要,则按照和叶子结点分裂方式相同。
4.2.3 BIRCH 算法
BIRCH
算法的主要步骤是建立CF
树,除此之外还涉及到CF
树的瘦身、离群点的处理。BIRCH
需要对CF
树瘦身,有两个原因:- 将数据点插入到
CF
树的过程中,用于存储CF
树结点及其相关信息的内存有限,导致部分数据点生长形成的CF
树占满了内存。因此需要对CF
树瘦身,从而使得剩下的数据点也能插入到CF
树中。 CF
树生长完毕后,如果叶结点中的CF
对应的簇太小,则会影响后续聚类的速度和质量。
- 将数据点插入到
BIRCH
瘦身是在将 $ MathJax-Element-547 $ 增加的过程。算法会在内存中同时存放旧树 $ MathJax-Element-541 $ 和新树 $ MathJax-Element-542 $ ,初始时刻 $ MathJax-Element-542 $ 为空。- 算法同时处理 $ MathJax-Element-541 $ 和 $ MathJax-Element-542 $ ,将 $ MathJax-Element-541 $ 中的
CF
迁移到 $ MathJax-Element-540 $ 中。 - 在完成所有的
CF
迁移之后, $ MathJax-Element-541 $ 为空, $ MathJax-Element-542 $ 就是瘦身后的CF
树。
- 算法同时处理 $ MathJax-Element-541 $ 和 $ MathJax-Element-542 $ ,将 $ MathJax-Element-541 $ 中的
BIRCH
离群点的处理:在对
CF
瘦身之后,搜索所有叶结点中的所有子簇,寻找那些稀疏子簇,并将稀疏子簇放入待定区。稀疏子簇:簇内数据点的数量远远少于所有子簇的平均数据点的那些子簇。
将稀疏子簇放入待定区时,需要同步更新
CF
树上相关路径及结点。当 $ MathJax-Element-548 $ 中所有数据点都被插入之后,扫描待定区中的所有数据点(这些数据点就是候选的离群点),并尝试将其插入到
CF
树中。如果数据点无法插入到
CF
树中,则可以确定为真正的离群点。
BIRCH
算法:输入:
- 样本集 $ MathJax-Element-544 $
- 枝平衡因子 $ MathJax-Element-545 $
- 叶平衡因子 $ MathJax-Element-546 $
- 空间阈值 $ MathJax-Element-547 $
输出:
CF
树算法步骤:
建立
CF
树。(可选)对
CF
树瘦身、去除离群点,以及合并距离非常近的CF
。(可选)利用其它的一些聚类算法(如:
k-means
)对CF
树的所有叶结点中的CF
进行聚类,得到新的CF
树。这是为了消除由于样本读入顺序不同导致产生不合理的树结构。
这一步是对
CF
结构进行聚类。由于每个CF
对应一组样本,因此对CF
聚类就是对 $ MathJax-Element-548 $ 进行聚类。(可选)将上一步得到的、新的
CF
树的叶结点中每个簇的中心点作为簇心,对所有样本按照它距这些中心点的距离远近进行聚类。这是对上一步的结果进行精修。
BIRCH
算法优点:- 节省内存。所有样本都存放在磁盘上,内存中仅仅存放
CF
结构。 - 计算速度快。只需要扫描一遍就可以建立
CF
树。 - 可以识别噪声点。
- 节省内存。所有样本都存放在磁盘上,内存中仅仅存放
BIRCH
算法缺点:结果依赖于数据点的插入顺序。原本属于同一个簇的两个点可能由于插入顺序相差很远,从而导致分配到不同的簇中。
甚至同一个点在不同时刻插入,也会被分配到不同的簇中。
对非球状的簇聚类效果不好。这是因为簇直径 $ MathJax-Element-549 $ 和簇间距离的计算方法导致。
每个结点只能包含规定数目的子结点,最后聚类的簇可能和真实的簇差距很大。
BIRCH
可以不用指定聚类的类别数 $ MathJax-Element-554 $ 。- 如果不指定 $ MathJax-Element-554 $ ,则最终叶结点中
CF
的数量就是 $ MathJax-Element-554 $ 。 - 如果指定 $ MathJax-Element-554 $ ,则需要将叶结点按照距离远近进行合并,直到叶结点中
CF
数量等于 $ MathJax-Element-554 $ 。
- 如果不指定 $ MathJax-Element-554 $ ,则最终叶结点中
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论