字符串的整数编码并将其用作决策树(sklearn)的输入是不是会使分割属性离散或连续?

Posted

技术标签:

【中文标题】字符串的整数编码并将其用作决策树(sklearn)的输入是不是会使分割属性离散或连续?【英文标题】:Does integer encoding of strings and using this as an input to decision tree (sklearn) makes the splitting attributes discrete or continuous?字符串的整数编码并将其用作决策树(sklearn)的输入是否会使分割属性离散或连续? 【发布时间】:2019-07-30 10:20:51 【问题描述】:

我必须使用决策树分类器对某些数据进行分类。但是,属性值是字符串,我发现here,它说字符串不能用作输入。因此我对字符串使用整数编码。

在this 文章中,我发现传递整数编码的数据可能会导致错误的答案,因为 sklearn 假定数据之间是有序的。所以,唯一的出路是使用OneHotEncoder 模块。

使用OneHotEncoder 模块增加了特征的数量(例如,如果有一个属性'price' 的值为['high','med','low'],one-hot-encoding 将导致包含与实际属性'price' 相关的3 个属性;这些可以解释为['price-high','price-med', 'price-low'],并且属性值将是 1 或 0,具体取决于数据),这是我不想要的,因为我必须以某种需要原始特征的格式打印决策树(例如我需要“价格”)。

有办法解决吗?

【问题讨论】:

【参考方案1】:

我认为pd.get_dummies 会很有用,因为您想在创建单热向量时跟踪原始特征名称。

示例:

df = pd.DataFrame('price': ['high', 'medium', 'high', 'low'], 'some_feature': ['b', 'a', 'c','a'])
pd.get_dummies(df,columns=['price','some_feature'])

    price_high  price_low   price_medium    some_feature_a  some_feature_b  some_feature_c
0   1   0   0   0   1   0
1   0   0   1   1   0   0
2   1   0   0   0   0   1
3   0   1   0   1   0   0

当将此数据框输入决策树时,您可以更好地理解!

【讨论】:

当然。这会将数据转换为单热编码形式。但是,决策树将基于新特征(例如 price_high、price_low 等)构建。所以在打印决策树时,特征不会是“price”或“some_feature”,而是“price_high”、“price_low”等。 是的。当我们已经为它创建了假人时,为什么你只希望看到 price 作为特征名称。我认为,将其命名为 price_high 可以更好地解释决策树中的拆分方式

以上是关于字符串的整数编码并将其用作决策树(sklearn)的输入是不是会使分割属性离散或连续?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习 | 决策树 (sklearn) 官方文档

sklearn 决策树

sklearn中的交叉验证+决策树

黑客/克隆 sklearn 以支持修剪决策树?

sklearn 决策树 - 无法将字符串转换为浮点数

sklearn学习7-----决策树(tree)