zmactep / ig-pipeline

2 stars 0 forks source link

Рефакторинг IG-SNOOPER #15

Closed zmactep closed 10 years ago

zmactep commented 10 years ago
  1. Переписать скрипты запуска на Питоне
  2. Обеспечить интерфейсы типа:

    train.py fasta kabat model_name config predict.py fasta model_name config

  3. Config:

    window_size avg_size merge_threashold model_path out_dir tools_path remove-trash-flag

  4. Автогенерация header по типу последовательности (меньше треша, нет неприятностей с weka)
Feodorov commented 10 years ago

Конфиг в ig-pipeline/config/ig-snooper.conf. Все значения из конфига можно переопределить в командной строке (кроме clean_up). Если значения в командной строке нет - данные берутся из конфига. Вот пример использования:

Acer-3:ig_snooper_utils Kos$ python train.py --config_path=/Users/Kos/Dropbox/Biocad/ig-pipeline/config/ig-snooper.conf --fasta=/Users/Kos/Dropbox/Biocad/ig-pipeline/data/train/VDJH_train.fasta --kabat=/Users/Kos/Dropbox/Biocad/ig-pipeline/data/train/VDJH_train.kabat --model_name=mdl_test
Generating train data in libsvm format...
Done. Applying NumericToNominal conversion...
Done. Train...
Deleting unnecessary files...
Done in 0:00:41.649521
Your model is in /Users/Kos/Downloads/mdl_test
Acer-3:ig_snooper_utils Kos$ python predict.py --config_path=/Users/Kos/Dropbox/Biocad/ig-pipeline/config/ig-snooper.conf --fasta=/Users/Kos/Dropbox/Biocad/ig-pipeline/data/train/VJL_shuffle.fasta --model_path=/Users/Kos/Downloads/mdl_test
Generating predict data in libsvm format...
Done. Applying NumericToNominal conversion...
Done. Predict...
Deleting unnecessary files...
Done in 0:01:24.329010

Использованный конфиг:

{
    "ml_window_size" : 10,
    "avg_window_size" : 8,
    "merge_threshold" : 5,
    "model_path" : "/Users/Kos/Downloads",
    "outdir" : "/Users/Kos/Downloads",
    "tools_root" : "/Users/Kos/Dropbox/Biocad/ig-pipeline/tools",
    "clean_up" : true
}
zmactep commented 10 years ago

При использовании без конфигурационного файла происходит фигня:

python train.py --fasta ../../data/train/VDJH_train.fasta --kabat ../../data/train/VDJH_train.kabat --model_name VDJH_human --ml_window_size 13 --tools_root ../ --outdir ~/Data/snoop/VH/

Generating train data in libsvm format...
Done. Applying NumericToNominal conversion...
Done. Train...
'clean_up'

python predict.py --fasta ~/Data/sim/compare.fasta --model_path ~/Data/snoop/VH/VDJH_human --ml_window_size 13 --avg_window_size 8 --merge_threshold 5 --tools_root ../ --outdir ~/Data/snoop/

Generating predict data in libsvm format...
Done. Applying NumericToNominal conversion...
Done. Predict...
java.lang.Exception: training and test set are not compatible
        at weka.classifiers.Evaluation.evaluateModel(Evaluation.java:1034)
        at weka.classifiers.Classifier.runClassifier(Classifier.java:312)
        at weka.classifiers.trees.RandomForest.main(RandomForest.java:574)
Failed to predict.
zmactep commented 10 years ago

При наличии конфигурации та же фигня:

{
    "ml_window_size" : 10,
    "avg_window_size" : 8,
    "merge_threshold" : 5,
    "model_path" : "/home/mactep/Data/snoop/VH",
    "outdir" : "/home/mactep/Data/snoop",
    "tools_root" : "/home/mactep/DEV/production/ig-pipeline/tools",
    "clean_up" : true
}
Generating train data in libsvm format...
Done. Applying NumericToNominal conversion...
Done. Train...
Deleting unnecessary files...
Done in 0:00:36.271983
Your model is in /home/mactep/Data/snoop/VDJH_human

python predict.py --fasta ~/Data/sim/compare.fasta --model_path ~/Data/snoop/VH/VDJH_human --config_path=/home/mactep/DEV/production/ig-pipeline/config/ig-snooper.conf

Generating predict data in libsvm format...
Done. Applying NumericToNominal conversion...
Done. Predict...
java.lang.Exception: training and test set are not compatible
        at weka.classifiers.Evaluation.evaluateModel(Evaluation.java:1034)
        at weka.classifiers.Classifier.runClassifier(Classifier.java:312)
        at weka.classifiers.trees.RandomForest.main(RandomForest.java:574)
Failed to predict.
Feodorov commented 10 years ago

Дело в заголовке для веки. Тут написано:

java.lang.Exception: training and test set are not compatible

Выложи эти файлы, я посмотрю почему заголовки в тренировочной и предсказательной выборке получаются разными.

Feodorov commented 10 years ago

А вообще, выложи побольше примеров с реальными данными для тестирования. Буду разбираться с заголовком, видимо там не все так просто как кажется.

zmactep commented 10 years ago

Все ушло в почту

Feodorov commented 10 years ago

Если я правильно понял, все файлы в архиве - из одного запуска.

Вот тренировочный файл train_nominal_fixed.arff:

@relation /home/mactep/Data/snoop/VH/train.libsvm-weka.filters.unsupervised.attribute.NumericToNominal-Rfirst-last

@attribute att_1 {65,67,71,84,78,42}
@attribute att_2 {65,67,71,84,78,42}
@attribute att_3 {65,67,71,84,78,42}
@attribute att_4 {65,67,71,84,78,42}
@attribute att_5 {65,67,71,84,78,42}
@attribute att_6 {65,67,71,84,78,42}
@attribute att_7 {65,67,71,84,78,42}
@attribute att_8 {65,67,71,84,78,42}
@attribute att_9 {65,67,71,84,78,42}
@attribute att_10 {65,67,71,84,78,42}
@attribute att_11 {65,67,71,84,78,42}
@attribute att_12 {65,67,71,84,78,42}
@attribute att_13 {65,67,71,84,78,42}
@attribute class {0,1,2,3,4,5,6}

@data

{6 67,7 65,8 71,9 71,10 84,11 84,12 67}
{5 67,7 71,8 71,9 84,10 84,11 67,12 65}
{4 67,5 65,6 71,7 71,8 84,9 84,10 67,11 65,12 71}
{3 67,4 65,5 71,6 71,7 84,8 84,9 67,10 65,11 71,12 67}
{2 67,3 65,4 71,5 71,6 84,7 84,8 67,9 65,10 71,11 67,12 84}
{1 67,2 65,3 71,4 71,5 84,6 84,7 67,8 65,9 71,10 67,11 84,12 71}

Он распознался как нуклеотидный, так как 65 - это A, 67 - C и т.д. Всего 6 возможных символов (добавочные символы - N и *).

А вот предиктовый файл:

@relation /home/mactep/Data/snoop/predict.libsvm-weka.filters.unsupervised.attribute.NumericToNominal-Rfirst-last

@attribute att_1 {65,82,78,68,67,69,81,71,72,73,76,75,77,70,80,83,84,87,89,86,42}
@attribute att_2 {65,82,78,68,67,69,81,71,72,73,76,75,77,70,80,83,84,87,89,86,42}
@attribute att_3 {65,82,78,68,67,69,81,71,72,73,76,75,77,70,80,83,84,87,89,86,42}
@attribute att_4 {65,82,78,68,67,69,81,71,72,73,76,75,77,70,80,83,84,87,89,86,42}
@attribute att_5 {65,82,78,68,67,69,81,71,72,73,76,75,77,70,80,83,84,87,89,86,42}
@attribute att_6 {65,82,78,68,67,69,81,71,72,73,76,75,77,70,80,83,84,87,89,86,42}
@attribute att_7 {65,82,78,68,67,69,81,71,72,73,76,75,77,70,80,83,84,87,89,86,42}
@attribute att_8 {65,82,78,68,67,69,81,71,72,73,76,75,77,70,80,83,84,87,89,86,42}
@attribute att_9 {65,82,78,68,67,69,81,71,72,73,76,75,77,70,80,83,84,87,89,86,42}
@attribute att_10 {65,82,78,68,67,69,81,71,72,73,76,75,77,70,80,83,84,87,89,86,42}
@attribute class {0,1,2,3,4,5,6}

@data

{5 81,6 86,7 81,8 76,9 86}
{4 81,5 86,6 81,7 76,8 86,9 81}
{3 81,4 86,5 81,6 76,7 86,8 81,9 83}
{2 81,3 86,4 81,5 76,6 86,7 81,8 83,9 71}
{1 81,2 86,3 81,4 76,5 86,6 81,7 83,8 71,9 71}
{0 81,1 86,2 81,3 76,4 86,5 81,6 83,7 71,8 71,9 71}
{0 86,1 81,2 76,3 86,4 81,5 83,6 71,7 71,8 71,9 76}

Он - аминокислотный. Поэтому-то модели и не совпадают. Посмотрел внимательно в присланный отдельно файл compare.fasta - он и правда аминокислотный. Так работать не будет :)

zmactep commented 10 years ago

Да, это меня что-то переклинило. :) Не посмотрел файл, который подсунул. Сейчас еще попроверяю.

synteny commented 10 years ago

Никто не против объединить train.py и predict.py в один скрипт, поскольку их код сильно дублируется? Если хочется сохранить две разных команды для вызова из консоли, можно создать train.sh и predict.sh, тем более что shell script все равно необходим, чтобы прописывать путь на common_lib в PYTHONPATH перед запуском.

Feodorov commented 10 years ago

Против. Нужно будет менять логику в бэкэнде и записи в базе данных. Если очень хочется, вынеси общие части скриптов в отдельный модуль, но оставь файлы train.py и predict.py. Необходимо, чтобы я мог вызывать их со старыми параметрами. train.py должен выглядеть аналогично https://github.com/zmactep/ig-pipeline/blob/master/ig-tools/ig-simplecluster/clusterize.py - парсишь параметры, а потом вызываешь общий код из какого-то модуля.