我正在进行一个分类练习,面对的是一个具有超过两个类别的目标。我已经使用LabelEncoder对这些类别进行了编码。唯一的问题是,我认为我可能还需要使用OneHotEncoding,因为现在不仅仅是0和1,而是0、1、2、3。实际上,我不知道KNN或决策树是否会接受这些数字作为类别。如果不能,有人能告诉我该怎么做吗?
这是我的第一个目标:
Good badmediumexcellent
我将其更改为以下内容:
1320
我想我真正的疑问是,这是否可以直接作为目标的类别使用,还是需要进一步的处理?
回答:
Sklearn中的大多数模型支持多类别分类,无需进行独热编码。KNN和决策树也支持这种方式。
让我们使用一个玩具示例来验证这一点,
from sklearn.linear_model import LogisticRegressionfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.neighbors import KNeighborsClassifierf = [[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])
如你所见,所有这些模型都支持多类别分类,无需任何独热编码。
如果你想使用神经网络,那么根据你使用的损失函数,你可能需要对标签进行独热编码。