python - 不需要标签的一热编码?

标签 python machine-learning classification one-hot-encoding multilabel-classification

我试图从经典虹膜分类问题的指导教程中理解代码块。
最终模型的代码块如下

chosen_model = SVC(gamma='auto')
chosen_model.fit(X_train,Y_train)
predictions = chosen_model.predict(X_valid)
this image您可以看到 X_train 和 Y_train 中存在的数据类型。这些是 Numpy 数组。 Y_train 包含 Iris 种类作为字符串。
我的问题很简单:即使我没有将 Y_train 单热编码到不同的二进制列中,模型如何工作?我从其他教程中的理解是,对于多类分类,我需要先进行单热编码。
代码运行良好,我想掌握什么时候需要 One-Hot Encode,什么时候不需要。谢谢!

最佳答案

我想你可能会混淆 multiclass (你的情况)与 multioutput分类。
在多类分类问题中,您的输出应该只是一个目标列,您将训练模型对该列中的类进行分类。如果您必须预测 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')

关于python - 不需要标签的一热编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62911538/

相关文章:

search - 测量精确度和召回率

android - 戴眼镜找眼睛 OpenCv

python - 了解 BST 遍历的打印输出

python - 正则表达式仅提取单词

python - 使用Python中的Azure语音服务读取音频文件并转换为文本,但只有第一句话转换为语音

python - 从 sqlite3 填充组合框可编辑用户名和行编辑密码

machine-learning - 有人可以向我解释逻辑回归中成本函数和梯度下降方程之间的区别吗?

python - clf.score(X_train,Y_train) 在决策树中评估什么?

machine-learning - 即使在对数据集进行过采样后性能也非常低

classification - 基于 PGN 格式获取国际象棋生态代码的 python/perl 库