【问题标题】:convert text columns into numbers in sklearn在sklearn中将文本列转换为数字
【发布时间】:2016-04-27 05:30:54
【问题描述】:

我是数据分析新手。我正在 python Sklearn 中尝试一些模型。我有一个数据集,其中一些列有文本列。如下所示,

数据集

有没有办法将这些列值转换为 pandas 或 Sklearn 中的数字?为这些值分配数字是对的吗?如果测试数据中弹出一个新字符串怎么办?

请指教。

【问题讨论】:

  • 考虑使用 pandas 中的get_dummies 函数。忽略测试数据中遇到的所有新值,您不能使用训练期间未出现的值。
  • 我正在考虑使用它。但有些列有许多唯一值(最多 400+)。

标签: python numpy pandas scikit-learn


【解决方案1】:

考虑使用标签编码 - 它通过为每个类别分配一个介于 0 和 num_of_categories-1 之间的整数来转换分类数据:

from sklearn.preprocessing import LabelEncoder
df = pd.DataFrame(['a','b','c','d','a','c','a','d'], columns=['letter'])

  letter
0      a
1      b
2      c
3      d
4      a
5      c
6      a

申请:

le = LabelEncoder()
encoded_series = df[df.columns[:]].apply(le.fit_transform)

编码系列:

    letter
0   0
1   1
2   2
3   3
4   0
5   2
6   0
7   3

【讨论】:

  • 如何将其应用于预测数据以获取匹配的字母编号?例如当我想预测 d 时,它必须从您的示例转换为 3
  • 如果我对您的理解正确 - 您可以在“侧面”保留原始值的副本以供参考。如果需要,您将能够转换回字母。我希望这会有所帮助 - 如果不是请澄清您要做什么。
  • 所以,为了简单起见,让我们使用您的示例作为我的数据集,并假设有一个目标列(对于这个示例,我们不关心它),在我训练我的模型之前,我转换然后,我用它来训练我的模型。现在我有一个训练有素的模型。现在我想为我的模型提供一个特征c 以获得预测。从您的示例中,c 被转换为2(很容易,因为我可以查看它),所以我需要用2 为我的模型提供我的预测。问题是我如何为c 获得2
  • 您可以使用 np.where 来回切换(2 到 c 并返回)。它就像 excel 中的“if”一样简单。(medium.com/@emayoung95/…)
【解决方案2】:

您可以使用分类数据类型将它们转换为整数代码。

column = column.astype('category')
column_encoded = column.cat.codes

只要使用具有足够深的树的基于树的模型,例如GradientBoostingClassifier(max_depth=10),您的模型应该能够再次拆分类别。

【讨论】:

    猜你喜欢
    • 2022-10-19
    • 2018-03-25
    • 2019-10-07
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    相关资源
    最近更新 更多