Python 分类:有2个以上等级的目标

Python 分类:有2个以上等级的目标,python,machine-learning,classification,Python,Machine Learning,Classification,我正在做一个分类练习,面对一个有2个以上分类类的目标。我已经使用Labelencoder对这些类进行了编码。 唯一的问题是,我相信我可能不得不在之后使用Onehotencoding,因为我不再只有0和1,而是0,1,2,3。 事实是,我只是不知道Knn或决策T是否会接受这些数字作为类。如果没有,有人能告诉我怎么做吗 我的第一个目标是: 我将其更改为以下内容: 我想我真正的问题是,这可以直接用作我的目标的类,还是我需要进一步的工程?Sklearn中的大多数模型都支持不使用onehot编码的多类。K

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

我的第一个目标是: 我将其更改为以下内容:
我想我真正的问题是,这可以直接用作我的目标的类,还是我需要进一步的工程?

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])
如您所见,它们都支持无需任何热编码的多类


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

你想使用哪种模型。决策树分类器和knn都可以处理多类问题,因此你可以直接向他们提供当前的标签谢谢。我想我需要一个热编码。所以OnehotEncoding只适用于训练集,除非我在做神经网络,如果我理解正确的话?实际上取决于实现。如果您使用sklearn并使用knn或tree,则无需使用一个hot
1
3
2
0
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])