Scikit Learn - Соглашения

Объекты Scikit-learn используют единый базовый 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, чтобы переустановить оценщик и сделать второй прогноз.

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])

Примерка Multiclass и Multilabel

В случае подбора мультикласса задачи обучения и прогнозирования зависят от формата целевых данных. Используемый модуль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])

В приведенном выше примере классификатор помещается в одномерный массив меток мультикласса, а predict()Таким образом, метод обеспечивает соответствующее предсказание мультикласса. Но, с другой стороны, также можно уместить двумерный массив бинарных индикаторов меток следующим образом:

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используется для преобразования в двоичную форму двумерного массива мультиэлементов, на который он помещается. Вот почему функция predic () выдает на выходе 2d-массив с несколькими метками для каждого экземпляра.