6.9. Преобразование цели прогнозирования (y)

Это преобразователи, которые не предназначены для использования в признаках, а только в контролируемых целях обучения. См. Преобразование цели в регрессии, если вы хотите преобразовать цель прогнозирования для обучения, но оценивать модель в исходном (непреобразованном) пространстве.

6.9.1. Бинаризация меток

6.9.1.1. LabelBinarizer

LabelBinarizer - это служебный класс, помогающий создать матрицу индикаторов меток из списка меток multiclass:

>>> from sklearn import preprocessing
>>> lb = preprocessing.LabelBinarizer()
>>> lb.fit([1, 2, 6, 4, 2])
LabelBinarizer()
>>> lb.classes_
array([1, 2, 4, 6])
>>> lb.transform([1, 6])
array([[1, 0, 0, 0],
       [0, 0, 0, 1]])

Использование этого формата может включить многоклассовую классификацию в средствах оценки, которые поддерживают формат матрицы индикаторов меток.

Предупреждение

LabelBinarizer не требуется, если вы используете модель, которая уже поддерживает данные multiclass.

Для получения дополнительной информации о мультиклассовой классификации обратитесь к Многоклассовая классификация.

6.9.1.2. MultiLabelBinarizer

При multilabel обучении совокупный набор задач двоичной классификации выражается с помощью массива двоичных индикаторов меток: каждая выборка представляет собой одну строку 2d массива формы (n_samples, n_classes) с двоичными значениями, где единица, т.е. ненулевые элементы соответствуют подмножеству меток для этой выборки. Такой массив, как np.array([[1, 0, 0], [0, 1, 1], [0, 0, 0]]) представляет метку 0 в первом примере, метки 1 и 2. во втором примере и без меток в третьем образце.

Создание данных с несколькими метками в виде списка наборов меток может быть более интуитивно понятным. Трансформатор MultiLabelBinarizer можно использовать для преобразования между коллекцией меток и форматом индикатора:

>>> from sklearn.preprocessing import MultiLabelBinarizer
>>> y = [[2, 3, 4], [2], [0, 1, 3], [0, 1, 2, 3, 4], [0, 1, 2]]
>>> MultiLabelBinarizer().fit_transform(y)
array([[0, 0, 1, 1, 1],
       [0, 0, 1, 0, 0],
       [1, 1, 0, 1, 0],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 0, 0]])

Для получения дополнительной информации о классификации по нескольким меткам см. Классификаци с многими метками.

6.9.2. Кодировка метки (Label encoding)

LabelEncoder - это служебный класс, помогающий нормализовать метки так, чтобы они содержали только значения от 0 до n_classes-1. Иногда это полезно для написания эффективных подпрограмм Cython. LabelEncoder можно использовать следующим образом:

>>> from sklearn import preprocessing
>>> le = preprocessing.LabelEncoder()
>>> le.fit([1, 2, 2, 6])
LabelEncoder()
>>> le.classes_
array([1, 2, 6])
>>> le.transform([1, 1, 2, 6])
array([0, 0, 1, 2])
>>> le.inverse_transform([0, 0, 1, 2])
array([1, 1, 2, 6])

Его также можно использовать для преобразования нечисловых меток (при условии, что они хешируются и сопоставимы) в числовые метки:

>>> le = preprocessing.LabelEncoder()
>>> le.fit(["paris", "paris", "tokyo", "amsterdam"])
LabelEncoder()
>>> list(le.classes_)
['amsterdam', 'paris', 'tokyo']
>>> le.transform(["tokyo", "tokyo", "paris"])
array([2, 2, 1])
>>> list(le.inverse_transform([2, 2, 1]))
['tokyo', 'tokyo', 'paris']