Кодирование категориальной целевой переменной с помощью LabelEncoder из sklearn.preprocessing
На этом шаге мы предварительно обработаем нашу целевую переменную y. Целевая переменная в наборе данных Iris является категориальной, представленной числами 0, 1 и 2, которые соответствуют трем различным видам цветов Iris. Хотя они уже являются числовыми, хорошей практикой является понимание того, как кодировать категориальные метки, особенно если они были в строковом формате (например, 'setosa', 'versicolor').
Объяснение LabelEncoder:
- Назначение: Преобразует категориальные метки (строки или смешанные типы) в целые числа
- Как это работает: Присваивает уникальное целое число каждой уникальной категории
- Пример: ['cat', 'dog', 'cat'] → [0, 1, 0]
Зачем использовать LabelEncoder?
- Многие алгоритмы машинного обучения требуют числовых входных данных
- Эффективное хранение и вычисления
- Сохраняет категориальный характер данных
Ключевые методы:
fit(y): Изучает соответствие между категориями и целыми числами
transform(y): Применяет изученное соответствие
fit_transform(y): Объединяет оба шага в одном вызове
inverse_transform(y_encoded): Преобразует целые числа обратно в исходные категории
Важные замечания:
- Порядок произвольный (основан на первом появлении или сортировке)
- Не подходит для порядковых данных, где важен порядок (вместо этого используйте OrdinalEncoder)
- Для признаков (не целевых переменных) рассмотрите OneHotEncoder для номинальных данных
Добавьте следующий код в ваш файл preprocess.py под комментарием ## --- Step 5: Encode the target ---. Мы создадим экземпляр LabelEncoder и используем метод fit_transform(), который объединяет обучение и преобразование в один шаг.
## --- Step 5: Encode the target ---
encoder = LabelEncoder()
y_encoded = encoder.fit_transform(y)
print("\nOriginal target sample:", y[:5]) ## Show first 5 original labels
print("Encoded target sample:", y_encoded[:5]) ## Show first 5 encoded labels
print("Unique encoded values:", np.unique(y_encoded)) ## Show all unique encoded values
Сохраните файл и запустите его в последний раз.
python3 preprocess.py
Вывод покажет, что целевая переменная была закодирована. Поскольку она уже была в правильном целочисленном формате, результат тот же, но это демонстрирует процесс, который вы бы использовали для меток на основе строк.
Shape of features (X): (150, 4)
Shape of target (y): (150,)
Scaler object created: StandardScaler()
Scaler mean: [5.84333333 3.05733333 3.758 1.19933333]
Original data mean: [5.84 3.06 3.76 1.2 ]
Scaled data mean: [-0. -0. -0. -0.]
Scaled data sample:
[[-0.9 1.02 -1.34 -1.32]
[-1.14 -0.13 -1.34 -1.32]
[-1.39 0.33 -1.4 -1.32]
[-1.51 0.1 -1.28 -1.32]
[-1.02 1.25 -1.34 -1.32]]
Original target sample: [0 0 0 0 0]
Encoded target sample: [0 0 0 0 0]
Unique encoded values: [0 1 2]