This repo trains IEKT with a strict 80% train / 20% test split (no validation set).
- Python 3.8+
torchpandasnumpytqdmscikit-learn
Install:
pip install torch pandas numpy tqdm scikit-learnPlace raw CSV files at:
Data/ASSIST2017/anonymized_full_release_competition_dataset.csvData/Statics2011/AllData_student_step_2011F.csv
Preprocessing outputs:
history_train.pklhistory_test.pklproblem_skill_maxSkillOfProblem_number.pkl
python Data/preprocess_iekt_assist2017.py \
--input_csv Data/ASSIST2017/anonymized_full_release_competition_dataset.csv \
--output_dir Data/iekt_assist2017 \
--min_seq_len 10 \
--max_concepts 5 \
--train_ratio 0.8 \
--seed 42python Data/preprocess_iekt_statics2011.py \
--input_csv Data/Statics2011/AllData_student_step_2011F.csv \
--output_dir Data/iekt_statics2011 \
--min_seq_len 10 \
--max_concepts 5 \
--train_ratio 0.8 \
--seed 42If you previously created dataset_valid.pkl or old cached datasets, remove them before retraining:
rm -f Data/iekt_assist2017/dataset_*.pkl
rm -f Data/iekt_statics2011/dataset_*.pklmain.py now loads only train and test.
python main.py \
--run_dir runs/assist2017 \
--data_dir Data/iekt_assist2017/ \
--model iekt \
--device 0 \
--n_epochs 300 \
--batch_size 32 \
--lr 1e-3 \
--seq_len 200python main.py \
--run_dir runs/statics2011 \
--data_dir Data/iekt_statics2011/ \
--model iekt \
--device 0 \
--n_epochs 300 \
--batch_size 32 \
--lr 1e-3 \
--seq_len 200CPU example:
python main.py --run_dir runs/cpu --data_dir Data/iekt_assist2017/ --device -1Each epoch logs:
test_auctest_accloss
Example:
Epoch: 010, Loss: 0.1234567, test_auc: 0.8123456, test_acc: 0.7456789
Log file:
<run_dir>/log.txt