Классификация: цель с более чем 2 классами

#python #machine-learning #classification

#python #машинное обучение #классификация

Вопрос:

Я выполняю упражнение по классификации и сталкиваюсь с целью с более чем 2 категориальными классами. Я закодировал эти классы с помощью Labelencoder. Единственная проблема в том, что, я полагаю, мне, возможно, придется использовать Onehotencoding после того, как у меня больше не будет только нуля и 1, но и 0,1,2,3. Реальность такова, что я просто не знаю, примет ли Knn или решение T. это число в качестве классов. Если нет, может кто-нибудь сказать мне, что делать?

Вот моя первая цель:

 Good 
bad
medium
excellent
  

Я изменил его на следующее:

 1
3
2
0
  

Я предполагаю, что мой реальный вопрос заключается в том, можно ли это напрямую использовать в качестве классов для моей цели или мне нужна дальнейшая разработка?

Комментарии:

1. какую модель вы хотите использовать.?

2. Как классификаторы дерева решений, так и knn могут работать с многоклассовыми задачами, поэтому вы можете напрямую передавать им текущие метки

Ответ №1:

Большинство моделей в Sklearn поддерживает мультикласс без кодировки onehot. KNN и DecisionTree также поддерживают это.

Давайте используем игрушечный пример, чтобы убедиться в этом,

 from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier

f = [[1, 2], [3.2, 4.5], [2.0, 0.75], [0.25, 3.68]]

t = [1,
3,
2,
0]

lr = LogisticRegression().fit(f, t)
d = DecisionTreeClassifier().fit(f, t)
r = RandomForestClassifier().fit(f, t)
n = KNeighborsClassifier(n_neighbors=3).fit(f, t)

lr.predict(f) # array([3, 3, 2, 0])
d.predict(f) # array([3, 3, 2, 0])
r.predict(f) # array([3, 3, 2, 0])
n.predict(f) # array([0, 0, 0, 0])
  

Как вы можете видеть, все они поддерживают мультикласс без какой-либо одной горячей кодировки.

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

Комментарии:

1. Спасибо. Я подумал, что мне нужно onehotencode. итак, OneHotEncoding предназначен только для обучающего набора, за исключением случаев, когда я делаю нейронную сеть, если я правильно понимаю?

2. На самом деле зависит от реализации. Если вы используете sklearn и используете knn или tree, нет необходимости в одном горячем