REaLTabFormer(使用 Transformers 的现实关系和表格数据)提供了一个用于合成不同类型表格数据的统一框架。序列到序列(Seq2Seq)模型用于生成合成关系数据集。非关系表格数据的 REaLTabFormer 模型使用 GPT-2,并且可以开箱即用地使用独立观察来对任何表格数据进行建模。
REaLTabFormer:使用 Transformer 生成真实的关系和表格数据
ArXiv 上的论文
REaLTabFormer 可在 PyPi 上使用,并且可以使用 pip 轻松安装(Python 版本 >= 3.7):
pip 安装 realtabformer
我们展示了使用 REaLTabFormer 进行建模并从经过训练的模型生成合成数据的示例。
笔记
在训练非关系表格模型时,该模型根据合成数据分布实现最佳停止标准。当合成数据分布接近真实数据分布时,模型将停止训练。
确保将epochs
参数设置为较大的数字,以使模型更好地拟合数据。当满足最佳停止标准时,模型将停止训练。
# pip install realtabformerimport pandas as pdfrom realtabformer import REaLTabFormerdf = pd.read_csv("foo.csv")# 注意:删除您不想建模的数据中的任何唯一标识符。# 非关系表或父表。 rtf_model = REaLTabFormer(model_type="表格",gradient_accumulation_steps=4,logging_steps=100)#在数据集上拟合模型。# 可以将其他参数传递给 `.fit` 方法。rtf_model.fit(df)# 将模型保存到当前目录。# 将创建一个新目录 `rtf_model/`。#在其中,还将创建一个带有模型#实验ID `idXXXX`的目录#,其中将存储模型的工件。rtf_model.save("rtf_model/")#使用相同的数据生成合成数据#作为真实数据集的观测值数量。samples = rtf_model.sample(n_samples=len(df))# 加载保存的模型。必须提供#实验的目录。rtf_model2 = REaLTabFormer.load_from_dir(path="rtf_model/idXXXX")
# pip install realtabformerimport osimport pandas as pdfrom pathlib import Pathfrom realtabformer import REaLTabFormerparent_df = pd.read_csv("foo.csv")child_df = pd.read_csv("bar.csv")join_on = "unique_id"# 确保关键列# 父表和子表具有相同的名称。assert ((join_on in parent_df.columns) and(join_on in child_df.columns))# 非关系表或父表。不包含# unique_id field.parent_model = REaLTabFormer(model_type="tabular")parent_model.fit(parent_df.drop(join_on, axis=1))pdir = Path("rtf_parent/")parent_model.save(pdir)# # 获取最近保存的父模型,# # 或指定其他保存的模型。#parent_model_path = pdir / "idXXX"parent_model_path =排序([p for p in pdir.glob("id*") if p.is_dir()],key=os.path.getmtime)[-1]child_model = REaLTabFormer(model_type="relational",parent_realtabformer_path=parent_model_path,output_max_length=None,train_size=0.8)child_model.fit(df=child_df,in_df=parent_df,join_on=join_on)# 生成父样本.parent_samples = Parent_model.sample(len(parend_df) ))# 根据以下内容创建唯一的 id index.parent_samples.index.name = join_onparent_samples = Parent_samples.reset_index()# 生成关系观测值.child_samples = child_model.sample(input_unique_ids=parent_samples[join_on],input_df=parent_samples.drop(join_on, axis=1),gen_batch=64 )
REaLTabFormer 框架提供了一个接口,可以轻松构建观察验证器以过滤无效的合成样本。我们在下面展示了使用GeoValidator
的示例。左图显示了生成的经纬度未经验证的分布情况。右侧的图表显示了合成样本以及已使用GeoValidator
与加利福尼亚州边界进行验证的观测结果。尽管如此,即使我们没有最佳地训练模型来生成它,无效样本(落在边界之外)在没有验证器的生成数据中也很少见。
# !pip install geopandas &> /dev/null# !pip install realtabformer &> /dev/null# !git clone https://github.com/joncutrer/geopandas-tutorial.git &> /dev/nullimport geopandasimport seaborn as sns导入 matplotlib.pyplot as pltfrom realtabformer 导入 REaLTabFormerfrom realtabformer 导入 rtf_validators as rtf_valfrom shapely.geometry 导入多边形、线串、点、多多边形来自 sklearn.datasets 导入 fetch_california_housingdefplot_sf(数据、样本、标题=无):xlims = (-126, -113.5)ylims = (31, 43)bins = (50, 50) dd = 样本.copy()pp = dd.loc[dd["经度"]. Between(data["经度"].min(), data["经度"].max()) &dd["纬度"]. Between(data["纬度"] .min(), 数据["纬度"].max()) ]g = sns.JointGrid(data=pp, x="经度", y="纬度", margin_ticks=True)g.plot_joint(sns.histplot,bins=bins, )states[states['NAME'] == '加利福尼亚'].boundary.plot(ax=g.ax_joint)g.ax_joint.set_xlim(*xlims)g.ax_joint.set_ylim(*ylims)g.plot_marginals(sns. histplot,元素=“步骤”,颜色=“#03012d”)if title:g.ax_joint.set_title(title)plt.tight_layout()# 获取地理文件states = geopandas.read_file('geopandas-tutorial/data/usa-states-census-2014.shp')states = states.to_crs("EPSG :4326") # GPS 投影# 获取加州住房数据集data = fetch_california_housing(as_frame=True).frame# 我们为演示创建一个小纪元的模型,默认为 200.rtf_model = REaLTabFormer(model_type="tabular",batch_size=64,epochs=10,gradient_accumulation_steps=4,logging_steps=100) # 拟合指定模型。我们还减少了num_bootstrap,默认为500。rtf_model.fit(data, num_bootstrap=10)#保存训练好的模型rtf_model.save("rtf_model/")#不带validator的原始数据样本samples_raw = rtf_model.sample(n_samples=10240, gen_batch= 512)# 带有地理的样本数据 validatorobs_validator = rtf_val.ObservationValidator()obs_validator.add_validator("geo_validator",rtf_val.GeoValidator(MultiPolygon(states[states['NAME'] == '加利福尼亚'].geometry[0])), (“经度”、“纬度”) )samples_validated = rtf_model.sample(n_samples=10240, gen_batch=512,validator=obs_validator, )# 可视化样本plot_sf(data,样本_raw,title=“原始样本”)plot_sf(data,samples_validated,title=“验证样本”)
如果您在项目或研究中使用 REaLTabFormer,请引用我们的工作。
@article{solatorio2023realtabformer,title={REaLTabFormer:使用 Transformer 生成现实关系和表格数据},作者={Solatorio,Aivin V. 和 Dupriez,Olivier},journal={arXiv 预印本 arXiv:2302.02041},year={2023}}
我们感谢世界银行-难民署被迫流离失所问题联合数据中心(JDC)资助“加强负责任的微观数据获取以改善被迫流离失所情况下的政策和响应”项目(KP-P174174-GINP-TF0B5124)。该基金的一部分用于支持 REaLTabFormer 框架的开发,该框架用于生成用于研究披露风险和马赛克效应的合成群体。
我们还发送?到拥抱的脸?他们发布的所有开源软件。感谢所有开源项目,谢谢!