【发布时间】:2019-07-01 10:17:18
【问题描述】:
我正在使用 OneHotEncoder 编码几个分类变量(例如 - 性别和年龄组)。编码器生成的特征名称类似于 - 'x0_female'、'x0_male'、'x1_0.0'、'x1_15.0' 等。
>>> train_X = pd.DataFrame({'Sex':['male', 'female']*3, 'AgeGroup':[0,15,30,45,60,75]})
>>> from sklearn.preprocessing import OneHotEncoder
>>> encoder = OneHotEncoder()
>>> train_X_encoded = encoder.fit_transform(train_X[['Sex', 'AgeGroup']])
>>> encoder.get_feature_names()
>>> array(['x0_female', 'x0_male', 'x1_0.0', 'x1_15.0', 'x1_30.0', 'x1_45.0',
'x1_60.0', 'x1_75.0'], dtype=object)
有没有办法告诉OneHotEncoder 以在开头添加列名的方式创建特征名称,例如 - Sex_female、AgeGroup_15.0 等,类似于 Pandas get_dummies() 所做的。
【问题讨论】:
-
谢谢。 Scikit-learn 处理数组而不是 dfs,所以我认为它不存储列名。 This question 和你的几乎一模一样。
-
感谢@JoshFriedlander 分享另一个问题。我知道 Pandas get_dummies 做了我正在寻找的东西(我在问题中提到过)。我很想知道是否有办法使用 Scikit-learn OneHotEncoder 来实现这一点。所以另一个问题的答案对我没有帮助。但是,您的评论 Scikit-learn 处理的是数组而不是 dfs,所以我认为它不存储列名。 表明在 Sklearn 中无法实现相同的目标。
-
是的,我认为那个问题中的 OP 想要和你一样,并被告知
get_dummies是实现它的唯一方法 -
根据最近的提交和讨论,他们似乎在 2019 年初积极开展这项工作。例如,“使用 ColumnTransformer 的一个缺点是,在 0.20 版中,在所有情况下,尚无法轻松找到哪些输入列对应于列转换器的哪些输出列。” oreilly.com/library/view/introduction-to-machine/9781449369880/…另见github.com/scikit-learn/scikit-learn/commit/…
标签: python-3.x scikit-learn one-hot-encoding