2016-12-27 16 views
0

Я пытаюсь понять вывод процесса onehotencoding через python и scikit-learn. Я считаю, что я получаю идею одной горячей кодировки. I.e., преобразовать дискретные значения в расширенные векторы признаков со значением «on» для идентификации членства в классификации. Возможно, я понял это неправильно, что меня смущает, но это мое понимание.Интерпретация преобразования OneHotEncoding

Так, из документации здесь: http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

Я вижу следующий пример:

>>> 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.]]) 

Может кто-то пожалуйста, объясните, как данные [[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]] преобразуется в [[1., 0., 0., 1., 0., 0., 1., 0., 0.]]?

Как используется аргумент преобразования [0, 1, 1]?

Большое спасибо за любую помощь в этом

Jon

ответ

0

Итак ... после дальнейшего копания, вот моя попытка прояснить один из способов un выслушайте это и ответьте на него другим.

1) Оригинальный набор данных [0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]

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

Итак ...

For position 1 (0, 1, 0, 1) --> [0, 1] 
For position 2 (0, 1, 2, 0) --> [0, 1, 2] 
For position 3 (3, 0, 1, 2) --> [0, 1, 2, 3] 

Теперь, при преобразовании этого, вы просто сравнить каждый позиционный элемент в преобразованной массиве в позицию в списке уникальных заказанных товаров

Для преобразованного массива [0, 1, 1]

The first '0' generates a [1, 0] ('0' matches value in position one, not position two) 
The next '1' generates a [0, 1, 0] ('1' only matches value in position two) 
the last '1' generates a [0, 1, 0, 0] ('1' only matches value in position two) 

В совокупности это эквивалентно [1, 0, 0, 1, 0, 0, 1, 0, 0].

Я пробовал это с рядом других наборов данных, и логика последовательна.

0

Основная цель одной горячей кодирования для категориальных признаков, где нет пространственного соотношения между числами, они не являются Удерживание. Поэтому, если функция имеет значение 1, это не означает, что она ближе к 2, чем 3.

Чтобы избежать этого, мы должны создать столбец для каждого значения, которое функция может иметь двоичным способом. Одной из возможностей преобразования категориальных функций в функции, которые могут использоваться с оценщиками scikit-learn, является использование кодировки one-of-K или one-hot. Этот оценщик преобразует каждую категориальную функцию с m возможными значениями в двоичные функции m с одним активным.

Итак, в вашем примере обратите внимание, что то, что вы трансформируете, это массив: [0, 1, 1].

Следует помнить, что преобразование будет сделать этот массив двоичный с возможным кодированием, в результате чего в массиве: [ 1., 0., 0., 1., 0., 0., 1., 0., 0.]

первого и второго из них может иметь 2 значения, в то время как третья может иметь 4 значения (обратите внимание, что в соответствии мы пропускаем только 3 (0, 2, 3), а в преобразовании мы также передаем 1.

Итак, первые два элемента объясняют первую особенность, следующие две объясняют вторую функцию, а последние четыре объясняют третью

+0

Спасибо, что ответил Silvio. Ваши первые 2 абзаца убеждают меня в том, что у меня есть правильная идея об одном горячем кодировании. Я до сих пор не понимаю, как появился результирующий массив. Я не вижу связи между [0, 1, 1] и преобразованием. Является ли преобразование разбитым на группы из 3? Не могли бы вы объяснить, как это получилось? Понятия не имею. –

+0

Да. Он разделен на 3 группы. Первый и второй могут иметь 2 значения, в то время как третий может иметь 4 значения (обратите внимание, что для соответствия мы передаем только 3 ('0',' 2', '3'), а в преобразовании мы передаем' 1' также Итак, первые два элемента объясняют первую особенность, а следующие две объясняют вторую функцию, а последние четыре объясняют третью особенность. – silviomoreto

+0

Еще раз спасибо за добавление дополнительной информации, но я боюсь, что она смущает дальше. где (0, 2, 3) исходит из вашего ответа (или моего первоначального вопроса), и неясно, почему 1-й и 2-й имеют 2 значения, а третий имеет 4 значения. –