====== Argumenty na příkazové řádce ======
Hodně užitečných nástrojů pro uživatele počítačů má formu příkazů/skriptů spouštěných z příkazové řádky (''ls'', ''dir'', ''grep'', ...). Tyto příkazy obvykle přijímají argumenty uvedené na příkazové řádce za příkazem (např. ''ls -la''), které ovlivňují chování příkazu. Python obsahuje standardní modul [[https://docs.python.org/3/library/argparse.html|argparse]] ([[https://docs.python.org/3/howto/argparse.html|tutorial]]), který umožňuje snadno konfigurovat možné parametry skriptu a následně je snadno zpracovat.
===== Využití v úloze klasifikace znaků =====
Skript, který máte vytvořit, se má chovat podle [[courses:b3b33kui:semestralni_ulohy:5_ml:start#specifikace|specifikací]]. To lze zajistit např. tak, že modul ''argparse'' pro klasifikátor k-NN nakonfigurujete následujícím způsobem:
import argparse
def setup_arg_parser():
parser = argparse.ArgumentParser(description='Learn and classify image data.')
parser.add_argument('train_path', type=str, help='path to the training data directory')
parser.add_argument('test_path', type=str, help='path to the testing data directory')
parser.add_argument('-k', type=int,
help='number of neighbours (if k is 0 the code may decide about proper K by itself')
parser.add_argument("-o", metavar='filepath',
default='classification.dsv',
help="path (including the filename) of the output .dsv file with the results")
return parser
Když pak tuto funkci použijete takto:
parser = setup_arg_parser()
args = parser.parse_args()
print(args.train_path)
proměnná ''args'' bude obsahovat všechny potřebné informace předané skriptu na příkazové řádce a můžete s nimi dál pracovat. Pro naivní bayesovský klasifikátor stačí uvedený kód jen drobně modifikovat (odstranit argument ''-k'').
===== Kostry modulů ''knn.py'' a ''naive_bayes.py'' =====
Soubory {{ :courses:b3b33kui:cviceni:strojove_uceni:knn.py |}} a {{ :courses:b3b33kui:cviceni:strojove_uceni:naive_bayes.py |}} můžete použít jako výchozí kostru vašeho řešení. Pokud např. modul ''knn.py'' spustíte jako
python3 knn.py -k 3 ./train_data ./test_data
měli byste vidět následující výstup:
Training data directory: ./train_data
Testing data directory: ./test_data
Output file: classification.dsv
Running k-NN classifier with k=3
tedy
* adresáře s trénovacími a testovacími daty specifikované na příkazové řádce,
* název výstupního souboru, který na příkazové řádce specifikován nebyl a ''argparse'' doplnil výchozí hodnotu, a
* zvolený počet sousedů //k// pro k-NN. (Klasifikátor ale musíte implementovat sami. :-) )
Modul ''naive_bayes.py'' můžete použít obdobně.