Мені цікаво, як укладається скрінаркатегоріальні змінні представлені числами, такими як 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.]]