LFCDR:Latent mutual feature extraction for cross-domain recommendation

LFCDR是一种异构的跨域推荐方法,通过潜在特征提取和迁移学习改善异构域的推荐效果。模型解决了无共享用户、项目和元数据的挑战,利用潜在特征相关性提高稀疏域的推荐性能。实验表明,LFCDR相比传统方法如LFR和FM,具有更好的性能和隐私安全性。

Latent mutual feature extraction for cross-domain recommendation

Knowledge and Information Systems-Hoon Park , Jason J. Jung-2024

思路

大部分研究都是主要集中在同构域,所以在没有共同用户的情况下,项目和元数据的异构对推荐任务造成了限制。
于是提出一个异构的CDR,叫做潜在特征跨域推荐LFCDR。
模型利用了潜在特征LF,它基于领域类别构建用户和项目特征之间的相关性,领域类别即领域属性。通过提取每个域的LF,找到相似的域潜在特征,并通过迁移学习提高稀疏域的性能。

构建挑战

1、没有共同用户
2、没有共同项目
3、没有共同元数据(即没有内容级重叠)
4、没有类似模式

相关工作

异构CDR

研究环境中不涉及每个域中的共享用户、项目和元信息。
基于码本的知识转移模型CBT使用正交非负矩阵三因子分解ONMTF的聚类算法构建,在域不共享的环境中,通过从源域发送集群级别的类模式来重建目标域矩阵。
基于潜在因子对齐的跨域CF模型(CDCFLFA)模型提出了一种基于CBT模型考虑潜在因素对齐问题的方法。
这些模型都假设同构域,而异构CDR假设异构环境,需要改变传递和改进信息的方法。

隐私保护的CDR

传统的CDR采用因子分解并通过共享公共项来传输数据,这在同构域环境中很有效,但是我们的异构域环境需要一个新的保护隐私的迁移学习方法。

定义

### 基于潜在图的自适应特征填补方法原理及实现 #### 算法原理 基于潜在图的自适应特征填补方法(Adaptive Feature Imputation with Latent Graph for Deep Incomplete Multi-View Clustering)是一种针对深度不完整多视图聚类问题提出的解决方案。该方法的核心思想是通过构建一个潜在图来捕捉不同视图之间的关系,并利用这种关系进行特征填补,从而提高聚类性能。 1. **潜在图的构建** 潜在图用于建模视图间的依赖关系和样本间的相似性。具体来说,每个节点代表一个样本,边的权重反映了样本之间的相似性或视图间的相关性[^1]。通过学习潜在图的结构,算法能够更好地理解数据中的隐含模式。 2. **自适应特征填补** 在多视图数据中,某些视图可能存在缺失值。为了解决这一问题,算法采用自适应特征填补机制,利用其他完整视图的信息对缺失部分进行估计。填补过程通常结合图卷积网络(Graph Convolutional Network, GCN)或其他图神经网络模型来完成[^2]。 3. **深度聚类框架** 该方法将特征填补与深度聚类相结合,在填补过程中逐步优化聚类结果。深度神经网络被用来提取高层次的特征表示,而潜在图则帮助在网络训练过程中传播信息,使得模型能够更准确地处理不完整的多视图数据[^1]。 4. **优化目标** 算法的目标函数通常包括以下几部分: - 特征重建损失:衡量填补后的特征与实际观察到的特征之间的差异。 - 聚类损失:确保生成的特征表示能够很好地支持最终的聚类任务。 - 图正则化项:约束潜在图的结构,使其更加稀疏且具有物理意义[^2]。 #### 实现步骤 以下是基于潜在图的自适应特征填补方法的一个可能实现: ```python import numpy as np import torch import torch.nn as nn import torch.optim as optim # 定义潜在图模块 class LatentGraphModule(nn.Module): def __init__(self, num_nodes, hidden_dim): super(LatentGraphModule, self).__init__() self.fc = nn.Linear(num_nodes, hidden_dim) self.relu = nn.ReLU() def forward(self, x): return self.relu(self.fc(x)) # 定义特征填补模块 class FeatureImputationModule(nn.Module): def __init__(self, input_dim, output_dim): super(FeatureImputationModule, self).__init__() self.fc = nn.Linear(input_dim, output_dim) def forward(self, x): return self.fc(x) # 定义深度聚类模块 class DeepClusteringModule(nn.Module): def __init__(self, input_dim, num_clusters): super(DeepClusteringModule, self).__init__() self.fc = nn.Linear(input_dim, num_clusters) self.softmax = nn.Softmax(dim=1) def forward(self, x): return self.softmax(self.fc(x)) # 数据初始化 num_samples = 100 num_views = 3 input_dim = 64 output_dim = 32 hidden_dim = 128 num_clusters = 5 # 创建模拟数据 data = [torch.randn(num_samples, input_dim) for _ in range(num_views)] missing_mask = [torch.randint(0, 2, (num_samples, input_dim)) for _ in range(num_views)] # 初始化模型 latent_graph = LatentGraphModule(num_samples, hidden_dim) feature_imputation = FeatureImputationModule(input_dim, output_dim) deep_clustering = DeepClusteringModule(output_dim, num_clusters) # 定义损失函数和优化器 reconstruction_loss_fn = nn.MSELoss() clustering_loss_fn = nn.CrossEntropyLoss() optimizer = optim.Adam(list(latent_graph.parameters()) + list(feature_imputation.parameters()) + list(deep_clustering.parameters()), lr=0.001) # 训练循环 for epoch in range(100): for view_idx in range(num_views): # 构建潜在图 latent_graph_output = latent_graph(data[view_idx]) # 特征填补 imputed_features = feature_imputation(latent_graph_output * missing_mask[view_idx]) # 深度聚类 clustering_result = deep_clustering(imputed_features) # 计算损失 reconstruction_loss = reconstruction_loss_fn(imputed_features, data[view_idx]) clustering_loss = clustering_loss_fn(clustering_result, torch.randint(0, num_clusters, (num_samples,))) total_loss = reconstruction_loss + clustering_loss # 反向传播 optimizer.zero_grad() total_loss.backward() optimizer.step() if epoch % 10 == 0: print(f"Epoch {epoch}, Loss: {total_loss.item()}") ``` #### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值