6.9. Преобразование цели прогноза (y) ¶
Это преобразователи, которые не предназначены для использования в функциях, а только для контролируемых целей обучения. См. Также Преобразование цели в регрессии, если вы хотите преобразовать цель прогнозирования для обучения, но оценить модель в исходном (непреобразованном) пространстве.
6.9.1. Бинаризация меток
6.9.1.1. LabelBinarizer
LabelBinarizer
— служебный класс, помогающий создать индикаторную матрицу меток из списка мультиклассовых меток:
>>> 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 не требуется, если вы используете оценщик, который уже поддерживает данные мультикласса.
Для получения дополнительной информации о мультиклассовой классификации см. Мультиклассовая классификация .
6.9.1.2. MultiLabelBinarizer
В многоэлементном обучении объединенный набор задач двоичной классификации выражается с помощью двоичного индикаторного массива меток: каждая выборка представляет собой одну строку 2-го массива формы (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. Кодировка метки
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']