ScikitLearn-コンベンション

Scikit-learnのオブジェクトは、次の3つの補完的なインターフェイスで構成される統一された基本APIを共有します-

  • Estimator interface −モデルの構築とフィッティング用です。

  • Predictor interface −予測を行うためのものです。

  • Transformer interface −データ変換用です。

APIは単純な規則を採用しており、フレームワークコードの急増を回避する方法で設計の選択がガイドされています。

大会の目的

規則の目的は、APIが次の幅広い原則に準拠していることを確認することです-

Consistency −基本であるか複合であるかにかかわらず、すべてのオブジェクトは、限られたメソッドのセットでさらに構成される一貫したインターフェースを共有する必要があります。

Inspection −コンストラクターパラメーターと学習アルゴリズムによって決定されたパラメーター値は、パブリック属性として保存および公開する必要があります。

Non-proliferation of classes −データセットはNumPy配列またはScipyスパース行列として表す必要がありますが、ハイパーパラメーターの名前と値は、フレームワークコードの急増を避けるために、標準のPython文字列として表す必要があります。

Composition −データへの変換のシーケンスまたは組み合わせとして表現できるか、他のアルゴリズムでパラメーター化されたメタアルゴリズムとして自然に表示されるかにかかわらず、アルゴリズムを実装し、既存のビルディングブロックから構成する必要があります。

Sensible defaults− scikit-learnでは、操作にユーザー定義のパラメーターが必要な場合は常に、適切なデフォルト値が定義されています。このデフォルト値により、操作は適切な方法で実行されます。たとえば、目前のタスクのベースラインソリューションが提供されます。

さまざまなコンベンション

Sklearnで利用可能な規則を以下に説明します-

型キャスト

入力をにキャストする必要があることを示しています float64。次の例では、sklearn.random_projection データの次元を削減するために使用されるモジュールは、それを説明します-

Example

import numpy as np
from sklearn import random_projection
rannge = np.random.RandomState(0)
X = range.rand(10,2000)
X = np.array(X, dtype = 'float32')
X.dtype
Transformer_data = random_projection.GaussianRandomProjection()
X_new = transformer.fit_transform(X)
X_new.dtype

Output

dtype('float32')
dtype('float64')

上記の例では、Xが float32 にキャストされます float64 沿って fit_transform(X)

パラメータの再調整と更新

推定量のハイパーパラメータは、を介して構築された後、更新および再適合させることができます。 set_params()方法。それを理解するために次の例を見てみましょう-

Example

import numpy as np
from sklearn.datasets import load_iris
from sklearn.svm import SVC
X, y = load_iris(return_X_y = True)
clf = SVC()
clf.set_params(kernel = 'linear').fit(X, y)
clf.predict(X[:5])

Output

array([0, 0, 0, 0, 0])

推定器が構築されると、上記のコードはデフォルトのカーネルを変更します rbf 線形経由 SVC.set_params()

ここで、次のコードはカーネルをrbfに戻し、推定量を再調整し、2番目の予測を行います。

Example

clf.set_params(kernel = 'rbf', gamma = 'scale').fit(X, y)
clf.predict(X[:5])

Output

array([0, 0, 0, 0, 0])

完全なコード

以下は完全な実行可能プログラムです-

import numpy as np
from sklearn.datasets import load_iris
from sklearn.svm import SVC
X, y = load_iris(return_X_y = True)
clf = SVC()
clf.set_params(kernel = 'linear').fit(X, y)
clf.predict(X[:5])
clf.set_params(kernel = 'rbf', gamma = 'scale').fit(X, y)
clf.predict(X[:5])

マルチクラスおよびマルチラベルフィッティング

マルチクラスフィッティングの場合、学習タスクと予測タスクの両方が、フィッティングするターゲットデータの形式に依存します。使用されるモジュールはsklearn.multiclass。以下の例を確認してください。ここでは、マルチクラス分類子が1d配列に適合しています。

Example

from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier
from sklearn.preprocessing import LabelBinarizer
X = [[1, 2], [3, 4], [4, 5], [5, 2], [1, 1]]
y = [0, 0, 1, 1, 2]
classif = OneVsRestClassifier(estimator = SVC(gamma = 'scale',random_state = 0))
classif.fit(X, y).predict(X)

Output

array([0, 0, 1, 1, 2])

上記の例では、分類子はマルチクラスラベルの1次元配列に適合し、 predict()したがって、メソッドは対応するマルチクラス予測を提供します。しかし一方で、次のようにバイナリラベルインジケータの2次元配列に適合させることも可能です。

Example

from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier
from sklearn.preprocessing import LabelBinarizer
X = [[1, 2], [3, 4], [4, 5], [5, 2], [1, 1]]
y = LabelBinarizer().fit_transform(y)
classif.fit(X, y).predict(X)

Output

array(
   [
      [0, 0, 0],
      [0, 0, 0],
      [0, 1, 0],
      [0, 1, 0],
      [0, 0, 0]
   ]
)

同様に、マルチラベルフィッティングの場合、インスタンスには次のように複数のラベルを割り当てることができます。

Example

from sklearn.preprocessing import MultiLabelBinarizer
y = [[0, 1], [0, 2], [1, 3], [0, 2, 3], [2, 4]]
y = MultiLabelBinarizer().fit_transform(y)
classif.fit(X, y).predict(X)

Output

array(
   [
      [1, 0, 1, 0, 0],
      [1, 0, 1, 0, 0],
      [1, 0, 1, 1, 0],
      [1, 0, 1, 1, 0],
      [1, 0, 1, 0, 0]
   ]
)

上記の例では、 sklearn.MultiLabelBinarizerは、マルチラベルの2次元配列を2値化して適合させるために使用されます。そのため、predict()関数は、インスタンスごとに複数のラベルを持つ2次元配列を出力として提供します。