/ / Numeric Categorical Variable у Sklearn [дублювати] - python, машинне навчання, scikit-learn, категоріальні

Числова категорна змінна в Sklearn [дублікат] - python, машинознавство, scikit-learn, категоричні дані

Мені цікаво, як укладається скрінаркатегоріальні змінні представлені числами, такими як New York = 1 Boston = 2 Chicago = 3. Чи знатиме Python, що категорично або просто розглядати його як впорядковане числове? Я бачив пост тут обговорення цього питання. Я не знаю, правильно чи ні.

Крім того, я не знаю, чи варто змінювати їх у форматі рідкісної матриці, наприклад

[1,0,0]
[0,1,0]
[0,0,1]

Якою буде різниця між цими двома формами при застосуванні до бібліотеки склеарні?

Якщо sklearn не може добре обробляти категоріальні змінні, чи буде R виграти його для цього?

Дякую!

Оновлення:

Я бачив питання дублювання, рекомендоване @larsmans, але воно не відповідало на моє питання з точки зору відповіді в цьому положенні, який сказав, що скленар не може добре поводитисякатегоріальні змінні і як він порівнюється з пакетом в R. Я також бачив деякі повідомлення до того, що це нормально з великим набором даних, але вплине на малий набір даних. З @larsmans, здавалося, що крім алгоритму дерева, інші методи повинні передавати числові категоріальні змінні до манекенів. Насправді у мене більше 3000 категорій для кожної змінної. Я не думаю, що це ефективно змінити їх на розріджену матрицю за допомогою DictVectorizer або oneHotEncoder буде ефективним способом зробити це.

Відповіді:

2 для відповіді № 1

Схоже, саме це вам потрібно DictVectorizer

Для представлення багатокласових категоріальних зміннихв простих числах не може бути гарною ідеєю. Найкращою практикою має бути перетворення категоріальної змінної n-класу в n булевих змінних. У вашому прикладі слід створити 3 нові булеві змінні для позначення "== Нью-Йорк", "== Бостон" і "== Чикаго".

from sklearn.feature_extraction import DictVectorizer
v = DictVectorizer(sparse = True)


D = [{"Value" : 100, "City": "New York"},
{"Value" : 70, "City": "Boston"},
{"Value" : 99, "City": "Chicago"},
]

X = v.fit_transform(D)
print v.get_feature_names()
print X

Вихід:

["City=Boston", "City=Chicago", "City=New York", "Value"]
[[   0.    0.    1.  100.]
[   1.    0.    0.   70.]
[   0.    1.    0.   99.]]