Config

ConfigはServiceで利用する機械学習のパラメータや特徴抽出ルールを定義します。

データ構造

Configクラスは dict クラスを継承しています。以下に示すのはClassifierで設定されたデフォルトコンフィグです。

>>> from jubakit.classifier import Config
>>> cfg = Config()
>>> print(cfg)
{'converter': {'string_filter_rules': [], 'num_filter_types': {}, 'num_types': {}, 'num_filter_rules': [], 'string_rules': [{'global_weight': 'idf', 'sample_weight': 'tf', 'key': '*', 'type': 'unigram'}], 'string_filter_types': {}, 'num_rules': [{'key': '*', 'type': 'num'}], 'binary_types': {}, 'binary_rules': [], 'string_types': {'bigram': {'method': 'ngram', 'char_num': '2'}, 'trigram': {'method': 'ngram', 'char_num': '3'}, 'unigram': {'method': 'ngram', 'char_num': '1'}}}, 'method': 'AROW', 'parameter': {'regularization_weight': 1.0}}

データ構造はJSONコンフィグファイルと全く同じです。詳細は Jubatus APIリファレンス を参照してください

機械学習パラメータ

機械学習パラメータはアルゴリズム(method)とハイパーパラメータから構成されています。デフォルトパラメータでも十分な場合が大半ですので、どうしても予測精度が出ない場合など、必要になって初めて設定を変えてみるのがよいでしょう。

パラメータを設定する場合には、次のようにしてConfigを作成します。

>>> from jubakit.classifier import Config
>>> cfg = Config(method='PA', parameter={'regularization_weight': 1.0})

method のみ設定した場合には、その手法に適したデフォルトパラメータが自動的に設定されます。

>>> cfg = Config(method='NN')
>>> cfg['parameter']
{'local_sensitivity': 1.0, 'nearest_neighbor_num': 128, 'parameter': {'threads': -1, 'hash_num': 64}, 'method': 'euclid_lsh'}
>>> cfg = Config(method='NHERD')
>>> cfg['parameter']
{'regularization_weight': 1.0}

Configは dict 型のオブジェクトなので、一度Configを作成したあとでも変更することができます。

>>> print(cfg['method'])
AROW
>>> print(cfg['parameter']['regularization_weight'])
1.0
>>> cfg['method'] = 'NHERD'
>>> cfg['parameter']['regularization_weight'] = 0.1

特徴抽出ルール

デフォルトの特徴抽出ルールは次のようになっています:

  • テキスト特徴量は unigram により分割され、TF-IDFにより重み付けされます。利便性を高めるため、bigramtrigram もテキスト特徴抽出にデフォルトで設定されています。
  • 数値特徴量は、Jubatusで言うところの num 型として処理されます。
  • バイナリ特徴量は特徴抽出を特に行わず、そのまま学習や予測に利用されます。

デフォルトで設定されている特徴抽出ルールは clear_converter メソッドにより無効にすることができます。特徴抽出ルールを一から書く場合には便利です。

>>> cfg.clear_converter()
>>> cfg
{'converter': {'string_filter_rules': [], 'num_filter_types': {}, 'num_types': {}, 'num_filter_rules': [], 'string_rules': [], 'string_filter_types': {}, 'num_rules': [], 'binary_types': {}, 'binary_rules': [], 'string_types': {}}, 'method': 'AROW', 'parameter': {'regularization_weight': 1.0}}