71、聚类与推荐系统技术解析

聚类与推荐系统技术解析

1. 谱聚类

1.1 归一化割

谱聚类是一种有效的聚类方法。首先,我们创建一个加权无向图 $W$,每个数据向量作为一个节点,$i - j$ 边的强度衡量节点间的相似度。通常,为确保图的稀疏性以加快计算速度,我们仅将节点与其最相似的邻居相连。

我们的目标是找到 $K$ 个相似点组成的聚类,即对图进行划分,将节点划分为 $S_1, \cdots, S_K$ 这些不相交的集合,以最小化某种代价。最初的代价函数是计算每个聚类内节点与聚类外节点之间连接的权重:
[
cut(S_1, \cdots, S_K) \triangleq \frac{1}{2} \sum_{k = 1}^{K} W(S_k, \overline{S_k})
]
其中,$W(A, B) \triangleq \sum_{i \in A, j \in B} w_{ij}$,$\overline{S_k} = V \setminus S_k$ 是 $S_k$ 的补集,$V = {1, \cdots, K}$。

然而,该代价函数的最优解往往是将单个节点从其余部分划分出来,因为这样能最小化割的权重。为避免这种情况,我们将其除以每个集合的大小,得到归一化割目标函数:
[
Ncut(S_1, \cdots, S_K) \triangleq \frac{1}{2} \sum_{k = 1}^{K} \frac{cut(S_k, \overline{S_k})}{vol(S_k)}
]
其中,$vol(A) \triangleq \sum_{i \in A} d_i$ 是集合 $A$ 的总权重,$d_i = \sum_{j = 1}^{N} w_{ij}$ 是节点 $i$ 的加权度。这会将图划分为 $K$ 个聚类,使得每个聚类内的节点彼此相似,而与其他聚类的节点不同。

我们可以将归一化割问题表述为寻找二进制向量 $c_i \in {0, 1}^N$ 以最小化上述目标,其中 $c_{ik} = 1$ 当且仅当点 $i$ 属于聚类 $k$。但不幸的是,这是一个 NP 难问题。下面我们将讨论基于特征向量方法的连续松弛问题,它更易于求解。

1.2 图拉普拉斯矩阵的特征向量编码聚类

图拉普拉斯矩阵定义为 $L \triangleq D - W$,其中 $W$ 是图的对称权重矩阵,$D = diag(d_i)$ 是对角矩阵,包含每个节点的加权度 $d_i = \sum_{j} w_{ij}$。

定理 1.2.1:$L$ 的特征值为 0 的特征向量集合由指示向量 $1_{S_1}, \cdots, 1_{S_K}$ 张成,其中 $S_k$ 是图的 $K$ 个连通分量。

证明:当 $K = 1$ 时,如果 $f$ 是特征值为 0 的特征向量,则 $0 = \sum_{ij} w_{ij}(f_i - f_j)^2$。若两个节点相连,即 $w_{ij} > 0$,则必有 $f_i = f_j$。因此,对于图中通过路径相连的所有顶点,$f$ 是常数。当 $K > 1$ 时,$L$ 是块对角矩阵。类似的论证表明,我们将有 $K$ 个指示函数,它们“选出”连通分量。

这启发我们采用以下聚类算法:
1. 计算 $L$ 的特征向量和特征值。
2. 令 $U$ 为一个 $N \times K$ 矩阵,其列包含 $K$ 个特征值最小的特征向量。
3. 设 $u_i \in \mathbb{R}^K$ 是 $U$ 的第 $i$ 行。
4. 由于这些 $u_i$ 是分段常数的,我们可以对它们应用 K - 均值聚类来恢复连通分量。

在实际应用中,对图拉普拉斯矩阵进行归一化很重要,以考虑某些节点连接更紧密的情况。一种方法是创建对称矩阵:
[
L_{sym} \triangleq D^{-\frac{1}{2}} L D^{-\frac{1}{2}} = I - D^{-\frac{1}{2}} W D^{-\frac{1}{2}}
]
此时,特征值为 0 的特征空间由 $D^{\frac{1}{2}} 1_{S_k}$ 张成。相应的算法如下:
1. 找到 $L_{sym}$ 的 $K$ 个最小特征向量。
2. 将它们堆叠成矩阵 $U$。
3. 通过 $t_{ij} = \frac{u_{ij}}{\sqrt{\sum_{k} u_{ik}^2}}$ 对 $U$ 的每行进行归一化,得到矩阵 $T$。
4. 对 $T$ 的行应用 K - 均值聚类,推断原始点的划分。

1.3 示例

图 1 展示了谱聚类的效果。在图 1(a) 中,K - 均值聚类效果不佳,因为它隐含假设每个聚类对应一个球形高斯分布。而谱聚类的操作步骤如下:
1. 使用高斯核计算密集相似度矩阵 $W$,$W_{ij} = \exp(-\frac{1}{2\sigma^2} |x_i - x_j| 2^2)$。
2. 计算归一化拉普拉斯矩阵 $L
{sym}$ 的前两个特征向量。
3. 使用 K - 均值聚类($K = 2$)推断聚类,结果如图 1(b) 所示。

聚类方法 效果
K - 均值聚类 对某些数据分布效果不佳,如螺旋数据
谱聚类 能处理更复杂的数据分布,如螺旋数据

1.4 与其他方法的联系

1.4.1 与核主成分分析(kPCA)的联系

谱聚类与核主成分分析密切相关。kPCA 使用 $W$ 的最大特征向量,这等价于 $I - W$ 的最小特征向量。这与谱聚类计算 $L = D - W$ 的最小特征向量类似。在实践中,谱聚类通常比 kPCA 效果更好。

1.4.2 与随机游走分析的联系

通过计算归一化图拉普拉斯矩阵的特征向量,我们能得到更好的结果。一种归一化方法是定义 $L_{rw} \triangleq D^{-1} L = I - D^{-1} W$。可以证明,对于 $L_{rw}$,特征值为 0 的特征空间仍由指示向量 $1_{S_k}$ 张成,因此我们可以直接对 $K$ 个最小特征向量 $U$ 进行聚类。

这里存在与图上随机游走的有趣联系。注意到 $P = D^{-1} W = I - L_{rw}$ 是一个随机矩阵,其中 $p_{ij} = \frac{w_{ij}}{d_i}$ 可解释为从 $i$ 到 $j$ 的转移概率。如果图是连通且非二分的,它具有唯一的平稳分布 $\pi = (\pi_1, \cdots, \pi_N)$,其中 $\pi_i = \frac{d_i}{vol(V)}$,$vol(V) = \sum_{i} d_i$ 是所有节点度的总和。此外,对于大小为 2 的划分,有 $Ncut(S, \overline{S}) = p(S|\overline{S}) + p(\overline{S}|S)$。这意味着我们要寻找一个割,使得随机游走更多地转移到相似点,很少在 $S$ 和 $\overline{S}$ 之间转移。这种分析可以扩展到 $K > 2$ 的情况。

谱聚类算法流程 mermaid 图

graph LR
    A[创建加权无向图 W] --> B[计算代价函数 cut]
    B --> C[计算归一化割 Ncut]
    C --> D[计算图拉普拉斯矩阵 L]
    D --> E[计算 L 的特征向量和特征值]
    E --> F[选择 K 个最小特征向量组成 U]
    F --> G[对 U 进行归一化得到 T]
    G --> H[对 T 的行应用 K - 均值聚类]
    H --> I[推断原始点的划分]

2. 双向聚类

2.1 基本双向聚类

在某些情况下,我们有一个数据矩阵 $X \in \mathbb{R}^{N \times D}$,希望同时对行和列进行聚类,这称为双向聚类或协同聚类。它在生物信息学中广泛应用,行通常代表基因,列代表条件;也可用于协同过滤,行代表用户,列代表电影。

我们基于一种简单的概率生成模型进行双向聚类。思路是为每一行和每一列关联一个潜在指标,$u_i \in {1, \cdots, N_u}$,$v_j \in {1, \cdots, N_v}$,其中 $N_u$ 是行聚类的数量,$N_v$ 是列聚类的数量。我们使用以下生成模型:
[
p(U) = \prod_{i = 1}^{N_r} Unif(u_i|{1, \cdots, N_u})
]
[
p(V) = \prod_{j = 1}^{N_c} Cat(v_j|{1, \cdots, N_v})
]
[
p(X|U, V, \theta) = \prod_{i = 1}^{N_r} \prod_{j = 1}^{N_c} p(X_{ij}|\theta_{u_i, v_j})
]
其中,$\theta_{a, b}$ 是行聚类 $a$ 和列聚类 $b$ 的参数。

例如,在一个动物特征数据集中,数据形式为 $X_{ij} = 1$ 当且仅当动物 $i$ 具有特征 $j$。该方法发现了 12 个动物聚类和 33 个特征聚类。如 $O_2$ 聚类为 { 羚羊, 马, 长颈鹿, 斑马, 鹿 },其特征聚类为 $F_2 =$ { 蹄, 长脖子, 角 } 和 $F_6 =$ { 行走, 四足, 地面 };$O_4$ 聚类为 { 河马, 大象, 犀牛 },其特征聚类为 $F_4 =$ { 球状体型, 缓慢, 不活跃 } 和 $F_6$。

2.2 嵌套分区模型(Crosscat)

基本双向聚类的问题是每个对象(行)只能属于一个聚类。实际上,一个对象可以有多个角色,根据所使用的特征子集可以分配到不同的聚类。

我们引入一个能捕捉这种现象的模型。假设我们有一个 $6 \times 6$ 矩阵,$N_u = 2$ 个行聚类和 $N_v = 3$ 个列聚类。假设潜在列分配为 $v = [1, 1, 2, 3, 3, 3]$。对于聚类到组 1 的列,行聚类为 $u_{:,1} = [1, 1, 1, 2, 2, 2]$;对于聚类到组 2 的列,行聚类为 $u_{:,2} = [1, 1, 2, 2, 2, 2]$;对于聚类到组 3 的列,行聚类为 $u_{:,3} = [1, 1, 1, 1, 1, 2]$。

形式上,该模型定义如下:
[
p(U) = \prod_{i = 1}^{N_r} \prod_{l = 1}^{N_v} Unif(u_{il}|{1, \cdots, N_u})
]
[
p(V) = \prod_{j = 1}^{N_c} Unif(v_j|{1, \cdots, N_v})
]
[
p(Z|U, V) = \prod_{i = 1}^{N_r} \prod_{j = 1}^{N_c} I(Z_{ij} = (u_{i, v_j}, v_j))
]
[
p(X|Z, \theta) = \prod_{i = 1}^{N_r} \prod_{j = 1}^{N_c} p(X_{ij}|\theta_{z_{ij}})
]
其中,$\theta_{k, l}$ 是协同聚类 $k \in {1, \cdots, N_u}$ 和 $l \in {1, \cdots, N_v}$ 的参数。

这个模型在不同文献中有不同称呼,如 crosscat、multi - clust、nested partitioning 等。当应用于包含 22 个动物和 106 个特征的二进制数据时,该模型的 MAP 估计将列划分为不同的分区,每个分区根据不同特征对动物进行聚类。例如,第一个分区根据分类特征将动物分为鸟类、爬行动物/两栖动物、哺乳动物和无脊椎动物;第三个分区根据生态特征将动物分为猎物、陆地捕食者、海洋捕食者和空中捕食者。

双向聚类模型比较表格

模型 特点 适用场景
基本双向聚类 每行和每列只能属于一个聚类 数据结构相对简单,对象角色单一
嵌套分区模型(Crosscat) 每行可根据不同列特征属于不同聚类 数据复杂,对象具有多种角色

双向聚类流程 mermaid 图

graph LR
    A[定义数据矩阵 X] --> B[为行和列关联潜在指标 U 和 V]
    B --> C[使用概率生成模型 p(U)、p(V)、p(X|U, V, θ)]
    C --> D[进行聚类划分]
    D --> E[评估聚类结果]

3. 推荐系统

3.1 显式反馈

在推荐系统中,显式反馈是一种常见的情况,即用户以评分的形式(如 +1 或 -1 表示喜欢或不喜欢,或 1 到 5 的评分)向系统提供明确的反馈。我们可以将用户 $u$ 对物品 $i$ 的评分 $Y_{ui}$ 表示为一个 $M \times N$ 矩阵,其中 $M$ 是用户数量,$N$ 是物品数量。通常,这个矩阵非常稀疏,因为大多数用户不会对大多数物品提供反馈。

我们也可以将这个稀疏矩阵看作一个二分图,其中 $u - i$ 边的权重为 $Y_{ui}$。这反映了我们处理的是关系数据,$u$ 和 $i$ 的值本身没有内在意义,重要的是它们之间的连接。

如果 $Y_{ui}$ 缺失,可能是用户没有与物品 $i$ 交互,也可能是用户知道自己不喜欢而选择不参与。为了简化,我们假设数据是随机缺失的。

3.1.1 数据集

有许多著名的显式评分数据集。例如,曾经有一家电影流媒体公司发布了一个包含 100,480,507 条电影评分(1 到 5 分)的大型数据集,来自 480,189 个用户对 17,770 部电影的评价。尽管训练集规模很大,但评分矩阵仍然 99% 是稀疏的。不过,由于隐私问题,该数据集已不再可用。

幸运的是,明尼苏达大学的 MovieLens 小组发布了一个匿名的公共电影评分数据集,可用于研究。此外,还有其他公共显式评分数据集,如 Jester 笑话数据集和 BookCrossing 数据集。

3.1.2 协同过滤

协同过滤是解决推荐问题的原始方法。其核心思想是用户通过与其他用户共享评分来协作推荐物品。如果用户 $u$ 想知道是否要与物品 $i$ 交互,他们可以查看其他用户 $u’$ 对 $i$ 的评分,并取加权平均值:
[
\hat{Y} {ui} = \sum {u’:Y_{u’,i} \neq?} sim(u, u’) Y_{u’,i}
]
其中,如果条目未知,我们假设 $Y_{u’,i} =?$。传统方法通过比较集合 $S_u = {Y_{u,i} \neq? : i \in I}$ 和 $S_{u’} = {Y_{u’,i} \neq? : i \in I}$ 来衡量两个用户的相似度,但这可能会受到数据稀疏性的影响。下面我们将讨论一种基于学习每个物品和每个用户的密集嵌入向量的方法,以便在低维特征空间中计算相似度。

3.2 基于嵌入向量的推荐方法

为了克服协同过滤中数据稀疏性的问题,我们可以为每个物品和每个用户学习密集嵌入向量。具体步骤如下:
1. 初始化嵌入向量 :为每个用户 $u$ 初始化一个 $d$ 维的嵌入向量 $p_u$,为每个物品 $i$ 初始化一个 $d$ 维的嵌入向量 $q_i$。
2. 定义损失函数 :我们的目标是最小化预测评分 $\hat{Y} {ui} = p_u^T q_i$ 与真实评分 $Y {ui}$ 之间的误差。常见的损失函数是均方误差(MSE):
[
L = \sum_{(u,i) \in R} (Y_{ui} - p_u^T q_i)^2 + \lambda (|p_u|^2 + |q_i|^2)
]
其中,$R$ 是已知评分的集合,$\lambda$ 是正则化参数,用于防止过拟合。
3. 优化嵌入向量 :使用梯度下降等优化算法来更新嵌入向量 $p_u$ 和 $q_i$,以最小化损失函数 $L$。
4. 进行推荐 :对于未知评分的 $(u, i)$ 对,计算预测评分 $\hat{Y}_{ui} = p_u^T q_i$,并根据预测评分进行推荐。

推荐系统流程 mermaid 图

graph LR
    A[获取显式评分数据] --> B[构建评分矩阵或二分图]
    B --> C[处理数据稀疏性]
    C --> D[选择推荐方法(协同过滤或嵌入向量法)]
    D --> E[训练模型(学习嵌入向量或计算相似度)]
    E --> F[进行预测和推荐]
    F --> G[评估推荐效果]

推荐方法比较表格

推荐方法 优点 缺点 适用场景
协同过滤 简单直观,易于实现 受数据稀疏性影响大 数据相对密集,用户和物品数量较少
基于嵌入向量的方法 能处理数据稀疏性,可在低维空间计算相似度 计算复杂度较高,需要更多训练数据 数据稀疏,用户和物品数量较多

3.3 推荐系统的评估指标

为了评估推荐系统的性能,我们通常使用以下几种指标:
1. 均方误差(MSE)
[
MSE = \frac{1}{|R|} \sum_{(u,i) \in R} (Y_{ui} - \hat{Y} {ui})^2
]
其中,$|R|$ 是已知评分的数量。MSE 衡量了预测评分与真实评分之间的平均误差。
2. 平均绝对误差(MAE)
[
MAE = \frac{1}{|R|} \sum
{(u,i) \in R} |Y_{ui} - \hat{Y}_{ui}|
]
MAE 衡量了预测评分与真实评分之间的平均绝对误差。
3. 命中率(HR) :在推荐列表中,用户实际喜欢的物品所占的比例。
4. 归一化折扣累积增益(NDCG) :考虑了推荐列表中物品的排名,更注重排名靠前的物品。

评估指标总结列表

  • 均方误差(MSE) :注重整体误差大小,对大误差更敏感。
  • 平均绝对误差(MAE) :直观反映平均误差,不受误差正负影响。
  • 命中率(HR) :简单衡量推荐列表中命中用户喜好的比例。
  • 归一化折扣累积增益(NDCG) :综合考虑推荐排名,对排名靠前的命中更重视。

综上所述,谱聚类、双向聚类和推荐系统都是数据处理和分析中的重要技术。谱聚类通过图拉普拉斯矩阵的特征向量来进行聚类,能处理复杂的数据分布;双向聚类可以同时对数据矩阵的行和列进行聚类,适用于生物信息学和协同过滤等领域;推荐系统则根据用户的显式反馈为用户推荐物品,协同过滤和基于嵌入向量的方法是常见的推荐策略。在实际应用中,我们需要根据数据的特点和问题的需求选择合适的技术和方法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值