为了账号安全,请及时绑定邮箱和手机立即绑定

不需要标签的一次性编码?

不需要标签的一次性编码?

江户川乱折腾 2023-03-08 11:23:21
我正在尝试理解经典 Iris 分类问题的指导教程中的代码块。最终模型的代码块如下chosen_model = SVC(gamma='auto')chosen_model.fit(X_train,Y_train)predictions = chosen_model.predict(X_valid)在此图中,您可以看到 X_train 和 Y_train 中存在的数据类型。这些是 Numpy 数组。Y_train 包含 Iris 物种作为字符串。我的问题很简单:即使我没有将 Y_train 单热编码到不同的二进制列中,模型如何工作?我从其他教程中了解到,对于多类分类,我需要先进行 one-hot 编码。代码运行良好,我想掌握何时需要 One-Hot Encode 以及何时不需要。谢谢你!
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

我认为您可能将多类(您的情况)与多输出分类混淆了。

在多类分类问题中,您的输出应该只是一个目标列,您将训练模型在该列的类之间进行分类。您必须拆分为单独的目标列,如果您必须预测每个样本的n不同类别,但事实并非如此,您只需要每个样本的一个目标。

因此对于多类分类,不需要对目标进行 OneHotEncode,因为您只需要一个目标列(在 SVC 中也可以是分类的)。您必须OneHotEncoder使用或与其他一些编码器一起编码的是分类输入特征,它必须是数字。

此外,SVC可以处理分类目标,因为它LabelEncode是内部的:

from sklearn.datasets import load_iris

from sklearn.svm import SVC

from sklearn.model_selection import train_test_split


X, y = load_iris(return_X_y=True)

X_train, X_test, y_train, y_test = train_test_split(X, y)

y_train_categorical = load_iris()['target_names'][y_train]

# array(['setosa', 'setosa', 'versicolor',...


sv = SVC()

sv.fit(X_train, y_train_categorical)

sv.classes_

# array(['setosa', 'versicolor', 'virginica'], dtype='<U10')


查看完整回答
反对 回复 2023-03-08
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

据我所知,从未对输出进行过一次热编码。您需要对一个特征进行一次热编码,这样模型就不会混淆某些颜色大于其他颜色。当您计算输出时,模型使用基于类别的概率分布。所以这里不会有任何问题。

简而言之,您应该只对输入特征而不是输出类进行一次热编码。


查看完整回答
反对 回复 2023-03-08
  • 2 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号