Config
Config(config)
Config 類別管理實驗配置並為 PETsARD 管線建立操作器執行流程。它解析配置字典、驗證設定,並生成操作器佇列進行順序執行。
設計概覽
Config 系統將宣告式配置轉換為可執行的管線流程。它處理模組排序、實驗命名和操作器實例化,同時提供驗證和錯誤檢查。
核心原則
- 宣告式配置:透過結構化字典定義實驗
- 自動流程生成:將配置轉換為可執行的操作器序列
- 驗證:全面的配置驗證和錯誤報告
- 靈活性:支援複雜實驗配置和自訂命名
參數
config
(dict):定義實驗管線的配置字典
配置結構
配置遵循階層結構:
{
"ModuleName": {
"experiment_name": {
"parameter1": "value1",
"parameter2": "value2"
}
}
}
配置範例
config_dict = {
"Loader": {
"load_data": {
"filepath": "data.csv"
}
},
"Splitter": {
"split_data": {
"train_split_ratio": 0.8,
"num_samples": 3
}
},
"Synthesizer": {
"generate": {
"method": "sdv",
"model": "GaussianCopula"
}
},
"Evaluator": {
"evaluate": {
"method": "sdmetrics"
}
},
"Reporter": {
"report": {
"method": "save_report",
"granularity": "global"
}
}
}
屬性
核心屬性
config
(queue.Queue):準備執行的實例化操作器佇列module_flow
(queue.Queue):對應每個操作器的模組名稱佇列expt_flow
(queue.Queue):對應每個操作器的實驗名稱佇列sequence
(list):執行順序的模組名稱列表yaml
(dict):處理後的配置字典
方法
配置處理
Config 類別在初始化期間自動處理配置:
- 驗證:檢查無效的實驗命名模式
- Splitter 展開:處理多樣本分割配置
- 操作器建立:為每個實驗實例化操作器
- 流程生成:使用深度優先搜尋建立執行佇列
特殊處理
Splitter 配置
Config 類別為具有多個樣本的 Splitter 配置提供特殊處理:
# 原始配置
"Splitter": {
"split_data": {
"train_split_ratio": 0.8,
"num_samples": 3
}
}
# 自動展開為:
"Splitter": {
"split_data_[3-1]": {"train_split_ratio": 0.8, "num_samples": 1},
"split_data_[3-2]": {"train_split_ratio": 0.8, "num_samples": 1},
"split_data_[3-3]": {"train_split_ratio": 0.8, "num_samples": 1}
}
實驗命名規則
- 實驗名稱不能以
_[xxx]
模式結尾(保留供內部使用) - 每個實驗名稱在其模組內必須唯一
- 名稱用於結果追蹤和報告
使用範例
基本配置
from petsard.config import Config
# 簡單管線配置
config_dict = {
"Loader": {
"load_data": {"filepath": "benchmark://adult-income"}
},
"Synthesizer": {
"generate": {"method": "sdv", "model": "GaussianCopula"}
}
}
config = Config(config_dict)
# 存取配置屬性
print(f"模組序列: {config.sequence}")
print(f"操作器數量: {config.config.qsize()}")
複雜多模組配置
from petsard.config import Config
config_dict = {
"Loader": {
"load_benchmark": {"method": "default"},
"load_custom": {"filepath": "custom_data.csv"}
},
"Preprocessor": {
"preprocess": {"method": "default"}
},
"Splitter": {
"split_train_test": {
"train_split_ratio": 0.8,
"num_samples": 5
}
},
"Synthesizer": {
"sdv_gaussian": {"method": "sdv", "model": "GaussianCopula"},
"sdv_ctgan": {"method": "sdv", "model": "CTGAN"}
},
"Evaluator": {
"evaluate_all": {"method": "sdmetrics"}
},
"Reporter": {
"save_results": {
"method": "save_data",
"source": "Synthesizer"
},
"generate_report": {
"method": "save_report",
"granularity": "global"
}
}
}
config = Config(config_dict)
與 Executor 整合
from petsard.config import Config
from petsard.executor import Executor
# Config 通常與 Executor 一起使用
config = Config(config_dict)
executor = Executor(config)
executor.run()
驗證和錯誤處理
配置驗證
Config 類別執行多項驗證檢查:
- 命名驗證:確保實驗名稱不使用保留模式
- 結構驗證:驗證適當的配置階層
- 參數驗證:委託給個別操作器進行參數檢查
錯誤類型
ConfigError
:無效配置結構或命名違規時引發- 模組特定錯誤:從個別操作器初始化傳播
架構優勢
1. 關注點分離
- 配置解析:處理結構和驗證
- 操作器管理:建立和組織執行單元
- 流程控制:管理執行序列和相依性
2. 靈活性
- 多個實驗:支援每個模組的多個實驗
- 複雜管線:處理任意模組組合
- 自訂配置:可擴展的參數系統
3. 驗證
- 早期錯誤檢測:在執行前捕獲配置問題
- 清晰錯誤訊息:詳細的除錯回饋
- 一致驗證:跨所有模組的標準化驗證
4. 整合
- Executor 相容性:與執行系統的無縫整合
- Status 管理:與 Status 追蹤系統相容
- 操作器抽象:對底層操作器的清潔介面
Config 系統為 PETsARD 靈活且強健的實驗配置提供基礎,透過簡單的宣告式規格實現複雜的資料處理管線。