PsyTrainer
==========

PsyTrainer 由 ccpl-training-project（作者：CCPL，Apache License 2.0）整理改编而成，
遵循 Apache License 2.0 发布，许可证全文见 LICENSE。

相对原项目所做的修改（依据 Apache-2.0 第 4(b) 条予以说明）：
1. 项目、发行包与导入包重命名：ccpl-training-project / ccpl_training_models -> psytrainer。
2. 移除 apps/（针对具体研究场景的旧接口，含安装后无法导入的非包内引用）与 demo/（依赖未随包发布的测试数据）。
3. 清理各子包 __init__.py 中修改 sys.path 的开发期代码。
4. lightgbm 由可选依赖改为必需依赖，与书中"12种回归模型/9种分类模型均可运行"的说明一致。
5. 新增 requires-python 限制（>=3.9.11,<3.12，由 numpy/pandas 版本约束决定）。
6. 示例数据由广告投入数据集替换为程序模拟生成的 LIWC 词频与 PHQ-9 数据（见 scripts/gen_liwc_demo.py）。
7. 修复：显式指定特征处理方法（如 ff_tags=["FFByPca"]）时，pca_num 大于特征数会导致 PCA 报错；现与 "all_ff" 一致，自动取特征总维数（trainer.py）。
8. 修复：r2 评分器误设 greater_is_better=False，导致输出的 r2 为真实 R² 的相反数；已更正（util/scoring_utils.py）。
9. 修复数据泄漏：原工具在交叉验证之前对全部样本一次性完成重采样与特征处理（含依赖标签的逐步前向选择、单变量回归筛选），验证折的信息会泄漏到训练中，使交叉验证指标偏乐观。
   现改为在每一折内仅用训练部分拟合：特征处理类新增 fit/transform；新增 feature/ff_transformer.py 与 sampler/resampling_classifier.py；
   model/model_training.py 将"特征处理 -> 重采样 -> 模型"组装为 Pipeline 交给 GridSearchCV。
   保存的 model.pkl 由"仅模型"变为包含特征处理（及重采样包装）的完整流程，可直接对原始特征调用 predict。
10. 修复：使用多种重采样方法（如 "all_resample"）时，后一种方法误在前一种方法的重采样结果上继续采样（随第9条的重构一并消除）。
11. 修复：单变量回归筛选（FFByFregression）遗漏最后一个特征；且没有特征达到阈值时会崩溃，现保留F值最大的一个特征。
12. 新增 tests/ 测试与 scripts/ 示例数据生成脚本。

各源文件头部保留原作者署名。
