机器学习11- unsupervised learning无监督学习
本文最后更新于12 天前,其中的信息可能已经过时,如有错误请留言

监督学习总结

适用问题:

监督学习可以认为是学习一个模型,使它能对给定的输入预测相应的输出。监督学习包括分类、标注、回归。本篇主要考虑前两者的学习方法。

分类问题是从实例的特征向量到类标记的预测问题,标注问题是从观测序列到标记序列(或状态序列)的预测问题。可以认为分类问题是标注问题的特殊情况。分类问题中可能的预测结果是二类或多类。而标注问题中可能的预测结果是所有的标记序列,其数目是指数级的。

感知机、k 近邻法、朴素贝叶斯法、决策树简单的分类方法(原始的感知机、支持向量机以及提升方法是针对二类分类的,可以将它们扩展到多类分类),模型直观、方法简单、实现容易。逻辑斯谛回归与最大熵模型、支持向量机、提升方法更复杂但更有效的分类方法,往往分类准确率更高。隐马尔可夫模型、条件随机场主要的标注方法。通常条件随机场的标注准确率更高。

隐马尔可夫模型、条件随机场是标注方法。EM 算法是含有隐变量的概率模型的一般学习算法,可以用于生成模型的无监督学习。

概率与非概率模型

分类问题与标注问题的预测模型都可以认为是表示从输入空间到输出空间的映射。它们可以写成条件概率分布\(P(Y|X)\)或决策函数\(Y = f(X)\)的形式。前者表示给定输入条件下输出的概率模型,后者表示输入到输出的非概率模型。有时,模型更直接地表示为概率模型,或者非概率模型;但有时模型兼有两种解释。

朴素贝叶斯法、隐马尔可夫模型是概率模型。感知机、k 近邻法、支持向量机、提升方法是非概率模型。而决策树、逻辑斯谛回归与最大熵模型、条件随机场既可以看作是概率模型,又可以看作是非概率模型

判别与生成模型

直接学习条件概率分布\(P(Y|X)\)或决策函数\(Y = f(X)\)的方法为判别方法,对应的模型是判别模型。感知机、k 近邻法、决策树、逻辑斯谛回归与最大熵模型、支持向量机、提升方法、条件随机场是判别方法。首先学习联合概率分布\(P(X,Y)\),从而求得条件概率分布\(P(Y|X)\)的方法是生成方法,对应的模型是生成模型。朴素贝叶斯法、隐马尔可夫模型是生成方法。图 12.1 给出部分模型之间的关系。

可以用无监督学习的方法学习生成模型。具体地,应用 EM 算法可以学习朴素贝叶斯模型以及隐马尔可夫模型。

特征空间

决策树是定义在一般的特征空间上的,可以含有连续变量或离散变量。感知机、支持向量机、k 近邻法的特征空间是欧氏空间(更一般地,是希尔伯特空间)。提升方法的模型是弱分类器的线性组合,弱分类器的特征空间就是提升方法模型的特征空间。

线性

感知机模型是线性模型,而逻辑斯谛回归与最大熵模型、条件随机场是对数线性模型。k近邻法、决策树、支持向量机(包含核函数)、提升方法使用的是非线性模型。

损失函数与正则化项

在二类分类的监督学习中,支持向量机、逻辑斯谛回归与最大熵模型、提升方法各自使用合页损失函数、逻辑斯谛损失函数、指数损失函数。3 种损失函数分别写为: \([1 – yf(x)]_{+} \quad (12.1)\) \(\log[1 + \exp(-yf(x))] \quad (12.2)\) \(\exp(-yf(x)) \quad (12.3)\)

这 3 种损失函数都是 0 – 1 损失函数的上界,具有相似的形状,如图 12.2 所示。所以,可以认为支持向量机、逻辑斯谛回归与最大熵模型、提升方法使用不同的代理损失函数(surrogate loss function)表示分类的损失

正则化项(Regularization Term) 是在机器学习模型的损失函数中额外加入的一项约束项用来惩罚模型的复杂度,防止模型“过度记住”训练数据的细节(包括噪声),从而防止过拟合(overfitting),强迫模型“学会总结规律”,提高模型的泛化能力。

学习的策略是优化正则化后的损失函数形式: \(Loss = \text{Empirical Loss} + \lambda \cdot \text{Regularization Term}\)
\(\min_{f \in H} \frac{1}{N} \sum_{i = 1}^{N} L(y_{i}, f(x_{i})) + \lambda J(f) \quad (12.4)\)

这里,第1项为经验风险(经验损失),第2项为正则化项,\(L(y,f(x))\)为损失函数,\(J(f)\)为模型的复杂度,\(\lambda\geq0\)为系数。

例如在线性回归中: \(\mathcal{L}(w) = \sum_{i = 1}^{n} (y_{i} – \hat{y}_{i})^{2} + \lambda \cdot \| w \|^{2}\) 其中:

  • \(\hat{y}_{i}\)是预测值,\(y_{i}\)是真实值;
  • \(\| w \|^{2}\)是模型参数的范数,表示复杂度;
  • \(\lambda\)是正则化系数,控制正则化项的强度。

支持向量机用\(L_2\)范数表示模型的复杂度。原始的逻辑斯谛回归与最大熵模型没有正则化项,可以给它们加上$L_2$范数正则化项。提升方法没有显式的正则化项,通常通过早停止(early stopping)的方法达到正则化的效果。

正则化方式数学形式名称特点
L2 正则化\(\| w \|_{2}^{2}=\sum w_{i}^{2}\)Ridge Regression惩罚参数的平方和,使权重小但不为零。
L1 正则能自动去除无关特征
L1 正则化( |w|\(\| w \|_{1}=\sum w_{i}\)w_iL2 正则能防止系数过大
Elastic Net\(\alpha \vert w \vert_{1}+(1 – \alpha)\vert w \vert_{2}^{2}\)混合正则化综合 L1 和 L2 优点

学习算法

统计学习的问题有了具体的形式以后,就变成了最优化问题。有时,最优化问题比较简单,解析解存在,最优解可以由公式简单计算。但在多数情况下,最优化问题没有解析解,需要用数值计算的方法或启发式的方法求解。

朴素贝叶斯法与隐马尔可夫模型的监督学习,最优解即极大似然估计值,可以由概率计算公式直接计算。

感知机、逻辑斯谛回归与最大熵模型、条件随机场的学习利用梯度下降法、拟牛顿法等。这些都是一般的无约束最优化问题的解法。

支持向量机学习,可以解凸二次规划的对偶问题。有序列最小最优化算法等方法。

无监督学习概念

无监督学习使用无标注数据\(U = \{x_1, x_2, \cdots, x_N\}\)学习或训练,其中\(x_i\),\(i = 1, 2, \cdots, N\),是样本(实例),由特征向量组成。

无监督学习得到的模型有函数\(z = g_{\theta}(x)\),条件概率分布\(P_{\theta}(z|x)\),或条件概率分布\(P_{\theta}(x|z)\)。其中\(x \in X\)是输入,表示样本;\(z \in Z\)是输出,表示对样本的分析结果,可以是类别、转换、概率;\(\theta\)是参数。

无监督学习的本质是学习数据中的统计规律或潜在结构,主要包括聚类、降维、概率估计

假设训练数据集由N个样本组成,每个样本是一个M维向量。训练数据可以由一个矩阵表示,每一行对应一个特征,每一列对应一个样本。
\[ X = \begin{bmatrix} x_{11} & \cdots & x_{1N} \\ \vdots & & \vdots \\ x_{M1} & \cdots & x_{MN} \end{bmatrix} \]

其中,\(x_{ij}\)是第j个向量的第i维;\(i = 1, 2, \cdots, M\);\(j = 1, 2, \cdots, N\)。

无监督学习是一个困难的任务,因为数据没有标注,也就是没有人的指导,机器需要自己从数据中找出规律。模型的输入x在数据中可以观测,而输出z隐藏在数据中,因此通常需要大量的数据,才能发现数据隐藏规律的发现需要足够的观测。

无监督学习的基本想法是对给定数据(矩阵数据)进行某种 “压缩”,从而找到数据的潜在结构。假定损失最小的压缩得到的结果就是最本质的结构。图 13.1 是这种想法的一个示意图。可以考虑发掘数据的纵向结构,把相似的样本聚到同类,即对数据进行聚类。还可以考虑发掘数据的横向结构,把高维空间的向量转换为低维空间的向量,即对数据进行降维。也可以同时考虑发掘数据的纵向与横向结构,假设数据由含有隐式结构的概率模型生成得到,从数据中学习该概率模型

聚类 clustering

  • 聚类是将样本集合中相似的样本(实例)分配到相同的类,不相似的样本分配到不同的类。样本通常是欧氏空间中的向量,类别不是事先给定,而是从数据中自动发现,但类别的个数通常是事先给定的。样本之间的相似度或距离由应用决定。
  • 如果每一个样本只属于某一类 \(z_{i} = g_{\theta}(x_{i}), i = 1, 2, \cdots, N\),则称为硬聚类(hard clustering)
  • 每一个样本依概率属于每一个类 \(P_{\theta}(z_{i}|x_{i}), i = 1, 2, \cdots, N\),则称为软聚类(soft clustering)
  • 聚类方法有层次聚类和K均值聚类

降维 dimensionality reduction

  • 降维是将训练数据中的样本(实例)从高维空间转换到低维空间。
  • 假设样本原本存在于低维空间,或者近似地存在于低维空间,通过降维则可以更好地表示样本数据的结构,即更好地表示样本之间的关系。高维空间通常是高维的欧氏空间,而低维空间是低维的欧氏空间或者流形(manifold)。低维空间不是事先给定的,而是从数据中自动发现的,但其维数通常是实现给定的
  • 从高维到低维的降维中,要保证样本中的信息损失最小。
  • 降维有线性降维和非线性降维,降维方法有主成分分析
  • 假设输入空间是欧氏空间 \(X \subseteq \mathbb{R}^{d}\) ,输出空间也是欧氏空间 \(Z \subseteq \mathbb{R}^{d’}\),\(d’ \ll d\) ,后者的维数低于前者的维数。降维的模型是函数 \(z = g_{\theta}(x)\)其中 \(x \in X\) 是样本的高维向量,\(z \in Z\) 是样本的低维向量,\(\theta\) 是参数。函数可以是线性函数也可以是非线性函数。

概率模型估计

  • 假设训练数据由一个概率模型生成,由训练数据学习概率模型的结构和参数。
  • 概率模型的结构类型,或者说概率模型的集合事先给定,而模型的具体结构与参数从数据中自动学习。学习的目标是找到最有可能生成数据的结构和参数。
  • 概率模型包括混合模型、概率图模型等。概率图模型又包括有向图模型和无向图模型

概率模型表示为条件概率分布\(P_{\theta}(x|z)\),其中随机变量x表示观测数据,可以是连续变量也可以是离散变量;随机变量z表示隐式结构,是离散变量;随机变量\(\theta\)表示参数。模型是混合模型时,z表示成分的个数;模型是概率图模型时,z表示图的结构。

概率模型的一种特殊情况是隐式结构不存在,即满足\(P_{\theta}(x|z)=P_{\theta}(x)\)。这时条件概率分布估计变成概率分布估计,只要估计分布\(P_{\theta}(x)\)的参数即可。传统统计学中的概率密度估计,比如高斯分布参数估计,都属于这种情况。

概率模型估计是从给定的训练数据\(U = \{x_1, x_2, \cdots, x_N\}\)中学习模型\(P_{\theta}(x|z)\)的结构和参数。这样可以计算出模型相关的任意边缘分布和条件分布。注意随机变量x是多元变量,甚至是高维多变量。概率模型估计可以帮助发现数据中隐藏的横向纵向结构。

无监督学习三要素

同监督学习一样,无监督学习也有三要素:模型、策略、算法。
模型就是函数\(z = g_{\theta}(x)\),条件概率分布\(P_{\theta}(z|x)\),或条件概率分布\(P_{\theta}(x|z)\) ,在聚类、降维、概率模型估计中拥有不同的形式。比如,聚类中模型的输出是类别;降维中模型的输出是低维向量;概率模型估计中的模型可以是混合概率模型,也可以是有向概率图模型和无向概率图模型。

策略在不同的问题中有不同的形式,但都可以表示为目标函数的优化。比如,聚类中样本与所属类别中心距离的最小化,降维中样本从高维空间转换到低维空间过程中信息损失的最小化,概率模型估计中模型生成数据概率的最大化。

算法通常是迭代算法,通过迭代达到目标函数的最优化,比如,梯度下降法。
层次聚类法、k均值聚类是硬聚类方法,高斯混合模型 EM 算法是软聚类方法。主成分分析、潜在语义分析是降维方法。概率潜在语义分析、潜在狄利克雷分配是概率模型估计方法。

聚类概述

降维概述

聚类方法

聚类属于无监督学习,因为只是根据样本的相似度或距离将其进行归类,而类或簇事先并不知道。

聚类算法很多,本章介绍两种最常用的聚类算法:层次聚类(hierarchical clustering)和k均值聚类(k-means clustering)。

下面介绍聚类的基本概念,包括样本之间的距离相似度类或簇,类与类之间的距离。

聚类的核心概念是相似度(similarity)或距离(distance),有多种相似度或距离的定义。因为相似度直接影响聚类的结果,所以其选择是聚类的根本问题。具体哪种相似度更合适取决于应用问题的特性

距离

相关系数 Correlation coefficient

定义14.3 样本\(x_i\)与样本\(x_j\)之间的相关系数定义为: \[ r_{ij} = \frac{\displaystyle\sum_{k = 1}^{m}(x_{ki}-\bar{x}_i)(x_{kj}-\bar{x}_j)}{\left[\displaystyle\sum_{k = 1}^{m}(x_{ki}-\bar{x}_i)^2\displaystyle\sum_{k = 1}^{m}(x_{kj}-\bar{x}_j)^2\right]^{\frac{1}{2}}} \] 其中 \[ \bar{x}_i = \frac{1}{m}\sum_{k = 1}^{m}x_{ki}, \quad \bar{x}_j = \frac{1}{m}\sum_{k = 1}^{m}x_{kj} \]

相关系数的绝对值越接近于1,表示样本越相似;越接近于0,表示样本越不相似。特别的,$r = 1$:完美正相关(两组数据走势完全一致,线性关系正斜率) $r = -1$:完美负相关(走势相反,线性关系负斜率) $r = 0$:无线性相关性

解释:分子:是协方差项,衡量 \(x_i\)​ 和 \(x_jx\) 对应维度的变量的相关性。 分母:是标准差的乘积,用于归一化,使得\(r_{ij}\)的范围被限制在\([-1, 1]\)

符号含义
\(x_{ki}\)第 i个样本的第 k个维度的值
\(\bar{x}_i\)样本 \(x_i\)的所有维度的平均值(均值)
m每个样本的维度数(特征数量)
\(r_{ij}\)样本 \(x_i\)和 \(x_j\)之间的相关系数
指标是否去均值是否标准化范围应用场景
Pearson 相关系数✅ 去中心化✅ 标准化[−1,1]衡量线性相关性
Cosine 相似度❌ 不去中心化✅ 只归一化[0,1] or [−1,1]衡量方向相似度

例子:

夹角余弦

\(s_{ij} = \frac{\sum_{k = 1}^{m}x_{ki}x_{kj}}{\left[\sum_{k = 1}^{m}x_{ki}^{2}\sum_{k = 1}^{m}x_{kj}^{2}\right]^{\frac{1}{2}}}\)

样本之间的相似度也可以用夹角余弦(cosine)来表示。

夹角余弦越接近于 1,表示样本越相似。越接近于 0,表示样本越不相似。

样本\(x_i\)与样本\(x_j\)之间的夹角余弦定义为 \(s_{ij} = \frac{\sum_{k = 1}^{m}x_{ki}x_{kj}}{\left[\sum_{k = 1}^{m}x_{ki}^{2}\sum_{k = 1}^{m}x_{kj}^{2}\right]^{\frac{1}{2}}}\)

设有两个向量A和C,那么它们之间的余弦相似度定义为: \[ \cos\theta=\frac{\mathbf{A}\cdot\mathbf{C}}{\|\mathbf{A}\|\cdot\|\mathbf{C}\|} \]

相似度总结

距离度量相似度时,距离越小样本越相似。用相关系数时,相关系数越大样本越相似。

不同相似度度量得到的结果并不一定一致。

  • 比如下图如果从距离的角度看,A 和 B 的位置离得很近(用虚线连接),而 A 和 C 离得远,所以A 和 B 比 A 和 C 更相似
  • 但从相关系数的角度看,向量 A 和向量 C 的方向非常接近(几乎是同一个方向),而 A 和 B 的夹角比较大,所以A 和 C 比 A 和 B 更相似。

类或簇

通过聚类得到的类或簇,本质是样本的子集

定义14.5 设T为给定的正数,若集合G中任意两个样本\(x_i\),\(x_j\),有 \[ d_{ij}\leq T \] 则称$G$为一个类或簇。

类的均值\(\bar{x}_G\),又称为类的中心 \[ \bar{x}_G = \frac{1}{n_G}\sum_{i = 1}^{n_G}x_i \] (14.10) 式中\(n_G\)是类G的样本个数。

类的直径(diameter)\(D_G\) 是类中任意两个样本之间的最大距离,即 \[ D_G = \max_{x_i, x_j \in G}d_{ij} \]

类与类之间的距离

下面考虑类\(G_p\)与类\(G_q\)之间的距离\(D(p,q)\),也称为连接(linkage)。类与类之间的距离也有多种定义。

最短距离或单连接(single linkage)定义类\(G_p\)的样本与\(G_q\)的样本之间的最短距离为两类之间的距离 \[ D_{pq}=\min\{d_{ij}|x_i\in G_p, x_j\in G_q\} \]

最长距离或完全连接(complete linkage):定义类\(G_p\)的样本与\(G_q\)的样本之间的最长距离为两类之间的距离 \[ D_{pq}=\max\{d_{ij}|x_i\in G_p, x_j\in G_q\} \]

中心距离:定义类\(G_p\)与\(G_q\)的中心\(\bar{x}_p\)与\(\bar{x}_q\)之间的距离为两类之间的距离 \(D_{pq}=d_{\bar{x}_p\bar{x}_q}\)

平均距离:定义类\(G_p\)与\(G_q\)任意两个样本之间距离的平均值为两类之间的距离 \(D_{pq}=\frac{1}{n_pn_q}\sum_{x_i\in G_p}\sum_{x_j\in G_q}d_{ij}\)

层次聚类

因为每个样本只属于一个类,所以层次聚类属于硬聚类

层次聚类又有聚合 agglomerative(自下而上)和分裂 divisive (自上而下)两种方法。

聚合法开始将每个样本各自分到一个类;之后将相距最近的两类合并,建立一个新的类,重复此操作直到满足停止条件;得到层次化的类别。

分裂法开始将所有样本分到一个类;之后将已有类中相距最远的样本分到两个新的类,重复此操作直到满足停止条件;得到层次化的类别。

聚合聚类的具体过程:

例子:

给定5个样本的集合,样本之间的欧氏距离由如下矩阵D表示 \[ D = [d_{ij}]_{5\times5} = \begin{bmatrix} 0 & 7 & 2 & 9 & 3 \\ 7 & 0 & 5 & 4 & 6 \\ 2 & 5 & 0 & 8 & 1 \\ 9 & 4 & 8 & 0 & 5 \\ 3 & 6 & 1 & 5 & 0 \end{bmatrix} \] 其中\(d_{ij}\)表示第i个样本与第j个样本之间的欧氏距离。 显然D为对称矩阵。应用聚合层次聚类法对这5个样本进行聚类。

首先用5个样本构建5个类,这样,样本之间的距离也就变成类之间的距离,所以5个类之间的距离矩阵亦为D。由矩阵D可以看出,\(D_{35}=D_{53}=1\)为最小,所以把\(G_3\)和\(G_5\)合并为一个新类,记作\(G_6 = \{x_3, x_5\}\)

(3)计算\(G_6\)与\(G_1\),\(G_2\),\(G_4\)之间的最短距离,有 \(D_{61}=2\),\(D_{62}=5\),\(D_{64}=5\)

与其他类的距离是看这两个点中,谁距离\(G_1\)的某个点最近

💡计算\(D_{61}\):\(G_6\)和\(G_1 = \{x_1\}\) 查矩阵:

  • \(d_{31}=2\),\(d_{51}=3\)
  • 所以:\(D_{61}=\min(2, 3)=2\)

💡\(D_{62}\):和\(x_2\)

  • \(d_{32}=5\),\(d_{52}=6\)
  • 所以:\(D_{62}=\min(5, 6)=5\)

💡\(D_{64}\):和\(x_4\)

  • \(d_{34}=8\),\(d_{54}=5\)
  • 所以:\(D_{64}=\min(8, 5)=5\)

又注意到其余两类之间的距离是
\(D_{12}=7\),\(D_{14}=9\),\(D_{24}=4\)
显然,\(D_{61}=2\)最小,所以将\(G_1\)与\(G_6\)合并成一个新类,记作\(G_7 = \{x_1, x_3, x_5\}\)。
(4)计算\(G_7\)与\(G_2\),\(G_4\)之间的最短距离,
\(D_{72}=5\),\(D_{74}=5\)
又注意到
\(D_{24}=4\)
显然,其中\(D_{24}=4\)最小,所以将\(G_2\)与\(G_4\)合并成一新类,记作\(G_8 = \{x_2, x_4\}\)。
(5)将\(G_7\)与\(G_8\)合并成一个新类,记作\(G_9 = \{x_1, x_2, x_3, x_4, x_5\}\),即将全部样本聚成 1 类,聚类终止。
上述层次聚类过程可以用下面的层次聚类图表示。

K均值聚类

每个样本只能属于一个类,所以k均值聚类是硬聚类

k均值聚类是基于中心的聚类方法,通过迭代,将样本分到k个类中,使得每个样本与其所属类的中心或均值最小;得到k个 “平坦的”、非层次化的类别,构成对空间的划分。

策略

k均值聚类的策略是通过损失函数的最小化选取最优的划分或函数\(C^*\) – 一般采用欧氏距离平方(squared Euclidean distance)作为样本之间的距离\(d(x_i, x_j)\) \[ \begin{align*} d(x_i, x_j)&=\sum_{k = 1}^{m}(x_{ki}-x_{kj})^2\\ &=\|x_i – x_j\|^2 \end{align*} \]

定义样本与其所属类的中心之间的距离的总和为损失函数,即 \[ W(C)=\sum_{l = 1}^{k}\sum_{C(i)=l}\|x_i – \bar{x}_l\|^2 \] – $\bar{x}_l = (\bar{x}_{1l}, \bar{x}_{2l}, \cdots, \bar{x}_{ml})^{\mathrm{T}}$ 是第$l$个类的均值或中心 – $n_l = \sum_{i = 1}^{n}I(C(i)=l)$ ,$I(C(i)=l)$ 是指示函数,取值1或0 – 函数$W(C)$也称为能量,表示相同类中的样本相似的程度。

k 均值聚类就是求解最优化问题: \(\begin{align*} C^*&=\arg\min_{C}W(C)\\ &=\arg\min_{C}\sum_{l = 1}^{k}\sum_{C(i)=l}\|x_i – \bar{x}_l\|^2 \end{align*}\)

相似的样本被聚到同类时,损失函数值最小,这个目标函数的最优化能达到聚类的目的

但是,这是一个组合优化问题,n个样本分到k类,所有可能分法的数目是: \[ S(n,k)=\frac{1}{k!}\sum_{l = 1}^{k}(-1)^{k – l}\binom{k}{l}k^n \] 。事实上,k均值聚类的最优解求解问题是NP困难问题。现实中采用迭代的方法求解。

  • 所有可能的分法太多太多了(组合爆炸)
  • 你不可能试完每一种
  • 所以你就采用一个方法:
    • 先随便分一下,然后反复微调(交换成员),每次让组内差异变小
      这就是 “迭代法” 的思想。

k均值聚类的算法是一个迭代的过程

输入:n个样本的集合; 输出:样本集合的聚类。 (1)初始化。随机选择k个样本点作为初始聚类中心; (2)对样本进行聚类。计算每个样本到类中心的距离,将每个样本指派到与其最近的中心的类中,构成聚类结果; (3)计算新的类中心。对聚类结果,计算当前各个类中的样本的均值,作为新的类中心; (4)如果迭代收敛或符合停止条件,输出结果;否则,返回步骤(2)。

例题:

选择两个样本点作为类的中心。假设选择\(m_1^{(0)} = x_1 = (0, 2)^{\mathrm{T}}\),\(m_2^{(0)} = x_2 = (0, 0)^{\mathrm{T}}\)。

以\(m_1^{(0)}\),\(m_2^{(0)}\)为类\(G_1^{(0)}\),\(G_2^{(0)}\)的中心,计算\(x_3 = (1, 0)^{\mathrm{T}}\),\(x_4 = (5, 0)^{\mathrm{T}}\),\(x_5 = (5, 2)^{\mathrm{T}}\)与\(m_1^{(0)} = (0, 2)^{\mathrm{T}}\),\(m_2^{(0)} = (0, 0)^{\mathrm{T}}\)的欧氏距离平方。

对\(x_3 = (1, 0)^{\mathrm{T}}\),\(d(x_3, m_1^{(0)}) = 5\),\(d(x_3, m_2^{(0)}) = 1\),将\(x_3\)分到类\(G_2^{(0)}\)。

对\(x_4 = (5, 0)^{\mathrm{T}}\),\(d(x_4, m_1^{(0)}) = 29\),\(d(x_4, m_2^{(0)}) = 25\),将\(x_4\)分到类\(G_2^{(0)}\)。

对\(x_5 = (5, 2)^{\mathrm{T}}\),\(d(x_5, m_1^{(0)}) = 25\),\(d(x_5, m_2^{(0)}) = 29\),将\(x_5\)分到类\(G_1^{(0)}\)。

初始聚类中心(由题设给定):

\(m_1^{(0)}=(0,2)\),\(m_2^{(0)}=(0,0)\) 表示两个初始类的 “中心” 分别是:

  • 第 1 类中心\(m_1^{(0)}\):左上角的点\((0,2)\)
  • 第 2 类中心\(m_2^{(0)}\):原点\((0,0)\)

计算欧式距离平方(按公式)

欧几里得距离平方的公式是: \(d(x,m)^2=(x_1 – m_1)^2+(x_2 – m_2)^2\)

对\(x_3=(1,0)\):

  • 到\(m_1^{(0)}=(0,2)\): \(d^2=(1 – 0)^2+(0 – 2)^2=1 + 4 = 5\)
  • 到\(m_2^{(0)}=(0,0)\): \(d^2=(1 – 0)^2+(0 – 0)^2=1 + 0 = 1\)

→ \(x_3\)离\(m_2\)更近,分配到第 2 类

对\(x_4 = (5,0)\):

  • 到\(m_1^{(0)} = (0,2)\): \(d^2 = (5 – 0)^2 + (0 – 2)^2 = 25 + 4 = 29\)
  • 到\(m_2^{(0)} = (0,0)\): \(d^2 = (5 – 0)^2 + (0 – 0)^2 = 25 + 0 = 25\) → \(x_4\)离\(m_2\)更近,分配到第 2 类

对\(x_5 = (5,2)\):

  • 到\(m_1^{(0)} = (0,2)\): \(d^2 = (5 – 0)^2 + (2 – 2)^2 = 25 + 0 = 25\)
  • 到\(m_2^{(0)} = (0,0)\): \(d^2 = (5 – 0)^2 + (2 – 0)^2 = 25 + 4 = 29\) → \(x_5\)离\(m_1\)更近,分配到第 1 类

(3)得到新的类\(G_1^{(1)} = \{x_1, x_5\}\),\(G_2^{(1)} = \{x_2, x_3, x_4\}\),计算类的中心\(m_1^{(1)}\),\(m_2^{(1)}\): \(m_1^{(1)} = (2.5, 2.0)^{\mathrm{T}}\),\(m_2^{(1)} = (2, 0)^{\mathrm{T}}\)

类编号样本成员计算方法中心坐标
\(G_1^{(1)}\)\(\{x_1, x_5\}\)均值 \((x1+x5)/2(x_1 + x_5)/2\)(2.5,2.0)
\(G_2^{(1)}\)\(\{x_2, x_3, x_4\}\)均值 \((x_2+x_3+x_4)/3(x_2 + x_3 + x_4)/3\)(2.0,0.0)

(4)重复步骤 (2) 和步骤 (3)。
将\(x_1\)分到类\(G_1^{(1)}\),将\(x_2\)分到类\(G_2^{(1)}\),\(x_3\)分到类\(G_2^{(1)}\),\(x_4\)分到类\(G_2^{(1)}\),\(x_5\)分到类\(G_1^{(1)}\)
得到新的类\(G_1^{(2)} = \{x_1, x_5\}\),\(G_2^{(2)} = \{x_2, x_3, x_4\}\)。
由于得到的新的类没有改变,聚类停止。得到聚类结果:
\(G_1^* = \{x_1, x_5\}\),\(G_2^* = \{x_2, x_3, x_4\}\)

  • k 均值聚类属于启发式方法,不能保证收敛到全局最优,初始中心的选择会直接影响聚类结果。
  • 注意,类中心在聚类的过程中会发生移动,但是往往不会移动太大,因为在每一步,样本被分到与其最近的中心的类中

奇异值分解 SVD

完全奇异值分解

任意一个\(m×n\)矩阵,都能表示成三个矩阵的乘积(因子分解)形式,分别是m阶正交矩阵、由降序排列的非负对角线元素组成的\(m×n\)矩形对角矩阵以及n阶正交矩阵,此为该矩阵的奇异值分解。矩阵的奇异值分解必定存在,但不唯一奇异值分解可视为矩阵数据压缩的一种手段,也就是通过因子分解近似表示原始矩阵,这种近似是在平方损失意义下的最优近似。
\[A = U\Sigma V^{\mathrm{T}}\]满足\(UU^{\mathrm{T}} = I\)
\(VV^{\mathrm{T}} = I\)
\(\Sigma = \mathrm{diag}(\sigma_1, \sigma_2, \cdots, \sigma_p)\)
\(\sigma_1\geq\sigma_2\geq\cdots\geq\sigma_p\geq0\)
\(p = \min(m, n)\)

1. U:

  • 是一个m阶的正交矩阵(就像单位向量组成的旋转矩阵),表示左边的 “方向”。
  • 满足:\(UU^{\mathrm{T}} = I\),即它的逆就是它的转置。
  • 可以看成是原始空间中的方向基底。

2. \(\Sigma\):

  • \(\Sigma\)是由降序排列的非负的对角线元素组成的\(m×n\)矩形对角矩阵(rectangular diagonal matrix,只有对角线有值,其他全是 0。
  • 这些主对角线上的元素\(\sigma_1, \sigma_2, \cdots, \sigma_p\)称为奇异值,其中\(p = \min(m, n)\)
    而为了规范化表示、便于数值分析和算法处理,我们总是将这些奇异值按降序排列:
    \(\sigma_1\geq\sigma_2\geq\cdots\geq\sigma_p\geq0\)

3. V:

  • 是一个n阶的正交矩阵(跟U类似),表示右边的 “方向”。
  • 满足:\(VV^{\mathrm{T}} = I\)。

完全奇异值分解(full singular value decomposition)定义:

\(U\Sigma V^{\mathrm{T}}\):矩阵A的奇异值分解(singular value decomposition, SVD)
\(\sigma_i\):矩阵A的奇异值(singular value)
U的列向量:左奇异向量(left singular vector)
V的列向量:右奇异向量(right singular vector)

注意奇异值分解不要求矩阵A是方阵,事实上矩阵的奇异值分解可以看作是方阵的对角化的推广

例:给定一个5×4矩阵A \[ A=\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 4 \\ 0 & 3 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 2 & 0 & 0 & 0 \end{bmatrix} \] 它的奇异值分解由三个矩阵的乘积$U\Sigma V^{\mathrm{T}}$给出,矩阵U,\(\Sigma\),\(V^{\mathrm{T}}\)分别为 \[ U=\begin{bmatrix} 0 & 0 & \sqrt{0.2} & 0 & \sqrt{0.8} \\ 1 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & \sqrt{0.8} & 0 & -\sqrt{0.2} \end{bmatrix} ,\quad \Sigma=\begin{bmatrix} 4 & 0 & 0 & 0 \\ 0 & 3 & 0 & 0 \\ 0 & 0 & \sqrt{5} & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{bmatrix} ,\quad V^{\mathrm{T}}=\begin{bmatrix} 0 & 0 & 0 & 1 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \] 矩阵的奇异值分解不是唯一的。在此例中如果选择U为 \[ U=\begin{bmatrix} 0 & 0 & \sqrt{0.2} & \sqrt{0.4} & -\sqrt{0.4} \\ 1 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & \sqrt{0.5} & \sqrt{0.5} \\ 0 & 0 & \sqrt{0.8} & -\sqrt{0.1} & \sqrt{0.1} \end{bmatrix} \] 而\(\Sigma\)与V不变,那么\(U\Sigma V^{\mathrm{T}}\)也是A的一个奇异值分解。
实际中常用奇异值分解的紧凑形式和截断形式。紧奇异值分解是与原始矩阵等秩的奇异值分解,截断奇异值分解是比原始矩阵低秩的奇异值分解。

紧奇异值分解

定义 15.2 设有\(m×n\)实矩阵A,其秩为\(\mathrm{rank}(A)=r\),\(r\leq\min(m,n)\),则称\(U_r\Sigma_r V_r^{\mathrm{T}}\)为A的紧奇异值分解(compact singular value decomposition)

即 \(A = U_r\Sigma_r V_r^{\mathrm{T}}\) 

其中\(U_r\)是\(m×r\)矩阵,\(V_r\)是\(n×r\)矩阵,\(\Sigma_r\)是r阶对角矩阵;矩阵\(U_r\)由完全奇异值分解中U的前r列、矩阵\(V_r\)由V的前r列、矩阵\(\Sigma_r\)由\(\Sigma\)的前r个对角线元素得到。紧奇异值分解的对角矩阵\(\Sigma_r\)的秩与原始矩阵A的秩相等。

例 15.2 由例 15.1 给出的矩阵A的秩\(r = 3\), \(A=\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 4 \\ 0 & 3 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 2 & 0 & 0 & 0 \end{bmatrix}\) A的紧奇异值分解是 \(A = U_r\Sigma_r V_r^{\mathrm{T}}\) 其中 \(U_r=\begin{bmatrix} 0 & 0 & \sqrt{0.2} \\ 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & \sqrt{0.8} \end{bmatrix} ,\quad \Sigma_r=\begin{bmatrix} 4 & 0 & 0 \\ 0 & 3 & 0 \\ 0 & 0 & \sqrt{5} \end{bmatrix} ,\quad V_r^{\mathrm{T}}=\begin{bmatrix} 0 & 0 & 0 & 1 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \end{bmatrix}\)

截断奇异值

在矩阵的奇异值分解中,只取最大的k个奇异值(\(k < r\),r为矩阵的秩)对应的部分,就得到矩阵的截断奇异值分解。实际应用中提到矩阵的奇异值分解时,通常指截断奇异值分解。

定义 15.3 设A为\(m×n\)实矩阵,其秩\(\mathrm{rank}(A)=r\),且\(0 < k < r\),则称\(U_k\Sigma_k V_k^{\mathrm{T}}\)为矩阵A的截断奇异值分解(truncated singular value decomposition) \(A\approx U_k\Sigma_k V_k^{\mathrm{T}}\) (15.19) 其中\(U_k\)是\(m×k\)矩阵,\(V_k\)是\(n×k\)矩阵,\(\Sigma_k\)是k阶对角矩阵;矩阵\(U_k\)由完全奇异值分解中U的前k列、矩阵\(V_k\)由V的前k列、矩阵\(\Sigma_k\)由\(\Sigma\)的前k个对角线元素得到。对角矩阵\(\Sigma_k\)的秩比原始矩阵A的秩低。

由例 15.1 所给出的矩阵A
\(A=\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 4 \\ 0 & 3 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 2 & 0 & 0 & 0 \end{bmatrix}\)
的秩为 3,若取\(k = 2\)则其截断奇异值分解是
\(A\approx A_2 = U_2\Sigma_2 V_2^{\mathrm{T}}\)
其中
\(U_2=\begin{bmatrix} 0 & 0 \\ 1 & 0 \\ 0 & 1 \\ 0 & 0 \\ 0 & 0 \end{bmatrix} ,\quad \Sigma_2=\begin{bmatrix} 4 & 0 \\ 0 & 3 \end{bmatrix} ,\quad V_2^{\mathrm{T}}=\begin{bmatrix} 0 & 0 & 0 & 1 \\ 0 & 1 & 0 & 0 \end{bmatrix}\)
\(A_2 = U_2\Sigma_2 V_2^{\mathrm{T}}=\begin{bmatrix} 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 4 \\ 0 & 3 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{bmatrix}\)

这里的\(U_2\),\(V_2\)是例 15.1 的U和V的前 2 列,\(\Sigma_2\)是\(\Sigma\)的前 2 行前 2 列。\(A_2\)与A比较,A的元素 1 和 2 在\(A_2\)中均变成 0。

在实际应用中,常常需要对矩阵的数据进行压缩,将其近似表示,奇异值分解提供了一种方法。奇异值分解是在平方损失(弗罗贝尼乌斯范数)意义下对矩阵的最优近似。紧奇异值分解对应着无损压缩,截断奇异值分解对应着有损压缩。

SVD 常用于降维、特征提取、数据压缩等领域。奇异值反映了矩阵 AA 的“能量”或“重要性”分布。越大的奇异值对应的奇异向量(U和 V 的列)在重构 A 时贡献越大大奇异值:对应矩阵中的主要模式(如主要特征、显著方向),保留了数据中的主要方差或结构信息。例如,在图像压缩中,前几个大奇异值就能重建图像的主要轮廓。小奇异值:通常对应噪声或细节信息。如果舍弃这些小奇异值,对整体信息的损失较小。

如果讲所有矩阵的奇异值降序排列保留前90%的奇异值,对数据进行压缩得到右下角的图片

几何解释

从线性变换角度看,\(m×n\)矩阵A代表从n维空间\(\mathbb{R}^n\)到m维空间\(\mathbb{R}^m\)的线性变换\(T:x\rightarrow Ax\)。该线性变换可分解为三个简单变换:坐标系的旋转或反射变换、坐标轴的缩放变换、另一个坐标系的旋转或反射变换,奇异值定理确保这种分解存在

原始空间标准正交基经(V^{\mathrm{T}})旋转变换、(\Sigma)缩放变换、U旋转变换,得到与线性变换A等价的结果。

给定一个 2 阶矩阵 \(A=\begin{bmatrix} 3 & 1 \\ 2 & 1 \end{bmatrix}\) 其奇异值分解为 \(U=\begin{bmatrix} 0.8174 & -0.5760 \\ 0.5760 & 0.8174 \end{bmatrix} ,\quad \Sigma=\begin{bmatrix} 3.8643 & 0 \\ 0 & 0.2588 \end{bmatrix} ,\quad V^{\mathrm{T}}=\begin{bmatrix} 0.9327 & 0.3606 \\ -0.3606 & 0.9327 \end{bmatrix}\)

观察基于矩阵A的奇异值分解将\(\mathbb{R}^2\)的标准正交基 \(e_1=\begin{bmatrix} 1 \\ 0 \end{bmatrix} ,\quad e_2=\begin{bmatrix} 0 \\ 1 \end{bmatrix}\)

进行线性转换的情况。

首先,\(V^{\mathrm{T}}\)表示一个旋转变换,将标准正交基\(e_1\),\(e_2\)旋转,得到向量\(V^{\mathrm{T}}e_1\),\(V^{\mathrm{T}}e_2\): \(V^{\mathrm{T}}e_1=\begin{bmatrix} 0.9327 \\ -0.3606 \end{bmatrix} ,\quad V^{\mathrm{T}}e_2=\begin{bmatrix} 0.3606 \\ 0.9327 \end{bmatrix}\)

其次,\(\Sigma\)表示一个缩放变换,将向量\(V^{\mathrm{T}}e_1\),\(V^{\mathrm{T}}e_2\)在坐标轴方向缩放\(\sigma_1\)倍和\(\sigma_2\)倍,得到向量\(\Sigma V^{\mathrm{T}}e_1\),\(\Sigma V^{\mathrm{T}}e_2\): \(\Sigma V^{\mathrm{T}}e_1=\begin{bmatrix} 3.6042 \\ -0.0933 \end{bmatrix} ,\quad \Sigma V^{\mathrm{T}}e_2=\begin{bmatrix} 1.3935 \\ 0.2414 \end{bmatrix}\)

最后,U表示一个旋转变换,再将向量\(\Sigma V^{\mathrm{T}}e_1\),\(\Sigma V^{\mathrm{T}}e_2\)旋转,得到向量\(U\Sigma V^{\mathrm{T}}e_1\),\(U\Sigma V^{\mathrm{T}}e_2\),也就是向量\(Ae_1\)和\(Ae_2\): \(Ae_1 = U\Sigma V^{\mathrm{T}}e_1=\begin{bmatrix} 3 \\ 2 \end{bmatrix} ,\quad Ae_2 = U\Sigma V^{\mathrm{T}}e_2=\begin{bmatrix} 1 \\ 1 \end{bmatrix}\)

综上,矩阵的奇异值分解也可以看作是将其对应的线性变换分解为旋转变换、缩放变换及旋转变换的组合。根据定理 15.1,这个变换的组合一定存在。

主成分分析 PCA

是一种线性降维技术,通过将原始数据投影到新的特征空间,保留大部分原始数据的信息,同时减少特征的数量

主成分分析(principal component analysis, PCA)是一种常用的无监督学习方法。其利用正交变换把由线性相关变量表示的观测数据转换为少数几个由线性无关变量表示的数据,线性无关的变量称为主成分

核心思想:

在主成分分析中,首先要对给定数据进行规范化处理使每个变量的平均值为 0,方差为 1 。

接着对数据实施正交变换,把原本由线性相关变量表示的数据,转变为由若干线性无关的新变量表示的数据这些新变量在所有可能的正交变换中,变量方差之和(即信息保存量)最大(特征向量只有拉伸没有旋转),方差体现了新变量上所承载信息的多少(回顾:最大熵模型-熵越大,信息越不确定-方差越大-信息量越多)。这些新变量按顺序被称为第一主成分、第二主成分等。

借助主成分分析,既能利用主成分近似表征原始数据,主成分的个数通常小于原始变量的个数,所以主成分分析属于降维方法。这相当于挖掘出数据的 “基本架构” ,即数据中变量之间的关系

主成分分析的直观解释:

数据集合里的样本以正交坐标系中的点呈现,一个坐标轴代表一个变量,经规范化处理后的数据分布在原点附近对原坐标系中的数据开展主成分分析,等同于实施坐标系旋转变换(正交变换),将数据投影到新坐标系的坐标轴上 。新坐标系的第一坐标轴、第二坐标轴等依次对应第一主成分、第二主成分等,数据在每一轴上坐标值的平方代表相应变量的方差 ,而且这个坐标系在所有可能的新坐标系里,坐标轴上方差之和最大 (方差越大包含信息越多)

比如,数据由两个变量\(x_1\)和\(x_2\)表示,处于二维空间中,每个点代表一个样本,如图 16.1 (a) 所示 。数据已完成规范化处理,能看出这些数据分布在以原点为中心、从左下至右上倾斜的椭圆内 。显然该数据中的变量\(x_1\)和\(x_2\)线性相关(点不是均匀地铺满整个平面,而是集中分布在一条斜向的主轴上(大约沿 x1=x2),具体而言,知晓变量\(x_1\)的取值时,对变量\(x_2\)的预测并非完全随机 ,反之亦然。

在原坐标系中数据由变量\(x_1\)和\(x_2\)来表示,经过正交变换后,在新坐标系里则由变量\(y_1\)和\(y_2\)表示 。主成分分析选取方差最大的方向作为新坐标系的第一坐标轴(即第一主成分)样本点A、B、C在\(y_1\)轴上投影,得到\(y_1\)轴上的坐标值\(A’\)、\(B’\)、\(C’\) ,坐标值的平方和\(OA’^2 + OB’^2 + OC’^2\)体现样本在变量\(y_1\)上的方差和 。因此可转化为在旋转变换中找到坐标值平方和最大的轴又由于旋转变换中样本点到原点距离的平方和\(OA^2 + OB^2 + OC^2\)保持不变,依据勾股定理,可再次转化为等价于样本点到\(y_1\)轴距离的平方和\(AA’^2 + BB’^2 + CC’^2\)最小 。所以,主成分分析在旋转变换中选取与样本点距离平方和最小的轴作为第一主成分 。在保证与已选坐标轴正交的前提下,以类似方式选取第二主成分等 。

在新坐标系中,数据的变量\(y_1\)和\(y_2\)线性无关(原因:数据旋转到新的坐标轴(主成分方向)后,把数据投影到互不重叠的方向上,自然就没有“重复信息” → 所以\(y_1\)和\(y_2\)协方差为 0),当知道变量\(y_1\)的取值时,对变量\(y_2\)的预测是完全随机的,反之也一样 。

要是主成分分析只取第一主成分,也就是新坐标系的\(y_1\)轴,那就相当于把数据投影到椭圆长轴上,用这一主轴表示数据,实现将二维空间的数据压缩到一维空间。

因子负荷量(额外补充)

第k个主成分\(y_k\)与变量\(x_i\)的相关系数\(\rho(y_k, x_i)\)被称为因子负荷量(factor loading) ,它用于体现第k个主成分\(y_k\)与变量\(x_i\)之间的相关关系 。其计算公式为:
\(\rho(y_k, x_i)=\frac{\sqrt{\lambda_k}\alpha_{ik}}{\sqrt{\sigma_{ii}}},\quad k, i = 1, 2, \cdots, m\) (16.20)

符号含义
\(\rho(y_k, x_i)\)第 k个主成分 \(y_k\) 与原始变量 \(x_i\)的相关系数,也叫“因子负荷量
\(\lambda_k\)协方差矩阵 Σ的第 k 个特征值,表示主成分 yky_k 所解释的数据方差
\(\alpha_{ik}\)第 kk 个主成分对应的特征向量中第 i 个元素,表示原始变量 xix_i 在主成分方向上的权重
\(\sigma_{ii}\)原始变量 \(x_i\) 的方差(在标准化数据中 \(\sigma_{ii} = 1\))

方差贡献率(额外补充)

具体确定k的方法,一般借助方差贡献率。

定义 16.2 第k主成分\(y_k\)的方差贡献率,定义为\(y_k\)的方差与所有方差总和的比值,记为\(\eta_k\) : \(\eta_k = \frac{\lambda_k}{\sum_{i = 1}^{m}\lambda_i}\) (16.30)

k个主成分\(y_1, y_2, \cdots, y_k\)的累计方差贡献率,指k个方差之和与所有方差总和的比值: \(\sum_{i = 1}^{k}\eta_i = \frac{\sum_{i = 1}^{k}\lambda_i}{\sum_{i = 1}^{m}\lambda_i}\) (16.31)

通常选取k,使累计方差贡献率达到规定百分比以上,如 70% – 80% 以上 。累计方差贡献率体现主成分保留信息的比例,但无法反映对某个原有变量\(x_i\)保留信息的比例,此时一般利用k个主成分\(y_1, y_2, \cdots, y_k\)对原有变量\(x_i\)的贡献率。

算法流程:(感觉不是重点,有待确认)

比如人的样本有身高,体重,年龄几个主成分,各个数据的范围不同,所以标准化让数据之间的范围相同

样本点的距离平方和最小的轴,作为第一主成分

例题:

下面这句话的意思是,去掉\(\lambda_3\)和\(\lambda_4\),图像的数据还能保留75%以上。即压缩数据但不会过多影响效果

将原来具有4个特征值的X1~X4投影之后,只有2个特征值y1和y2,上为转化关系

总结:

SVD 是一种基于矩阵分解的数学技术,而 PCA 是一种基于协方差矩阵的线性变换方法。SVD 的目标是找到一个低秩的近似矩阵来最小化原始数据与近似矩阵之间的差异,而 PCA 的目标是找到一组正交的主成分来最大化原始数据的方差。

学习笔记如有侵权,请提醒我,我会马上删除
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇