【问题标题】:Classification: Target with more than 2 classes分类:2类以上的目标
【发布时间】:2019-09-12 17:24:36
【问题描述】:

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

这是我的第一个目标:

Good 
bad
medium
excellent

我将其更改为以下内容:

1
3
2
0

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

【问题讨论】:

  • 您要使用哪个型号?
  • 决策树分类器和 knn 都可以处理多类问题,因此您可以直接为它们提供当前标签

标签: python machine-learning classification


【解决方案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])

如您所见,它们都支持多类,无需任何一种热编码。

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

【讨论】:

  • 谢谢。我想我需要一个hotencode。所以 OnehotEncoding 仅适用于训练集,除非我理解正确,除非我在做神经网络?
  • 实际取决于实现。如果您正在使用 sklearn 并使用 knn 或 tree,则不需要一个 hot
猜你喜欢
  • 1970-01-01
  • 2017-03-07
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 2018-10-17
  • 1970-01-01
  • 2019-09-07
相关资源
最近更新 更多