分类:目标超过2个班级

问题描述 投票:0回答:1

我正在进行分类练习并面对超过2个分类的目标。我使用Labelencoder编写了这些类。唯一的问题是,我相信我可能不得不使用Onehotencoding,因为我不再只有0和1而是0,1,2,3。实际情况是,我只是不知道Knn或者决策T.是否会接受这些数字作为类。如果不是,有人可以告诉我该怎么做?

这是我的第一个目标:

Good 
bad
medium
excellent

I changed it to the following:

1
3
2
0

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

python machine-learning classification
1个回答
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])

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

如果您想使用神经网络,那么您可能希望根据您使用的损失函数对标签进行热编码。

© www.soinside.com 2019 - 2024. All rights reserved.