New tests and his starting scripts

This commit is contained in:
Mihail Savostikov
2026-10-25 19:08:11 +03:00
parent 5a4a19e0df
commit c131815fc7
9 changed files with 638 additions and 0 deletions

View File

@@ -0,0 +1,140 @@
#!/usr/bin/env bash
# Тюнинг поверх полной серии scripts/run_all_experiments.sh.
# Не повторяет E0–E16: только гиперпараметры, состав признаков, веса, k LSA.
#
# Запуск из каталога lab1:
# bash scripts/run_tuning_experiments.sh
#
# Быстрый черновик:
# REPEATS=1 bash scripts/run_tuning_experiments.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
cd "${PROJECT_ROOT}"
PYTHON="${PYTHON:-python}"
REPEATS="${REPEATS:-3}"
SEED="${SEED:-42}"
PRESET="${PRESET:-stylometry_pos_lsa}"
LOG_DIR="${PROJECT_ROOT}/results/logs"
mkdir -p "${LOG_DIR}"
RUN_ID="${RUN_ID:-$(date +%Y%m%d_%H%M%S)}"
LOG_FILE="${LOG_DIR}/tune_${RUN_ID}.log"
exec > >(tee -a "${LOG_FILE}") 2>&1
step() {
echo
echo "============================================================"
echo "== $*"
echo "============================================================"
}
run() {
echo
echo ">>> $*"
"$@"
}
echo "Тюнинг: $(date)"
echo "Интерпретатор: ${PYTHON}"
echo "Повторы: ${REPEATS}, seed: ${SEED}, пресет: ${PRESET}"
echo "Лог: ${LOG_FILE}"
step "T1. Logreg: C"
for c in 0.03 0.1 0.3 1 3 10; do
run "${PYTHON}" -m stylometry.cli run \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}" \
--model-params "{\"C\": ${c}}"
done
step "T2. Linear SVM: C"
for c in 0.03 0.1 0.3 1 3 10; do
run "${PYTHON}" -m stylometry.cli run \
--preset "${PRESET}" --model linear_svc \
--repeats "${REPEATS}" --seed "${SEED}" \
--model-params "{\"C\": ${c}}"
done
step "T3. Logreg без балансировки классов"
run "${PYTHON}" -m stylometry.cli run \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}" \
--model-params '{"class_weight": null}'
step "T4. Без vocabulary и readability"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_no_vocab_readability.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
step "T5. Без vocabulary, readability и length"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_no_vocab_readability_length.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
step "T6. Char/POS n-граммы"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_char_narrow.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_char_wide.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
step "T7. Веса блоков"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_block_weights.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
step "T8. LSA k=150 и k=300 (в полной серии были 50/100/200)"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_lsa_k150.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_lsa_k300.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
run "${PYTHON}" -m stylometry.cli lsa-sweep \
--variants word,content,fw,char,pos \
--components 150,300 \
--model logreg --repeats 1 --seed "${SEED}"
step "T9. Случайный лес: глубина и лист"
for depth in 10 20 30; do
for leaf in 2 3 5; do
run "${PYTHON}" -m stylometry.cli run \
--preset "${PRESET}" --model random_forest \
--repeats "${REPEATS}" --seed "${SEED}" \
--model-params "{\"max_depth\": ${depth}, \"min_samples_leaf\": ${leaf}}"
done
done
run "${PYTHON}" -m stylometry.cli run \
--preset "${PRESET}" --model random_forest \
--repeats "${REPEATS}" --seed "${SEED}" \
--model-params '{"max_depth": 20, "min_samples_leaf": 3, "max_features": 0.1}'
step "T10. Extra trees (не было в benchmark полной серии)"
run "${PYTHON}" -m stylometry.cli run \
--preset "${PRESET}" --model extra_trees \
--repeats "${REPEATS}" --seed "${SEED}" \
--model-params '{"max_depth": 20, "min_samples_leaf": 3}'
step "T11. Дельта: 50 и 1000 MFW (100/200/500 уже в полной серии)"
run "${PYTHON}" -m stylometry.cli delta \
--features 50,1000 --metrics manhattan,cosine \
--repeats 2 --seed "${SEED}"
step "Готово"
echo "Конец тюнинга: $(date)"
echo "Лог: ${LOG_FILE}"
echo
echo "Сравнить два каталога:"
echo " python -m stylometry.cli compare --run-a results/<A> --run-b results/<B>"