Разница между порядковыми и категориальными данными как метками в scikit learn

Я знаю, что в качестве функций порядковым данным можно назначить произвольные числа, а OneHotEncoding можно сделать для категориальных данных. Но я немного сбит с толку, как следует обрабатывать эти два типа данных, когда их следует прогнозировать. Например, в наборе данных iris в scikitlearn:

iris = datasets.load_iris()
X = iris.data
y = iris.target

в то время как y представляют три типа цветов, которые являются категориальными данными (если я не ошибаюсь?!), они кодируются как порядковые значения 0,1,2 (type=int32). Мой набор данных также включает 3 независимых категории ("больной", "носитель", "здоровый"), и scikitlearn принимает их как строки без какого-либо типа кодирования.

Мне было интересно, правильно ли сохранить их, поскольку они должны использоваться scikitlearn или аналогичной кодировкой, как это делается для набора данных iris?

2 ответа

Решение

Кажется, что в ML мы либо работаем с непрерывными данными, которые будут обрабатываться регрессионными моделями, либо они являются категориальными, которые будут обрабатываться моделями классификации. Для порядковых данных нет отдельной категории.

Кодировать этикетку не нужно. scikitlearn позаботится об этом. Та же таблица, что и для построения классификатора:

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
X, y = load_iris(return_X_y=True)
clf = LogisticRegression(random_state=0).fit(X, y)
clf.predict(X[:2, :])
clf.predict_proba(X[:2, :])
clf.score(X, y)

и я просто делаю меньшую таблицу и меняю метки с целых на строковые:

X1 = X[:5]
y1 = y[:5]
y1 = ['a', 'a', 'a','b', 'a']
clf = LogisticRegression(random_state=0).fit(X1, y1)
clf.predict(X1[:2, :])
clf.predict_proba(X1[:2, :])
clf.score(X1, y1)

и все хорошо.

Другие вопросы по тегам