Объясните onehotencoder с помощью python
Я новичок в библиотеке scikit-learn и пытаюсь играть с ней для прогнозирования цен на акции. Я просматривал документацию и застрял в той части, где они поясняют OneHotEncoder()
. Вот код, который они использовали :
>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
OneHotEncoder(categorical_features='all', dtype=<... 'numpy.float64'>,
handle_unknown='error', n_values='auto', sparse=True)
>>> enc.n_values_
array([2, 3, 4])
>>> enc.feature_indices_
array([0, 2, 5, 9])
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]])
может кто-нибудь, пожалуйста, объясните мне шаг за шагом, что здесь происходит? У меня есть четкое представление о том, как работает один горячий кодировщик, но я не могу понять, как работает этот код. Любая помощь приветствуется. Спасибо!
2 ответов
давайте начнем сначала, записав то, что вы ожидаете (предполагая, что вы знаете, что означает одна горячая кодировка)
unecoded
f0 f1 f2
0, 0, 3
1, 1, 0
0, 2, 1
1, 0, 2
закодированных
|f0| | f1 | | f2 |
1, 0, 1, 0, 0, 0, 0, 0, 1
0, 1, 0, 1, 0, 1, 0, 0, 0
1, 0, 0, 0, 1, 0, 1, 0, 0
0, 1, 1, 0, 0, 0, 0, 1, 0
и закодированных:
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]),
если вы используете значение по умолчанию n_values='auto'
. При использовании default= 'auto' вы указываете, что значения ваших функций (столбцы unencoded) возможно, взять на себя можно сделать вывод из значений в Столбцах данных, переданных в fit
.
это подводит нас к enc.n_values_
документы:
количество значений на объект.
enc.n_values_
array([2, 3, 4])
вышеизложенное означает, что f0 (столбец 1) может принимать 2 значения (0, 1), f1 может принимать 3 значения, (0, 1, 2) и f2 может принимать 4 значения (0, 1, 2, 3).
действительно, это значения из функций f1 ,f2, f3 в unencoded характеристика матрицы.
затем,
enc.feature_indices_
array([0, 2, 5, 9])
документы:
индексы для диапазонов объектов. Функция i в исходных данных сопоставляется с функции от feature_indices_[i] до feature_indices_[i+1] (а затем потенциально замаскированный active_features_ впоследствии)
задан диапазон позиций (в закодированном пространстве), что функции f1, f2, f3 могут взять на себя.
f1: [0, 1], f2: [2, 3, 4], f3: [5, 6, 7, 8]
сопоставление вектор [0, 1, 1] в одно горячее кодированное пространство (под отображением мы получили от enc.fit):
1, 0, 0, 1, 0, 0, 1, 0, 0
как?
первая функция в f0, так что карты в положение 0 (если элемент был 1 вместо 0, мы бы отобразить его в положение 1).
следующий элемент 1 сопоставляется с позицией 3, поскольку f1 начинается с позиции 2, а элемент 1 является вторым возможным значением, которое может принять f1.
наконец, третий элемент 1 берет на себя позиция 6, так как она принимает второе возможное значение f2, и f2 начинает отображаться из позиции 5.
надеюсь, это прояснит некоторые вещи.
давайте возьмем эти функции на один раз:
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
мы приспосабливаем кодировщик к набору из четырех векторов, с 3 функциями каждый.
>>> enc.n_values_
array([2, 3, 4])
- 1-я функция имеет 2 возможных значения: 0, 1
- 2-я функция имеет 3 возможных значения: 0, 1, 2
- 3-я функция имеет 4 возможных значения: 0, 1, 2, 3
понятно?
>>> enc.feature_indices_
array([0, 2, 5, 9])
представление объединит векторы для трех объектов. Поскольку существует три функции, представление всегда будет иметь три" истинных "записи (1), остальные" ложные " (0).
так как есть 2+3+4 возможные значения, представление имеет длину 9 записей.
- Функция 1 начинается с индекса 0
- функция 2 начинается с индекса 2(F1 start + len (F1))
- функция 3 начинается с индекса 5(F2 start + len (F2))
конец баррикады по индексу 9
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]])
кодировка данного значения просто объединяет три вектора, для значений 0, 1, 1:
- F1: [1, 0]
- F2: [0, 1, 0]
- F3: [0, 1, 0, 0]
шлепните эти сквозные, преобразуйте в данный плавание format, и у нас есть массив, показанный в Примере.