Как я могу преобразовать столбец значений в возможно дискретные учебные выходные классы?
Мой набор данных - это набор объектов и один столбец, который по сути является представлениями, причем каждый элемент этого столбца представляет собой произвольное положительное действительное число, как показано ниже.
Сейчас в Python я хочу запустить модель Keras на нем. Я планирую использовать этот столбец в качестве выходных меток для обучения классификатора. Единственное решение, которое я могу придумать, - это масштабировать его с помощью sklearn, а затем условно каким-то образом сортировать масштабированные значения в классы для достаточного количества меток обучения. Как, например, если 0.1 +-------+
| Views |
+-------+
| 173 |
+-------+
| 943 |
+-------+
2 ответа
Я предлагаю не пытаться втиснуть это в проблему классификации, а вместо этого рассматривать это как регрессию. Две причины:
Первое: цели вашей модели ("метки" в классификации) не являются дискретными, а целочисленными. Это означает, что вы потеряете информацию, если попытаетесь ее дискретизировать.
Второе: классификация полезна, когда метки, находящиеся рядом друг с другом, не содержат информации (например, класс 1 и 2 не более похожи, чем класс 1 и 4). Однако вы хотите получать информацию из точек данных, которые находятся рядом друг с другом с точки зрения представлений.
Итак, вы, вероятно, хотите использовать регрессию. Вы можете сделать это с Keras без проблем; вам просто нужно изменить последний слой (и, возможно, некоторые другие вещи, в зависимости от вашей архитектуры). Попробуйте поискать примеры "регрессионной сети".
Извините, но каково содержание Views
столбец? Это аннотация (классификация) или счетчик чего-то (регрессия)?
Если это столбец, который содержит метки, вы можете преобразовать каждое отдельное значение в один горячий кодировщик (см. Пример ниже). Это окончательное представление можно использовать в качестве выходного слоя для размещения нейронной сети.
import numpy as np
from keras.utils import to_categorical
views = np.random.randint(3, size=10)
print(views)
# [0 1 2 1 0 1 1 2 1 0]
num_classes = len(set(views))
print(num_classes)
# 3
views = to_categorical(views, num_classes)
print(views)
# [[1. 0. 0.]
# [0. 0. 1.]
# [1. 0. 0.]
# [0. 0. 1.]
# [0. 0. 1.]
# [0. 1. 0.]
# [0. 0. 1.]
# [0. 1. 0.]
# [0. 1. 0.]
# [1. 0. 0.]]
Проверьте https://keras.io/#getting-started-30-seconds-to-keras для примера. Переменная views
является y_train
,