分类:超过2个类别的目标

时间:2019-04-23 13:43:21

标签: python machine-learning classification

我正在进行分类练习,并且要面对具有2个以上分类类别的目标。我已经使用Labelencoder编码了这些类。 唯一的问题是,我相信我以后可能不得不再使用Onehotencoding了,因为我不再只有0和1,而是有0、1、2、3。 现实是,我只是不知道Knn或Decision T.是否会接受这些数字作为类。如果否,有人可以告诉我该怎么做?

这是我的第一个目标:

Good 
bad
medium
excellent

我将其更改为以下内容:

1
3
2
0

我猜我真正的问题是,这可以直接用作目标的类,还是需要进一步的工程设计?

1 个答案:

答案 0 :(得分:0)

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])

如您所见,它们全部都支持多类,而没有任何一种热编码。

如果要使用神经网络,则可能需要根据所使用的损失函数对标签进行热编码。