Делает ли целочисленное кодирование строк и использование этого в качестве входных данных для дерева решений (sklearn) атрибуты разделения дискретными или непрерывными? - PullRequest
2 голосов
/ 08 марта 2019

Я должен использовать классификатор дерева решений для классификации определенных данных.Однако значения атрибута являются строками, и, как я нашел здесь: https://datascience.stackexchange.com/questions/5226/strings-as-features-in-decision-tree-random-forest,, он говорит, что строки не могут быть использованы в качестве входных данных.Поэтому я использовал целочисленное кодирование для строк.

В этой статье Передача категориальных данных в дерево решений Sklearn я обнаружил, что передача целочисленных данных может привести к неправильному ответу, так как sklearnпредполагает порядок среди данных.Таким образом, единственный выход - использование модуля OneHotEncoder.

Использование модуля OneHotEncoder увеличивает количество функций (например, если есть атрибут 'price' со значениями ['high', 'med','low'], одно горячее кодирование приведет к включению 3 атрибутов, связанных с фактическим атрибутом 'price', которые можно интерпретировать как ['price-high', 'price-med', 'price-low']и значения атрибута будут либо 1, либо 0 в зависимости от данных), что мне не нужно, так как мне нужно распечатать дерево решений в определенном формате, который потребовал бы исходных функций (например, мне нужна «цена»).

Есть ли выход из этого?

1 Ответ

0 голосов
/ 09 марта 2019

Я думаю, что pd.get_dummies было бы полезно, так как вы хотите отслеживать оригинальные имена объектов при создании горячих векторов.

Пример:

df = pd.DataFrame({'price': ['high', 'medium', 'high', 'low'], 'some_feature': ['b', 'a', 'c','a']})
pd.get_dummies(df,columns=['price','some_feature'])

    price_high  price_low   price_medium    some_feature_a  some_feature_b  some_feature_c
0   1   0   0   0   1   0
1   0   0   1   1   0   0
2   1   0   0   0   0   1
3   0   1   0   1   0   0

Когда вы подадите этот фрейм данных в дерево решений, вы сможете лучше понять!

...