Использование «категориального» dtype Pandas с sklearn

Есть ли в sklearn какая-либо поддержка для использования типа данных Categorical Panda непосредственно в подгонке моделей? Из того, что я видел, sklearn не поддерживает этот тип данных, что вызывает сожаление, потому что категориальный тип данных одновременно кодирует категориальные данные и содержит схему отображения данных. Кроме того, категориальное кодирование — это просто проблема обработки/обработки данных, поэтому кажется более естественным, что Pandas будет обрабатывать ее.

Примечание

Я понимаю, что есть несколько методов кодирования категориальных переменных в Pandas и sklearn - это не то, о чем я спрашиваю.


person toes    schedule 15.06.2015    source источник
comment
Обратите внимание, что данные categorial были добавлены к pandas совсем недавно — когда разрабатывался scikit-learn, этого типа данных не существовало. Я не уверен, есть ли план по внедрению categorial данных в scikit-learn — возможно, на этот вопрос могут ответить только разработчики.   -  person cel    schedule 15.06.2015
comment
Мало того, что недавно был добавлен categorical dtype, как уже сказал @cel. Но он тоже не очень хорошо работает, даже внутри панд много чего с ним странно себя ведет. Я бы посоветовал использовать его с причинами и сообщать об ошибках непосредственно на github.   -  person firelynx    schedule 16.06.2015


Ответы (1)


Кросс-постинг из системы отслеживания проблем:

Я думаю, что это как минимум два отдельных вопроса: 1. может/будет ли sklearn поддерживать кадры данных pandas с категориальными функциями в качестве входных данных 2. может/будет ли sklearn поддерживать работу с категориальными переменными через категориальные типы данных pandas.

  1. будет более или менее преобразовывать все категориальные переменные в функции с горячим кодированием, также известные как фиктивные столбцы. Это действительно легко сделать для пользователя. Мы могли бы сделать это «под капотом» в scikit-learn, но это усложнило бы код, и я не вижу большого преимущества.

  2. В принципе невозможно. Для деревьев было бы неплохо иметь категориальный тип данных, но я думаю, что у pandas нет стабильного интерфейса C-уровня, поэтому мы не можем вкладываться в это. Даже если бы это было так, это все равно потребовало бы существенного переписывания кода дерева. Я не думаю, что это было бы полезно для оценок, не связанных с деревьями.

person Andreas Mueller    schedule 16.06.2015
comment
В конечном счете, я думаю, что использование модуля scikit-learn pipeline для обработки преобразований категориальных данных является лучшим решением моей проблемы, поскольку он неявно отслеживает кодировку. - person toes; 17.06.2015
comment
Я думаю, что мне что-то не хватает с простотой использования в 1. Для нескольких столбцов категориальных переменных мне пришлось бы LabelEncode каждый отдельно, а затем запускать OneHotEncoder для каждого. Другой возможностью является DictVectorizer в транспонированном фрейме данных (см., например, fastml.com/). Оба кажутся непростыми. - person Ben; 03.12.2015
comment
Бен, мы хотим добавить поддержку строк в OneHotEncoder, чтобы сделать это проще, но мы еще этого не сделали. - person Andreas Mueller; 05.12.2015
comment
@AndreasMueller Только что увидел этот ответ. Просто хочу добавить +1 к этой функции. Прямо сейчас я делаю всю свою кодировку в pandas, что нормально, но делает кадры данных излишне широкими. - person Ben; 03.03.2016