【问题标题】:How to Encode categorical data into labels for training and testing如何将分类数据编码为标签以进行训练和测试
【发布时间】:2020-10-31 17:10:38
【问题描述】:

训练数据集包含称为商店和其他对象的列。现在对于机器学习模型,我将列转换为标签以用于训练目的。使用下面的代码

from sklearn.ensemble import RandomForestRegressor
X = df_all_4.copy()
y = df_all_4.item_price
X = X.drop(['item_price','date'], axis=1)
for c in df_all_4.columns[df_all_4.dtypes == 'object']:
    X[c] = X[c].factorize()[0]
rf = RandomForestRegressor()
rf.fit(X,y)

现在测试数据集也有这些分类列,但我认为缺少一些列,包括与此处不相关的目标列。但是,如果我再次标记训练数据集(无序),标签将与训练时使用的标签不同,因此模型将无法正常工作。如何解决这个问题并在训练和测试时获得相同的编码

【问题讨论】:

  • 在 sklearn 中使用 onehotencoder
  • 无法标记它们?

标签: python pandas machine-learning scikit-learn


【解决方案1】:

这里重要的是您可以使用 Sklearn 包中的 LabelEncoder 或 OneHotEncoder 类。这使得这项任务非常简单。

from sklearn.preprocessing import LabelEncoder,OneHotEncoder
for c in df_all_4.columns[df_all_4.dtypes == 'object']:
    le = LabelEncoder()
    X[c] = le.fit_transform(X[c])
    test[c] = le.transform(test[c])

就是这样,您已将标签编码为训练数据和测试数据的数字 您还可以使用 OneHotEncoder 对分类数据执行 OneHotEncoding。

【讨论】:

  • 标签编码器的顺序无关紧要,一旦尝试并检查结果。如果顺序很重要,为什么不更改测试集中列的顺序,类似于训练数据。
猜你喜欢
  • 2018-05-28
  • 2021-02-03
  • 2019-12-09
  • 2018-05-04
  • 2020-06-08
  • 2019-03-15
  • 2021-08-24
  • 2019-10-11
  • 2021-12-23
相关资源
最近更新 更多