On Combining Bags to Better Learn from Label Proportions:标签比例学习的组合袋方法复现指南

发布时间:2026/11/13 8:52:31

On Combining Bags to Better Learn from Label Proportions:标签比例学习的组合袋方法复现指南 On Combining Bags to Better Learn from Label Proportions标签比例学习的组合袋方法复现指南【免费下载链接】google-researchGoogle Research项目地址: https://gitcode.com/gh_mirrors/go/google-research本文是 Google Research 开源仓库中 AISTATS22 论文《On Combining Bags to Better Learn from Label Proportions》的完整复现与源码解析指南。该目录On_Combining_Bags_to_Better_Learn_from_Label_Proportions提供了一套端到端的实验代码从 UCI 小规模基准数据集的预处理、袋bag级训练/测试数据生成到多种标签比例学习Learning from Label Proportions, LLP算法的训练、评估与结果汇总并延伸到 Criteo Kaggle 与 MovieLens 20m 两个大规模数据集实验。读完本文你将掌握该论文全部三组实验伪合成数据集、大规模数据集、大规模数据集-2的复现流程、七种袋生成场景与广义袋Generalized Bags方法的底层实现原理。背景从袋比例中学习标签标签比例学习LLP是一类特殊的弱监督学习设定训练阶段无法访问单个样本的标签只能拿到每个袋bag中正例所占的比例。经典做法是 Mean-MapMM估计、LMM 及其变体等。本文档对应的论文进一步研究了如何组合多个袋来更好地学习标签比例核心创新在于引入**广义袋Generalized Bags**框架允许对袋内样本赋予权重如 SDP 求解得到的权重从而把单袋比例约束推广为带权重的线性约束族。仓库代码围绕三类实验展开伪合成数据集实验在 Ionosphere、Australian、Heart 三个 UCI 数据集上按多种分布场景构造袋对比经典基线与广义袋方法大规模数据集实验Criteo Kaggle 展示广告数据集事件级逻辑回归 广义袋大规模数据集-2 实验MovieLens 20m 数据集上的同类实验。仓库结构与实验总体流程以仓库根目录为基准实验目录结构如下On_Combining_Bags_to_Better_Learn_from_Label_Proportions/ ├── Code/ │ ├── GenBagTfCode/ # 广义袋/袋方法 TensorFlow 训练method1~method7 │ ├── ProcessingResults/ # 结果汇总与指标提取 │ ├── PythCode/ # LMMCM 基线的 Python 循环 │ ├── RCode/ # MM/LMM/AMM 基线的 R 脚本method1~method7 │ ├── TrainTestCreation/ # 预处理、五折划分、袋生成 │ └── requirements.txt ├── Large_dataset/ # Criteo 大规模实验 │ ├── Dataset_Preprocessing/ # 特征分桶、划分与袋文件生成 │ ├── SDP_solving/ # 广义袋 SDP 权重求解 │ └── Training_loops/ # 线性逻辑回归与袋训练循环 ├── Large_dataset_2/ # MovieLens 20m 大规模实验 ├── GenBagCode.sh # 运行袋/广义袋方法 1~7 ├── RCode.sh # 运行 R 基线方法 1~7 ├── PythCode.sh # 运行 LMMCM 基线 ├── dataCreation.sh # 预处理 划分 袋生成 ├── resultsProcessing.sh # 汇总原始结果 └── Large_Dataset_expts.sh # Criteo 全流程脚本 └── Large_Dataset_2_expts.sh # MovieLens 20m 全流程脚本顶层脚本 GenBagCode.sh、RCode.sh、PythCode.sh、dataCreation.sh、resultsProcessing.sh 一一对应 README 中的复现步骤是理解整套流程的捷径。实验一伪合成数据集实验Pseudo-synthetic datasets步骤 1收集先前工作的基线代码论文对比了已有 LLP 方法需要先获取两个第三方仓库的代码按 README 要求固定到指定 commitalmostnolabelcommit4de5f54克隆为文件夹almostnolabel-main放置在包含本 README 的目录即On_Combining_Bags_to_Better_Learn_from_Label_Proportions/下Learning-from-Label-Proportions-A-Mutual-Contamination-Frameworkcommitadb57fa将其LMMCM目录内容复制到./Code/PythCode/。前者提供 MM、LMM、AMM 基线后者提供 LMMCM互污染框架基线。复制到Code/PythCode/后PythCode.sh 会依次执行ionosphereloops.py、australianloops.py、heartloops.py三个循环脚本完成 LMMCM 实验。步骤 2创建 Python 虚拟环境伪合成实验使用名为pythenv的 venv 环境Python 版本 3.9.2cd ./Code python -m venv pythenv source pythenv/bin/activate pip install -r requirements.txt deactivate依赖清单见 Code/requirements.txt固定版本如下依赖版本cvxopt1.2.6numpy1.19.5pandas1.2.4scikit-learn0.24.2scipy1.6.3tensorflow2.5.0rc1步骤 3创建 LMMCM 的 conda 环境LMMCM 基线依赖独立的 conda 环境LLP环境搭建方式遵循上述互污染框架仓库commitadb57fa的安装说明。步骤 4下载原始数据并生成袋级训练/测试数据在顶层目录包含 README.md 的目录创建OrigData/并下载三个 UCI 数据集mkdir OrigData cd OrigData wget http://archive.ics.uci.edu/ml/machine-learning-databases/ionosphere/ionosphere.data wget https://archive.ics.uci.edu/ml/machine-learning-databases/statlog/australian/australian.dat wget https://archive.ics.uci.edu/ml/machine-learning-databases/statlog/heart/heart.dat随后从顶层目录创建数据目录结构并运行预处理脚本mkdir -p Data/FullDatasets Data/Australian Data/Ionosphere Data/Heart source Code/pythenv/bin/activate ./dataCreation.sh deactivatedataCreation.sh 内部依次执行三个 Python 脚本preprocessingdata.py见 Code/TrainTestCreation/preprocessingdata.py读取OrigData/中的原始文件将标签映射为{-1, 1}Heart 中 2→1、其余→-1Ionosphere 中g→1、其余→-1Australian 中 1→1、其余→-1插入bag占位列与label列对特征列执行StandardScaler标准化并追加常数特征列constant输出Data/FullDatasets/*-Processed.csvfivefoldsplits.py见 Code/TrainTestCreation/fivefoldsplits.py生成五折训练/测试划分目录结构为Data/Dataset/Fold_k/Split_s/clusteringloopseeded.py见 Code/TrainTestCreation/clusteringloopseeded.py为每个划分生成方法 1~8 对应的袋文件存入ClusterBags_method/目录其中head_bags_i与tail_bags_i为 pickle 序列化的袋索引列表。步骤 5运行 MM / LMM / AMM 基线MM、LMM(v(G,s))、AMM(MM)、AMM(LMM(v(G,s))) 基线使用almostnolabel的 R 代码需要先安装 R。随后从顶层目录执行./RCode.shRCode.sh 会依次运行 Code/RCode/ 下的RCodeMethod1.R~RCodeMethod7.R七个 R 脚本对应方法 1~7 场景每个脚本的输出追加到同名.log文件最终结果写入Data/对应数据集目录。步骤 6运行 LMMCM 基线LMMCM 基线使用互污染框架的代码conda activate LLP ./PythCode.sh conda deactivate步骤 7运行 Bag 与 Generalized Bag 方法这是本论文的核心方法。从顶层目录执行source Code/pythenv/bin/activate ./GenBagCode.sh deactivateGenBagCode.sh 依次运行 Code/GenBagTfCode/ 下 7 个 TensorFlow 脚本覆盖 README 列出的全部方法组合LIN(KL-div, U)均匀权重 KL 散度损失method1~method7 各场景均含LIN(l_2^2, S)SDP/分布权重 平方欧氏距离损失LIN(l_2^2, U)均匀权重 平方欧氏距离损失LIN(l_2^2, R)随机权重 平方欧氏距离损失LIN(l_1, S)、LIN(l_1, U)、LIN(l_1, R)对应的 L1 损失变体。核心实现三种自定义损失以 method1loopseeded.py 为例其三种损失函数代表了广义袋训练的核心机制custom_loss_ell2sq_genbagL2 平方损失对每个广义袋genBag按权重wts加权求和袋内样本的预测与真实标签再对两者加权和计算 MSEcustom_loss_abs_genbagL1 损失同上但以 MAE 度量加权和的差异custom_loss_kld_genbagKL 散度损失先对加权和按总权重归一化得到袋内均值再分别对正类均值与反类均值1-均值计算 KL 散度并求和。数据组织上每个 batch 由META_BATCH_SIZE 32个广义袋组成每个广义袋从 head/tail 袋列表中按不同权重采样策略抽取子袋并打上wt权重与genBagNo袋编号标记模型为单层线性分类器Linearsigmoid 输出SGD 学习率0.0001共训练NUM_BATCHES 1000个批次。S 变体的权重由correlation_matrix见 matricesforgenbag.py 中a0.2, b0.2推导的[[3.125, -3.125], [-3.125, 3.125]]采样的多元正态分布给出U 变体为 one-hot 均匀权重R 变体为标准正态随机权重。方法 1~5 的权重矩阵均可在 matricesforgenbag.py 中直接查看其推导输出例如方法 2/3 的 6×6 对角块矩阵、方法 4 基于 power-lawscipy.stats.powerlaw(1.66)参数的矩阵、方法 5 的非对称 4×4 矩阵。七种袋生成场景对应 README 中 method1~method7 的袋构造方式在 clusteringloopseeded.py 中可查关键参数如下方法袋场景关键参数1单簇 head/tail 袋n_clusters1head/tail 包含概率 0.1/0.1n_head125, n_tail1252三簇 head/tail 袋n_clusters3head/tail 包含概率 0.9/0.1n_head40, n_tail40簇偏置[1,1,1]3三簇非对称偏置袋n_clusters3head/tail 0.9/0.1n_head15, n_tail15簇偏置[1,3,5]4power-law 分布袋head/tail 包含概率 -0.9/-0.1p_law_param1.66optionpowerlaw5多幂律非对称袋head/tail 幂律指数[1.7,1.6,1.9]/[1.1,1.2,1.01]见 bagsformethod5.py6单跨越袋straddlestraddle/tail 包含概率 0.2/0.6n_tail60, n_straddle607单跨越袋另一组参数straddle/tail 包含概率 0.4/0.8 与 0.2/0.28双跨越袋两组 straddle 概率 0.2/0.6 与 tail 0.2见 twostraddlebags.py方法 5/6/7 的袋由 bagsformethod5.py、singlestraddlebag.py、twostraddlebags.py 生成。测试阶段统一使用完整测试集test_df上wt0、genBagNo0以自定义 AUC 指标评估结果按数据集, 方法, split, fold, 各方法AUC的 CSV 行追加写入Data/Dataset/Dataset_TFexpOutputClusterBags_method文件。步骤 8~9结果收集与汇总mkdir -p Results/Raw_Results source Code/pythenv/bin/activate ./resultsProcessing.sh deactivateresultsProcessing.sh 先将Data/Heart、Data/Australian、Data/Ionosphere下的结果复制到Results/Raw_Results/再依次运行 Code/ProcessingResults/ 下的三个汇总脚本processing_r_results.py解析 R 基线输出processing_mutcon_results.py解析 LMMCM 基线输出processing_genbag_results.py解析广义袋方法输出。最终所有指标汇总至./Results/目录。实验二大规模数据集实验Criteo Kaggle数据准备与划分从 Criteo Kaggle 展示广告挑战赛下载数据集在./Large_dataset/Dataset_Preprocessing/Dataset/下放置train.txt在该目录下创建Split_0~Split_4五个子目录。环境搭建使用 Python 3.9.7 创建独立虚拟环境cd ./Large_dataset python -m venv pythenv_large source pythenv_large/bin/activate pip install -r requirements.txt依赖见 Large_dataset/requirements.txt。运行实验./Large_Dataset_expts.sh该脚本串联了三阶段处理预处理feature_bucketing.py完成特征分桶生成含C14_bucket等分桶索引的处理后数据train_test_splits_bags.py见 Large_dataset/Dataset_Preprocessing/train_test_splits_bags.py用KFold(n_splits5, shuffleTrue, random_state4091)划分训练/测试集并生成袋训练文件.ftrSDP 权重求解gen_bag_SDP.py见 Large_dataset/SDP_solving/gen_bag_SDP.py基于读取的corr_matrices_C14_bucket与mean_vecs_C14_bucket用 cvxpy 构造半正定矩阵变量W、Y_upper、Y_lower及W 0等约束求解广义袋的 SDP 权重训练循环lin_loop.py训练事件级线性逻辑回归bag_loop.py训练袋级广义袋模型对应 Large_dataset/Training_loops/。结果读取结果输出在./Large_dataset/Dataset_Preprocessing/Dataset/下各Split_i目录中results_lin_i事件级线性逻辑回归结果重点看val_auc列results_multi_genbags_i后 4 列分别为广义袋 SDP 权重 平方欧氏距离损失同上 L1 损失单袋 平方欧氏距离损失单袋 KL 散度损失。每行对应一个 epoch。实验三大规模数据集-2 实验MovieLens 20m流程与实验二完全平行从 GroupLens 下载 MovieLens 20m 数据集全部文件放入./Large_dataset_2/Dataset_Preprocessing/Dataset/创建Split_0~Split_4五个子目录Python 3.9.7 建环境pythenv_large_2依赖见 Large_dataset_2/requirements.txt从顶层运行./Large_Dataset_2_expts.sh。对应源码位于 Large_dataset_2/ 下的Dataset_Preprocessing/preprocessing_movielens20m.py、train_test_splits_bags_movielens20m.py、SDP_solving/gen_bag_SDP_movielens20m.py与Training_loops/bag_loop_movielens20m.py、lin_loop_movielens20m.py。结果同样落在各Split_i目录results_lin_ival_auc列为事件级线性逻辑回归结果result_multi_genbags_movielensi后 4 列为与实验二相同的四种广义袋/单袋方法组合每行对应一个 epoch。方法矩阵速查方法标识权重来源损失函数LIN(l_2^2, S)SDP/分布权重多元正态采样平方欧氏距离MSELIN(l_2^2, U)均匀权重one-hot平方欧氏距离MSELIN(l_2^2, R)标准正态随机权重平方欧氏距离MSELIN(l_1, S)SDP/分布权重L1MAELIN(l_1, U)均匀权重L1MAELIN(l_1, R)随机权重L1MAELIN(KL-div, U)均匀权重KL 散度复现注意事项环境隔离伪合成实验使用 venvpythenvPython 3.9.2LMMCM 使用 condaLLP两个大规模实验分别使用pythenv_large与pythenv_large_2均要求 Python 3.9.7互不干扰版本固定README 明确要求第三方基线仓库锁定到指定 commitalmostnolabel4de5f54、互污染框架adb57fa以保证实验可复现依赖版本敏感TensorFlow 固定为2.5.0rc1numpy 1.19.5 等版本与 TF 2.5 生态匹配升级依赖可能导致损失函数中tf.gather/tf.cond行为差异数据目录约定所有脚本通过pathlib相对__file__定位Data/、OrigData/等目录因此必须保持 README 规定的目录层级顶层目录执行./*.sh结果输出位置伪合成实验结果在Data/Dataset/与Results/大规模实验结果在各Split_i子目录AUC 为评估指标。总结本文档仓库完整承载了 AISTATS22 论文《On Combining Bags to Better Learn from Label Proportions》的全部复现链路伪合成实验覆盖 3 个 UCI 数据集 × 8 种袋生成场景 × 7 种算法含 3 组外部基线大规模实验验证了方法在 Criteo 与 MovieLens 20m 上的可扩展性。广义袋方法通过在单袋比例约束上叠加 SDP 求解的权重分配将经典 LLP 扩展为更灵活的带权组合优化问题。对于研究 LLP、袋学习或希望复现该论文实验的开发者可按本指南顺序依次执行五个顶层 shell 脚本并借助各源码模块深入理解实现细节。【免费下载链接】google-researchGoogle Research项目地址: https://gitcode.com/gh_mirrors/go/google-research创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/7 14:56:33

Filter/Interceptor在HTTPS下的暗坑与实战排查

这个题目放在一起看,有点“跨层”的味道:Filter、Interceptor是Java Web里的经典拦截机制,HTTPS则是网络传输层的东西。但真实项目里,这三者恰恰是纠缠最深的组合。我之前接手过一个服务,请求链路看起来没毛病——登录…

2026/11/11 1:24:48

AllData国产化适配实战:鲲鹏海光麒麟欧拉与OceanBase

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 6:16:20

C/C++ static关键字深度解析:从底层原理到工程实践

先说结论:static修饰局部变量改变的是生命周期和存储位置,static修饰全局变量改变的是链接属性,static修饰函数同样改变链接属性,而C里static用在类成员上还有另一层含义。这个知识点几乎每个人都背过,可真到项目里&am…

2026/11/13 8:47:39

睢县可以办电工证吗真实经历揭秘:怕考不过白交培训费

睢县可以办电工证吗真实经历揭秘:怕考不过白交培训费 怕考不过白交培训费?我有个朋友在睢县报名考电工证,结果花了三千块培训费,最后考试挂了,钱打水漂。他现在还在后悔,说早知道多看看别人的真实经历,就不会踩坑了。今天我来给大家讲讲,睢县真的能办…

2026/11/13 8:47:39

睢县可以办电工证吗?2026河南最新政策下的全流程避坑指南

睢县可以办电工证吗?2026河南最新政策下的全流程避坑指南 你是不是也在睢县为“睢县可以办电工证吗”这个问题发愁?怕找不到靠谱的报名点,更怕被那些黑中介忽悠,白白浪费钱还拿不到证?别担心,2026河南最新政策已经明确,…

2026/11/13 8:47:39

电工证年审流程全攻略 通过率揭秘怎么操作更稳妥

电工证年审流程全攻略 通过率揭秘怎么操作更稳妥 你是不是也遇到过这种情况,手里拿着电工证,但不知道怎么年审,怕被中介坑钱,还担心流程复杂,最后只能硬着头皮去问人?这不,我认识的许昌朋友老李就遇到过类似的事,他当初转岗做电工,想把证书年审搞定…

2026/11/13 8:47:39

起重类的特种工证丢了怎么补办多久拿证

起重类的特种工证丢了怎么补办多久拿证 你是不是学历不高,担心自己报不了名?别急,起重类的特种工证虽然听起来门槛高,但其实很多人都在做,关键看你有没有掌握正确的方法。今天就来聊聊 起重类的特种工 证的那些事儿,特别是关于 多久拿证…

2026/11/13 8:47:39

莆田考电工证全流程指南:没有这个证,连面试机会都没得谈

莆田考电工证全流程指南:没有这个证,连面试机会都没得谈 你是不是正为找工作发愁?电工证一没,连面试资格都拿不到。现在找工作,特种作业证成了刚需,尤其是【莆田考电工证】,没有它,很多岗位直接拒你。而且现在考下来的是 电子证书…

2026/11/12 20:35:13

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/13 0:01:06

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了 你是不是也像我一样,第一次听说“高压电工证”这个名词,就感觉一头雾水?其实很多人都跟我一样,不知道去哪报名、怕被中介坑,结果花了冤枉钱还考不上。今天我就从一个在商丘培训过的学员角度,…

2026/11/13 0:01:06

黎里考电工证在哪里值不值得考

黎里考电工证在哪里值不值得考 之前考的证在外省能不能转过来?这是很多在外地工作、准备回老家发展的朋友最关心的问题。特别是在黎里地区,很多从事电力相关工作的朋友,都面临这样一个难题: 外省的电工证能否在本地使用?值不值得考?…

2026/11/13 0:01:06

毕节哪里考电工证 怎么报名学历不高也能上手

毕节哪里考电工证 怎么报名学历不高也能上手 你是不是也和我一样,学历不高,想着考个电工证,但又担心自己条件不够,怕报不上名?其实不然,只要符合条件,学历不高也能考电工证。今天就来聊聊【毕节哪里考电工证】这个问题,还有怎么报名,让你一步到位不…

2026/11/12 22:10:13

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/12 9:51:42

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑