【发布时间】:2020-01-16 15:37:18
【问题描述】:
我有一个存储为 Dataframes 的训练集和测试集。我正在尝试对我的数据集上的名义特征进行 One-hot 编码。但我有以下问题:
- 总共有3个分类特征,但我不知道每个特征的值是多少,因为数据集很大。
- 测试集的值在训练集上不存在,因此当我进行 one-hot 编码时,训练集应该将向量标记为 0,以表示未见过的值。但正如我在 1 中提到的,我并不了解所有功能。
- 我发现我可以使用
df = pd.get_dummies(df, prefix_sep='_')进行一次热编码,该命令适用于所有分类特征,但我注意到它将新特征移动到训练数据帧的末尾,我认为这是一个问题,因为我们不知道哪个特征的索引。还有第 2 个问题,新的火车/集合应该具有相同的索引。
有没有自动化的方法来做到这一点?或者图书馆?
编辑
感谢以下答案,我能够对许多功能执行一次热编码。但是下面的代码给出了以下问题:
- 我认为
scikit-learn去除列标题并将结果生成为数组而不是 DataFrame - 由于特征被剥离,我们不知道哪个向量属于哪个特征。即使我执行
df_scaled = pd.DataFrame(ct.fit_transform(data2))将结果存储在数据帧中,创建的数据帧df_scaled也没有标头,尤其是当标头在预处理后现在更改时。也许sklearn.preprocessing.OneHotEncoder有一种方法可以跟踪新功能及其索引??
【问题讨论】:
标签: python pandas scikit-learn