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-массив с несколькими метками для каждого экземпляра.