分类中的目标变量是否需要数字编码?

Nan*_*mar 1 python machine-learning sklearn-pandas

我使用sklearn进行文本分类,我的所有功能都是数字,但我的目标变量标签是文本.我可以理解编码特征到数字的基本原理,但不认为这适用于目标变量?

Luc*_*ron 7

如果您的目标变量是文本形式,您可以将其转换为数字形式(或者您可以不管它,请参阅下面的注释),以便任何Scikit-learn算法在OVA(One Versus All)方案中选择它:您的学习算法将尝试猜测每个类与剩余类相比,只有当它们将被转换为从0开始的数字代码(类的数量 - 1).

例如,在Scikit-Learn文档的这个示例中,您可以找出虹膜的类,因为有三个模型可以评估每个可能的类:

  • 0级与1级和2级相比
  • 1级与0级和2级
  • 2级与0级和1级

当然,0,1和2类是Setosa,Versicolor和Virginica,但算法需要将它们表示为数字代码,因为您可以通过浏览示例代码的结果来验证:

list(iris.target_names)
['setosa', 'versicolor', 'virginica']

np.unique(Y)
array([0, 1, 2])
Run Code Online (Sandbox Code Playgroud)

注意:如果Scikit-learn是字符串,那么它本身就会编码目标标签.在Scikit-learn的逻辑回归的Github页面上(https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/logistic.py),您可以在第1623和1624行看到代码调用标签编码器,它自动编码标签:

# Encode for string labels
label_encoder = LabelEncoder().fit(y)
y = label_encoder.transform(y)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。我尝试使用 SVM,无论有没有数值映射,两者似乎都会给出相同的结果 (2认同)
  • sklearn 自行处理文本目标。无需编码。 (2认同)
  • 虽然 `.fit`、`.transform` 和 `.predict` 支持文本目标,但某些函数不支持。`metrics.roc_auc_score`。在这种情况下,`LabelEncoder`是必要的:`enc = preprocessing.LabelEncoder().fit(y_test)``metrics.roc_auc_score(enc.transform(y_test),``enc.transform(xgb4.predict(X_test))) ` (2认同)