New tests and his starting scripts
This commit is contained in:
140
lab1/scripts/run_tuning_experiments.sh
Executable file
140
lab1/scripts/run_tuning_experiments.sh
Executable 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>"
|
||||
Reference in New Issue
Block a user