Classias - マニュアル

学習器

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
タスクのタイプを指定します.
b, binary
二値分類
m, multi-dense
密な素性を生成する多クラス分類.学習データに含まれる属性とラベルの可能な組み合わせの全てを使って素性を生成します.
n, multi-sparse
疎な素性を生成する多クラス分類.学習データに含まれる事例の属性とラベルの組み合わせを使って素性を生成します.
c, candidate
候補選択
デフォルトは密な素性による多クラス分類(m, multi-dense)です.
-a, --algorithm=NAME
学習アルゴリズムを指定します.
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をオンライン学習します.二値分類のみに対応します.
デフォルトはlbfgs.logisticです.
-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)のみになります.

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です.収束検出に頼らず,強制的に反復を打ち切って学習を高速化させたいときは,この値を小さくしてください.

オンライン学習アルゴリズムとして,以下のものが利用可能です.

averaged_perceptron

平均化パーセプトロン(averaged perceptron)です. 調節できるパラメータはありません.

pegasos.logistic, pegasos.hinge

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.logistic, truncated_gradient.hinge

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
ヘルプメッセージを表示します.