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")# 注意:刪除您不想建模的資料中的任何唯一識別碼。 model_type="tabular",gradient_accumulation_steps=4,logging_steps=100)# 在資料集上擬合模型。 `rtf_model/`。的合成資料。必須提供#實驗的目錄。
# 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") 確保父親表同名。不包含# 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) # 取得最近儲存的父模型,# # 或指定其他已儲存的模型。 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.Fdf=;父樣本.parent_samples = Parent_model.sample(len(parend_df))# 根據索引建立唯一的id.parent_samples.index.name = join_onparent_samples = Parent_samples.reset_index()# 產生關係觀測值.child_samples = Parent_samples.reset_index()# 產生關係觀測值.child_samples = Parent_samples.reset_smodelunkamples_sde_samples =sde_sl; [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/bornnullimport 片語snsimport matplotlib.pyplot as pltfrom realtabformer import REaLTabFormerfrom realtabformer import rtf_validators as rtf_valfrom shapely.geometry import Polygon, LineString, Point, MultiPolygonfrom sklekle.data_orntry -126, -113.5) ylims = (31, 43)bins = (50, 50)dd = Samples.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, element="step", color="#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。 =10240, gen_batch= 512)# 帶有地理驗證器的樣本資料obs_validator = rtf_val.ObservationValidator()obs_validator.add_validator("geo_validator",rtf_val.GeoValidator(Mulultial thestate'Mul. ].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}, }
我們感謝世界銀行-難民署被迫流離失所問題聯合資料中心(JDC)資助「加強負責任的微觀資料取得以改善被迫流離失所情況下的政策和回應」計畫(KP-P174174-GINP-TF0B5124 )。該基金的一部分用於支持 REaLTabFormer 框架的開發,該框架用於產生用於研究揭露風險和馬賽克效應的合成群體。
我們還發送?到擁抱的臉?他們發布的所有開源軟體。感謝所有開源項目,謝謝!