目次
Classiasで分類器の学習を行うには,次のコマンドを用います.
$ classias-train [OPTIONS] [DATA1] [DATA2] ...
DATA1, DATA2, ...は学習データのファイルです. 学習データのファイルが指定されていないときは,標準入力から学習データを読み込みます. 学習データのファイルは,テキスト形式の他,gzip, bzip2, xzで圧縮された形式をサポートします. ファイル名の末尾が.gzで終わるときはgzip,.bz2で終わるときはbzip2,.xzで終わるときはxzユーティリティを呼び出して,学習データを自動的に解凍しながら読み込みます. 学習データのファイルが複数指定されたときは,先頭から順にグループ番号(1から開始)が割り当てられます. グループ番号は,評価用のデータセットを指定するときに使います.
コマンドラインの使用方法を見るには,-h (--help) オプションを使います.
$ classias-train -h Classias 1.0 trainer Copyright (c) 2008,2009 Naoaki Okazaki USAGE: classias-train [OPTIONS] [DATA1] [DATA2] ... This utility trains a model from training data set(s). DATA file(s) corresponding to data set(s) for training; if multiple N files are specified, this utility assigns a group number (1...N) to the instances in each file if no file is specified, the utility reads a data set from STDIN; if a file name has an extension '.gz', '.bz2', and '.xz', the utility uses 'gzip', 'bzip2', and 'xv' to decompress the input file OPTIONS: -t, --type=TYPE specify a task type (DEFAULT='multi-dense'): b, binary an instance consists of a boolean class, +1 or -1, and features m, multi-dense an instance consists of a label and attributes; features are automatically generated by combining possible pairs of attributes and labels regardless of the appearances in the training set n, multi-sparse an instance consists of a label and attributes; features are automatically generated by pairing attributes and labels appearing in the training set c, candidate an instance begins with a directive line '@boi' followed by lines that correspond to multiple candidates for the instance; a candidate line consists of a class label and features; an instance ends with a directive line '@eoi' -a, --algorithm=NAME specify a training algorithm (DEFAULT='lbfgs.logistic') lbfgs.logistic L1/L2-regularized logistic regression (LR) by L-BFGS averaged_perceptron averaged perceptron pegasos.logistic L2-regularized LR by Pegasos pegasos.hinge L2-regularized linear L1-loss SVM by Pegasos truncated_gradient.logistic L1-regularized LR by Truncated Gradient truncated_gradient.hinge L1-regularized L1-loss SVM by Truncated Gradient -p, --set=NAME=VALUE set the algorithm-specific parameter NAME to VALUE; use '-H' or '--help-parameters' with the algorithm name specified by '-a' or '--algorithm' and the task type specified by '-t' or '--type' to see the list of the algorithm-specific parameters -f, --shuffle shuffle (reorder) instances in the data -b, --bias=VALUE insert bias features with their values VALUE -m, --model=FILE store the model to FILE (DEFAULT=''); if the value is empty, this utility does not store the model -g, --split=N split the instances into N groups; this option is useful for holdout evaluation and cross validation -e, --holdout=M use the M-th data for holdout evaluation and the rest for training -x, --cross-validate repeat holdout evaluations for #i in {1, ..., N} (N-fold cross validation) -n, --negative=LABEL specify a negative label for computing precision, recall, and F1 scores -s, --token-separator=SEP assume SEP character as a token separator: ' ', s, spc, space a SPACE (' ') character (DEFAULT) '\t', t, tab a TAB ('\t') character ',', c, comma a COMMA (',') character -c, --value-separator=SEP assume SEP character as a value separator: ':', c, colon a COLON (':') character (DEFAULT) '=', e, equal a EQUAL ('=') character '|', b, bar a BAR ('|') character -h, --help show this help message and exit -H, --help-parameters show the help message of algorithm-specific parameters; specify an algorithm with '-a' or '--algorithm' option, and specify a task type with '-t' or '--task' option
以下,各オプションを説明します.
- -t, --type=TYPE
- タスクのタイプを指定します.
デフォルトは密な素性による多クラス分類(m, multi-dense)です.
- b, binary
- 二値分類
- m, multi-dense
- 密な素性を生成する多クラス分類.学習データに含まれる属性とラベルの可能な組み合わせの全てを使って素性を生成します.
- n, multi-sparse
- 疎な素性を生成する多クラス分類.学習データに含まれる事例の属性とラベルの組み合わせを使って素性を生成します.
- c, candidate
- 候補選択
- -a, --algorithm=NAME
- 学習アルゴリズムを指定します.
デフォルトはlbfgs.logisticです.
- lbfgs.logistic
- L-BFGS法もしくはOW-LQN法による勾配降下法でL1/L2正則化付きロジスティック回帰モデル(最大エントロピーモデル)をバッチ学習します.すべてのタスクタイプに対応します.
- averaged_perceptron
- 平均化パーセプトロン(averaged perceptron)で学習します.すべてのタスクタイプに対応します.
- pegasos.logistic
- Primal Estimated sub-GrAdient SOlver (Pegasos) による確率的勾配降下法で,L2正則化付きロジスティック回帰モデル(最大エントロピーモデル)をオンライン学習します.すべてのタスクタイプに対応します.
- pegasos.hinge
- Primal Estimated sub-GrAdient SOlver (Pegasos) による確率的勾配降下法で,L2正則化付きL1損失SVMをオンライン学習します.二値分類のみに対応します.
- truncated_gradient.logistic
- Truncated Gradientによる確率的勾配降下法で,L1正則化付きロジスティック回帰モデル(最大エントロピーモデル)をオンライン学習します.すべてのタスクタイプに対応します.
- truncated_gradient.hinge
- Truncated Gradientによる確率的勾配降下法で,L1正則化付きL1損失SVMをオンライン学習します.二値分類のみに対応します.
- -p, --set=NAME=VALUE
- 学習アルゴリズムのNAMEというパラメータをVALUEにセットします.利用出来るパラメータ名NAMEや,パラメータの値VALUEの型は,学習アルゴリズムやタスク・タイプ毎に異なります.設定できるパラメータのリストや,デフォルト値を確認するには,タスクタイプを-tオプション,学習アルゴリズムを-aオプションで指定して,-Hオプションを利用してください.
- -f, --shuffle
- 読み込んだ事例の順序をランダムに並び替えます.デフォルトでは並び替えを行いません.
- -b, --bias=VALUE
- VALUEが0以外のときは,バイアス項に相当する素性を自動的に追加し,その素性の値をVALUEとします.デフォルト値は1.0です.このオプションは二値分類及び多値分類タスクでのみ有効です.候補選択タスクでは,VALUEの設定に関わらず,バイアス項に相当する素性は生成されません.
- -m, --model=FILE
- 学習結果の重みベクトル(分類器のモデル)を,FILEに格納します.デフォルトではモデルファイル名は設定されておらず,学習結果のモデルがファイルに保存されません.
- -g, --split=N
- 読み込んだ学習データセットの事例を,N個のグループに分割します.-xオプションと組み合わせて,N分割交叉検定を行うために用いられます.デフォルトでは,分割を行いません.
- -e, --holdout=M
- グループ番号Mの事例を用いて,holdout評価を行います.グループ番号Mの事例は,学習に用いられません.デフォルトでは,holdout評価を行いません.
- -x, --cross-validate
- 交叉検定を行います.分割数を指定するには,-gオプションを使ってください.デフォルトでは交叉検定を行いません.
- -n, --negative=LABEL
- 負例のラベルを指定します.これは,多クラス分類及び候補選択タスクにおいて,適合率・再現率・F1スコアの計算に用いられます.負例に相当するラベルが複数あるときは,このオプションを複数回使用してください.デフォルトでは,全てを正例と見なして評価値が計算されます.
- -s, --token-separator=SEP
- ラベルと素性・属性の区切り文字を指定します.
- ' ', s, spc, space
- スペース文字(デフォルト)
- '\t', t, tab
- タブ文字
- ',', c, comma
- カンマ
- -c, --value-separator=SEP
- 素性・属性とその値の区切り文字を指定します.
- ':', c, colon
- コロン(デフォルト)
- '=', e, equal
- イコール文字
- '|', b, bar
- バー(|)文字
- -h, --help
- ヘルプメッセージを表示します.
- -H, --help-parameters
- アルゴリズム毎のパラメータ(-pオプションで使われる)のリストと,使用方法を表示します.タスクタイプを-tオプション,学習アルゴリズムを-aオプションで指定してください.例えば,二値分類タスクにおける"pegasos.hinge"アルゴリズムのパラメータのリストを表示するには,以下のようにします.
$ classias-train -tb -a pegasos.hinge -H Classias 1.0 trainer Copyright (c) 2008,2009 Naoaki Okazaki Coefficient for L2 regularization. double c = 1 The number of instances in the data set. double n = 1 Initial learning rate double eta = 0.1 The method for sampling instances. string sample = 'shuffle' The maximum number of iterations (epochs). int max_iterations = 1000 The period to measure the improvement ratio int period = 20 The stopping criterion for the improvement ratio double epsilon = 0.0001
現在,Classiasで使えるバッチ学習アルゴリズムは,L-BFGS法(lbfgs.logistic)のみになります.
L-BFGS法(もしくはOW-LQN法)による勾配法で,ロジスティック回帰モデル(最大エントロピーモデルとも呼ばれる)を学習を行います. 設定できるパラメータは以下の通りです.
- c1=VALUE
- L1正則化の係数を指定します.素性の重みのL1ノルムにかける係数で,正則化項は c1 * |W| となります.素性の重みの分散を表すパラメータをσとすると,c1 = 1 /σ の関係にあります.デフォルト値は0(L1正則化は無効)です.c1とc2の両方を正の値に設定することで,L1正則化とL2正則化を同時に適用することができます.
- c2=VALUE
- L2正則化の係数を指定します.素性の重みのL2ノルムにかける係数で,正則化項は c2 * ||W|| となります.素性の重みの分散を表すパラメータをσとすると,c2 = 0.5 /σ^2 の関係にあります.デフォルト値は1.0です.c1とc2の両方を正の値に設定することで,L1正則化とL2正則化を同時に適用することができます.
- epsilon=VALUE
- 目的関数(損失関数)の収束を検出する閾値を指定します.目的関数の勾配ベクトルをg,素性の重みベクトルをx,設定された値をepsilonとすると,以下の条件が成立したときにL-BFGSの反復を終了します.
||g|| < epsilon * max(1, ||x||)
ただし,||.||はL2ノルムを表します.デフォルト値は1e-5です. - delta=VALUE
- L-BFGSの反復を打ち切るための条件を指定します.現在の目的関数の値をfとして,lbfgs.stop回前の反復の目的関数値をf',設定された値をdeltaとすると,以下の条件が成立したときにL-BFGSの反復アルゴリズムを打ち切ります.
(f' - f) / f < delta
デフォルト値は1e-5です.lbfgs.epsilonでは反復がなかなか終了しないことがあるため,この反復打ち切り条件が導入されました. - stop=NUM
- L-BFGSの反復を打ち切るための条件(lbfgs.delta)において,過去何回の反復まで遡るかを指定します.デフォルト値は10です.
- max_iterations=NUM
- L-BFGSの反復回数の上限値を指定します.デフォルト値として,整数の最大値がセットされています.
- num_memories=VALUE
- 過去何回の反復結果を用いてヘッセ行列の逆行列を推定するかを指定します.デフォルト値は6です.
- linesearch=METHOD
- L-BFGSアルゴリズムの中で用いられる線形探索のアルゴリズムを指定します.デフォルトでは,MoreThuente法(L1正則化が無効のとき)もしくはBacktracking法(L1正則化が有効のとき)です.
- max_linesearch=NUM
- L-BFGSアルゴリズムの中で用いられる線形探索ルーチンの反復最大数を設定します.デフォルト値は20です.
以下に,オンライン学習アルゴリズムで共通に使えるパラメータを挙げます.
- sample=METHOD
- 学習アルゴリズムがどのように学習事例を選ぶのか指定します."cycle"は,学習セットに含まれる事例の順序を変更することなく,先頭から一つずつ更新アルゴリズムを適用します."random"は,学習セットに含まれる事例集合からランダムに1つずつ事例を取り出し,更新アルゴリズムを適用します."shuffle"は,各反復において学習セットに含まれる事例をランダムに並び替え,先頭から一つずつ更新アルゴリズムを適用します.デフォルトは"shuffle"です.
- period=NUM
- 目的関数(損失関数)の収束を判別する反復数を指定します.デフォルトは20です.
- epsilon=VALUE
- 目的関数(損失関数)の収束を検出する閾値を指定します.periodパラメータで指定された値をKとすると,過去K回の反復で得られた目的関数値の分散を計算し,その分散の値をmax(1, |現在の反復で得られた目的関数値|)で割った値がVALUE値を下回ったとき,学習アルゴリズムを停止させます.デフォルト値は0.0001です.この値を大きくすると,収束の検出が甘くなるため,学習が高速に行えるようになりますが,分類器の精度が低下する恐れがあります.しかし,学習アルゴリズムによっては,デフォルトの値0.0001は厳しめなので,速度と精度のトレードオフを調べながら調整してください.
- max_iterations=NUM
- 反復回数の上限値を指定します.デフォルト値は1000です.収束検出に頼らず,強制的に反復を打ち切って学習を高速化させたいときは,この値を小さくしてください.
オンライン学習アルゴリズムとして,以下のものが利用可能です.
Primal Estimated sub-GrAdient SOlver (Pegasos) に基づく学習器です. pegasos.logisticは,ロジスティック損失関数を用いたL2正則化付きロジスティック回帰, pegasos.hingeは,ヒンジ損失関数を用いたL2正則化付きL1損失SVMです. 学習時のパラメータは以下の通りです.
- c=VALUE
- L2正則化の係数を指定します.素性の重みのL2ノルムにかける係数で,正則化項は c * ||W|| となります.素性の重みの分散を表すパラメータをσとすると,c = 0.5 /σ^2 の関係にあります.デフォルト値は1.0です.
- n=NUM
- 学習データセットの事例数を指定します.このパラメータは学習器が自動的に設定するので,指定する必要はありません.
- eta=VALUE
- 学習アルゴリズム開始直後の学習率を指定します.デフォルト値は0.1です.
Truncated Gradientに基づく学習器です. この学習アルゴリズムは,L1正則化に特殊化した FOrward LOoking Subgradient (FOLOS) と等価です. truncated_gradient.logisticは,ロジスティック損失関数を用いたL1正則化付きロジスティック回帰, truncated_gradient.hingeは,ヒンジ損失関数を用いたL1正則化付きL1損失SVMです. 学習時のパラメータは以下の通りです.
- c=VALUE
- L1正則化の係数を指定します.素性の重みのL1ノルムにかける係数で,正則化項は c * ||W|| となります.素性の重みの分散を表すパラメータをσとすると,c = 1 /σ の関係にあります.デフォルト値は1.0です.
- n=NUM
- 学習データセットの事例数を指定します.このパラメータは学習器が自動的に設定するので,指定する必要はありません.
- eta=VALUE
- 学習アルゴリズム開始直後の学習率を指定します.デフォルト値は0.1です.
学習で獲得した分類器を適用するには,次のコマンドを用います.
$ classias-tag [OPTIONS]
分類を行うデータは標準入力から与えられるものと仮定します. 分類のタスク・タイプは,-mオプションで指定したモデルから自動的に決定されます. 分類を行うデータの形式は,学習に用いるデータ形式と同一で,ラベルのフィールドを省略することはできません(事例のラベルは空文字列にしてください). 事例の正解ラベルが分かっていて,分類器の評価に利用したいときは,入力データに事例のラベルをセットしてください. 分類結果は標準出力に出力されます.
コマンドラインの使用方法を見るには,-h (--help) オプションを使います.
$ classias-tag -h USAGE: classias-tag [OPTIONS] This utility tags labels for a data set read from STDIN. OPTIONS: -m, --model=FILE load the model from FILE -t, --test evaluate the tagging performance on the labeled data -n, --negative=LABEL assume LABEL to be a negative label -w, --score output scores for the labels -p, --probability output probabilities for the labels -r, --reference output reference labels as well as predicted labels -k, --comment output comment lines in the tagging output -a, --all output all candidate labels in the tagging output -f, --false output false instances only -q, --quiet suppress tagging results from the output -s, --token-separator=SEP assume SEP character as a token separator: ' ', s, spc, space a SPACE (' ') character (DEFAULT) '\t', t, tab a TAB ('\t') character ',', c, comma a COMMA (',') character -c, --value-separator=SEP assume SEP character as a value separator: ':', c, colon a COLON (':') character (DEFAULT) '=', e, equal a EQUAL ('=') character '|', b, bar a BAR ('|') character -v, --version show the version and copyright information -h, --help show this help message and exit
以下,各オプションを説明します.
- -m, --model=FILE
- 分類器のモデルをFILEから読み込みます.
- -t, --test
- 与えられたデータに記述されているラベルを正解だと仮定し,分類器の精度を計測します.デフォルトでは,この機能は無効になっています.
- -n, --negative=LABEL
- 負例のラベルを指定します.これは,多クラス分類タスクにおいて,適合率・再現率・F1スコアの計算に用いられます.負例に相当するラベルが複数あるときは,このオプションを複数回使用してください.デフォルトでは,全てを正例と見なして評価値が計算されます.
- -w, --score
- 分類器によりラベル付けを行う際.計算されたスコアを出力します.スコアは予測されたラベル,値区切り記号(通常は':')に続けて出力されます.デフォルトでは,この機能は無効に設定されています.
- -p, --probability
- 分類器によりラベル付けを行う際,計算された確率を出力します.ロジスティック回帰で学習したモデルのみで有効です.確率値はは予測されたラベル,値区切り記号(通常は':')に続けて出力されます.デフォルトでは,この機能は無効に設定されています.
- -r, --reference
- 入力データ中に含まれる正解ラベルを,予測されたラベルの直前に出力します.正解率の算出など,正解と予測されたラベルの比較が容易になります.通常は,正解ラベルに続けてトークン区切り記号(スペースなど),予測されたラベルの順に出力されます.ただし,全候補出力モード(-aオプション)使用時は,それぞれの候補に対して,正解であるか('+'もしくは'-'),モデルが選択したか('+'もしくは'-')が,区切り記号無しで出力されます.デフォルトでは,この機能は無効に設定されています.
- -k, --comment
- 入力データ中に含まれるコメント行を,そのままラベル付け結果の中に出力します.学習データ中の事例にコメントを付けることができるので,失敗解析に便利です.デフォルトでは,この機能は無効に設定されています.
- -a, --all
- 多クラス分類,候補選択で事例を分類するとき,全ての候補に関する情報を出力します.各事例のラベル付け結果は,"@eoi"という行で始まり,一行ごとにそれぞれの候補を表し,"@boi"という行で終了します.事例内のそれぞれの行は,その候補がモデルによって選ばれた場合は'+'で始まり,選ばれなかった場合は'-'で始まり,その後ラベル文字列が続きます.デフォルトでは,この機能は無効(モデルが選択したラベルのみ出力)に設定されています.
- -f, --false
- 与えられたデータに記述されていた正解のラベルと,モデルが予測したラベルが異なるときのみ,事例を出力します.自動的に -r (--reference) オプションが有効になります.いわゆる失敗解析を行うときに便利です.デフォルトでは,この機能は無効(すべての事例を出力)に設定されています.
- -q, --quiet
- ラベル付け結果を一切出力しません.-t (--test) オプションを使って,ラベル付けの評価のみを行いたいときに使います.デフォルトでは,この機能は無効(ラベル付け結果を出力)に設定されています.
- -s, --token-separator=SEP
- ラベルと素性・属性の区切り文字を指定します.
- ' ', s, spc, space
- スペース文字(デフォルト)
- '\t', t, tab
- タブ文字
- ',', c, comma
- カンマ
- -c, --value-separator=SEP
- 素性・属性とその値の区切り文字を指定します.
- ':', c, colon
- コロン(デフォルト)
- '=', e, equal
- イコール文字
- '|', b, bar
- バー(|)文字
- -v, --version
- バージョン情報を出力して終了します.
- -h, --help
- ヘルプメッセージを表示します.