【scikit-learn】変数やメソッドの命名規則
参考:http://scikit-learn.org/stable/developers/#apis-of-scikit-learn-objects
自分の理解の整理も兼ねて、scikit-learnの公式ドキュメントの、特に
「規則」の部分について日本語でまとめます。
全体的にscikit-learnではAPIや命名が非常によく規則だっており、異なる種類の処理を同じコードで記述するのが容易です。
メソッドのAPI
sckit-learnのobjectsは次のメソッドを持つべきである*1:
Estimatorのオブジェクト - fit()
データからパラメータの学習をおこなう。
Supervisedの場合
obj.fit(data, targets)
Unsupervisedの場合
obj.fit(data)
Predictorのオブジェクト - predict()
学習したパラメータを使って、新しいデータの処理をおこなう。
obj.predict(new_data)
タスクがClassificationの場合、定量化された値を返すために、
obj.predict_proba(new_data)
が用意されていることがある。この場合、返り値はそれぞれのクラスに属する確率を表すリストとなる。
また、確率ではないような場合、
obj.decision_function(new_data)
でリストを返すこともある。
Transformerのオブジェクト - transform()
フィルタリングをおこなったり、次元の削減をしたりして、データの表現を変換する。
transformed_data = obj.transform(data)
ちなみに、もしもfit()を事前におこなっているなら、fit()を分離して記述するよりも、fit_transform(data)を用いて同時にEstimatorとTransformerに仕事をさせたほうが(基本的に)効率が良い。
Modelのオブジェクト - score()
学習したパラメータがどれだけ新しいデータを表現できているかを測る。
score = obj.score(new_data)
尤度とか二乗誤差の和とか。高いほど良いモデルとなるように正規化されている。つまり、二乗誤差の和の場合、マイナスをかける(または逆数をとる)などしてひっくり返しているので、ユーザは常にscoreが高いモデルを良いモデルだと思えば良い。細かいことはscikit-learnがやってくれる。
初期化(ハイパーパラメータ)
ハイパーパラメータ(学習により決定できないので、事前に決めないといけないパラメータ)*2は、objectsの初期化の時に指定する:
obj = SVC(C=2)
など。ちなみに、obj = SVC(); obj.set_params({'C':2})としても良いが、fit()したあとにハイパーパラメータを変えたりするのは混乱のもとなので初期化の段階でハイパーパラメータは全て指定するのが好ましい。*3
fit()の引数 X, y, kwargs
Estimatorのオブジェクトはfit(X, y, kwargs)というAPIでフィッティングができる(Unsupervisedなら y は省略する。省略する代わりに y = None でも良い。kwargsはオプション)。Xは、[N, D]次元の行列(Nサンプル、D特徴)。yは[N]のリスト*4(Nサンプル)。kwargsはフィッティングのときに指定できるオプション。別になくても良いように設計はされている。特別なことがしたいなら指定する*5。
学習したパラメータ
学習したパラメータは、underscore(下線、「_」のこと)を最後につけることで区別する。つまり、fit()によって得られたパラメータはobj.coef_などとして参照できる(obj.coefではない)。