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により重み付けされます。利便性を高めるため、bigram
とtrigram
もテキスト特徴抽出にデフォルトで設定されています。 - 数値特徴量は、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}}