我有一个包含 80% 分类变量的机器学习分类问题。如果我想使用某个分类器进行分类,我必须使用一种热编码吗?我可以在没有编码的情况下将数据传递给分类器吗?
我正在尝试执行以下功能选择:
- 我读了火车文件:
num_rows_to_read = 10000
train_small = pd.read_csv("../../dataset/train.csv", nrows=num_rows_to_read)
- 我将分类特征的类型更改为“类别”:
non_categorial_features = ['orig_destination_distance',
'srch_adults_cnt',
'srch_children_cnt',
'srch_rm_cnt',
'cnt']
for categorical_feature in list(train_small.columns):
if categorical_feature not in non_categorial_features:
train_small[categorical_feature] = train_small[categorical_feature].astype('category')
- 我使用一种热编码:
train_small_with_dummies = pd.get_dummies(train_small, sparse=True)
问题是第三部分经常卡住,尽管我使用的是一台强大的机器。
因此,如果没有一种热编码,我就无法进行任何特征选择,以确定特征的重要性。
你有什么建议吗?
原文由 avicohen 发布,翻译遵循 CC BY-SA 4.0 许可协议
方法 1:您可以使用熊猫的
pd.get_dummies
。示例 1:
示例 2:
以下将把给定的列转换为一个热列。使用前缀来拥有多个虚拟对象。
方法 2:使用 Scikit-learn
使用
OneHotEncoder
的优点是能够fit
在一些训练数据上,然后transform
在一些其他实例上使用相同的数据我们还有handle_unknown
来进一步控制编码器对 看不见 的数据执行的操作。给定一个具有三个特征和四个样本的数据集,我们让编码器找到每个特征的最大值并将数据转换为二进制单热编码。
这是此示例的链接:http: //scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html