Pythonのscikit-learnでグリッドサーチを使ってSVMのパラメータチューニングをしよう

2016-03-09
このエントリーをはてなブックマークに追加

SVMはパラメータが多すぎる。全部試すとか手間が掛かり過ぎる。
そんな悩みを解決したいグリッドサーチの使い方です。

from sklearn.svm import SVC
from sklearn.grid_search import GridSearchCV


def main():
    _s = GridSearchCV(
            SVC(),
            {
                "C": [0.1, 0.5, 1.0, 1.5],
                "kernel": ["rbf", "linear"],
                "gamma": [1, 1e-2, 1e-3, 1e-4],
            }
    )
    _s.fit(
        [
            [1, 0, 0, 0, 0],
            [1, 1, 0, 0, 0],
            [1, 1, 0, 0, 1],
            [0, 1, 1, 1, 1],
            [0, 0, 0, 1, 1],
            [0, 0, 1, 1, 1],
            [0, 0, 1, 1, 1]
        ],
        [1, 1, 1, 0, 0, 0, 0]
    )

    print(_s.best_estimator_)
    print(_s.best_score_)

if __name__ == "__main__":
    main()

上のコードだとCとカーネルとガンマだけを設定してますけど、SVCで指定できるパラメータは全部設定できます。

出力のところは見やすいように成形してます。便利すぎる。。。
全部のパラメータを1回で指定できるわけでもなくて、併用できないものは途中でエラー吐いたりもします。それでも、かなり実施回数は減らせます。

$ python grid.py
SVC(
    C=0.5,
    cache_size=200,
    class_weight=None,
    coef0=0.0,
    degree=3,
    gamma=1,
    kernel='linear',
    max_iter=-1,
    probability=False,
    random_state=None,
    shrinking=True,
    tol=0.001,
    verbose=False
)
1.0