shinka-backup / analyze /README.md
JustinTX's picture
Add files using upload-large-folder tool
1556404 verified

🔬 实验对比分析工具

这个目录包含用于对比和分析实验结果的通用工具。

📂 目录结构

analyze/
├── src/                           # 分析脚本源代码
│   ├── compare_experiments.py     # 通用实验对比工具
│   └── analyze_aux_metrics.py     # 辅助指标分析工具
├── outputs/                       # 默认输出目录(分析结果)
├── run.sh                         # 快速运行实验对比示例
├── run_aux_analysis.sh            # 快速运行辅助指标分析示例
├── example_usage.sh               # 使用示例脚本
└── README.md                      # 本文件

🚀 快速开始

基本用法

对比两个实验run(结果会自动保存到 analyze/outputs/):

python analyze/src/compare_experiments.py \
  examples/circle_packing/results/exp1_dir \
  examples/circle_packing/results/exp2_dir

使用 tag 参数组织输出

推荐方式:使用 --tag 参数将结果保存到 analyze/outputs/TAG/ 子目录:

python analyze/src/compare_experiments.py \
  path/to/exp1 \
  path/to/exp2 \
  --tag vision_comparison

输出位置:analyze/outputs/vision_comparison/

使用自定义标签

python analyze/src/compare_experiments.py \
  path/to/exp1 \
  path/to/exp2 \
  --labels "实验A" "实验B" \
  --tag experiment_a_vs_b

完全自定义输出目录

如果需要完全自定义输出路径(不在 analyze/outputs 下):

python analyze/src/compare_experiments.py \
  path/to/exp1 \
  path/to/exp2 \
  --labels "WITH Vision" "WITHOUT Vision" \
  --output-dir custom/path/my_comparison

📊 输出内容

每次运行会在指定的输出目录生成:

  1. comparison_plots.png - 包含4个子图的可视化对比:

    • 分数演化曲线 - 两个实验随代数的最佳分数变化
    • 达到分数里程碑所需代数 - 对比达到不同分数阈值(每0.5划分)所需的代数(越低越好)
    • 分数分布直方图 - 所有代数分数的分布情况
    • 累积最优曲线 - 历史最佳分数的演化
  2. comparison_results.json - 详细的对比数据(JSON格式):

    • 每个实验的统计信息
    • 对比结果和改进百分比
    • 实验元信息

🔧 完整参数

python analyze/src/compare_experiments.py [-h] 
  exp1_path exp2_path 
  [--labels LABEL1 LABEL2]
  [--tag TAG]
  [--output-dir OUTPUT_DIR]
  [--threshold THRESHOLD]
参数 说明 默认值
exp1_path 第一个实验的结果目录 必需
exp2_path 第二个实验的结果目录 必需
--labels 两个实验的自定义标签 从目录名生成
--tag 输出子目录标签(结果保存到 analyze/outputs/TAG/ None
--output-dir 完全自定义输出目录(优先级高于 --tag analyze/outputsanalyze/outputs/TAG
--threshold 重大改进的阈值 0.05

输出目录优先级--output-dir > --tag > 默认 (analyze/outputs)

📝 使用示例

示例1: 对比有无Vision(使用 tag)

python analyze/src/compare_experiments.py \
  examples/circle_packing/results/results_circle_packing_WITH_vision_20260114_065819 \
  examples/circle_packing/results/results_circle_packing_WITHOUT_vision_20260114_070110 \
  --labels "WITH Vision" "WITHOUT Vision" \
  --tag vision_comparison

输出:

  • analyze/outputs/vision_comparison/comparison_plots.png
  • analyze/outputs/vision_comparison/comparison_results.json

示例2: 对比不同辅助指标配置

python analyze/src/compare_experiments.py \
  examples/circle_packing/results/results_circle_packing_NO_vision_WITH_aux_20260118_072141 \
  examples/circle_packing/results/results_circle_packing_NO_vision_WITH_refined_aux_20260118_205215 \
  --labels "All 7 Metrics" "Refined 4 Metrics" \
  --tag aux_7vs4

输出:

  • analyze/outputs/aux_7vs4/comparison_plots.png
  • analyze/outputs/aux_7vs4/comparison_results.json

示例3: 快速对比(使用默认设置)

python analyze/src/compare_experiments.py \
  path/to/exp1 \
  path/to/exp2

输出直接保存到 analyze/outputs/

示例4: 使用 uv 运行

uv run python analyze/src/compare_experiments.py \
  exp1 exp2 \
  --labels "A" "B" \
  --tag experiment_a_vs_b

🎯 功能特性

灵活 - 接受任意两个实验目录作为输入
智能 - 自动在多种目录结构中查找数据库
可视化 - 生成4个专业的对比图表,包括创新的里程碑达成对比
详细 - 输出完整的统计对比和时序分析
导出 - JSON格式方便后续处理

📈 里程碑图表说明

Generations to Reach Score Milestones 图表特别有用,它显示:

  • X轴:分数阈值(按0.5递增,如1.0, 1.5, 2.0, 2.5...)
  • Y轴:达到该阈值所需的代数
  • 对比:两个实验并排对比,可以清楚看出哪个实验更快达到特定分数
  • 越低越好 - 柱子越短表示越快达到目标分数

📄 屏幕输出示例

================================================================================
🔬 ANALYZING EXPERIMENTS: WITH Vision vs WITHOUT Vision
================================================================================

📁 Experiment 1: examples/circle_packing/results/results_circle_packing_WITH_vision_...
📁 Experiment 2: examples/circle_packing/results/results_circle_packing_WITHOUT_vision_...
📂 Output Dir:   analyze/outputs

🔍 Finding database files...
   ✅ WITH Vision: evolution_db_circle_packing_WITH_vision_20260114_065819.sqlite
   ✅ WITHOUT Vision: evolution_db_circle_packing_WITHOUT_vision_20260114_070110.sqlite

📊 Loading experiment data...
   ✅ Loaded 1250 programs from WITH Vision
   ✅ Loaded 1180 programs from WITHOUT Vision

================================================================================
📊 EXPERIMENT COMPARISON: WITH Vision vs WITHOUT Vision
================================================================================

🎯 FINAL RESULTS:
   WITH Vision         : 2.5786
   WITHOUT Vision      : 2.5507
   Improvement:         +1.09% ✅ WITH Vision Better

📈 STATISTICS:
┌─────────────────────────────────────────────┬──────────────────┬──────────────────┐
│ Metric                                      │   WITH Vision    │  WITHOUT Vision  │
├─────────────────────────────────────────────┼──────────────────┼──────────────────┤
│ Total Programs                              │             1250 │             1180 │
│ Correct Programs                            │              985 │              920 │
...
└─────────────────────────────────────────────┴──────────────────┴──────────────────┘

🏆 KEY MILESTONES:
...

⏱️  IMPROVEMENT TIMING ANALYSIS:
...

🎨 Generating comparison plots...
📊 Plots saved to: analyze/outputs/comparison_plots.png

💾 Saving detailed comparison data...
   ✅ JSON saved to: analyze/outputs/comparison_results.json

================================================================================
✅ ANALYSIS COMPLETE!
================================================================================

📊 Output files:
   • Plots: analyze/outputs/comparison_plots.png
   • Data:  analyze/outputs/comparison_results.json

🏆 Winner: WITH Vision (by 1.09%)

🆘 故障排除

找不到数据库文件

错误No database file found in: path/to/experiment

解决:确保实验目录包含 evolution_db_*.sqlite 文件

路径不存在

错误Results directory not found: path/to/experiment

解决:检查路径是否正确,使用绝对路径或从项目根目录的相对路径

📚 相关工具

my/ 目录下还有其他专用的分析脚本:

  • compare_aux_experiments.py - 专门对比辅助指标实验
  • analyze_vision_results.py - 专门对比vision实验
  • plot_latest_results.py - 自动找最新实验对比

本工具 (compare_experiments.py) 是最通用和灵活的版本,推荐优先使用。


🔍 辅助指标分析工具

工具2: analyze_aux_metrics.py

专门分析单个实验中辅助指标(auxiliary metrics)的演化和与主要分数的相关性。

快速开始

python analyze/src/analyze_aux_metrics.py \
  path/to/experiment \
  --tag aux_analysis

功能特性

  1. 📈 指标演化分析 - 展示每个辅助指标随代数的变化趋势
  2. 🔗 相关性分析 - 计算每个辅助指标与主要分数(combined_score)的Pearson相关系数
  3. 📊 可视化对比 - 自动生成3个详细的分析图表
  4. 📉 统计显著性 - 提供p值和显著性标记(***, **, *, ns)

输出内容

生成3个PNG图表和1个JSON数据文件:

  1. aux_metrics_evolution.png

    • 所有辅助指标的演化曲线(多子图)
    • 每个指标包含趋势线
  2. aux_metrics_correlation.png

    • 相关性条形图(按绝对值排序)
    • Top 4指标的散点图和回归线
    • 颜色编码表示代数
  3. score_and_top_metrics.png

    • 主要分数演化
    • Top 3辅助指标演化(归一化)
  4. aux_metrics_correlation.json

    • 完整的相关性数据
    • 分类统计(强正相关、弱正相关等)

使用示例

# 基本用法
python analyze/src/analyze_aux_metrics.py \
  examples/circle_packing/results/results_circle_packing_NO_vision_WITH_aux_20260118_072141

# 使用tag组织输出
python analyze/src/analyze_aux_metrics.py \
  path/to/experiment \
  --tag my_aux_analysis

# 指定自定义标签
python analyze/src/analyze_aux_metrics.py \
  path/to/experiment \
  --label "My Experiment" \
  --tag aux_metrics

快速运行

# 运行预配置的示例
bash analyze/run_aux_analysis.sh

相关性解读

  • 强正相关 (>0.7): 该指标与分数高度一致,可能是有效的优化目标
  • 弱负相关 (<-0.4): 该指标可能与主要目标冲突,建议移除
  • 显著性标记:
    • *** p < 0.001 (高度显著)
    • ** p < 0.01 (显著)
    • * p < 0.05 (边缘显著)
    • ns 不显著