python - 如何在 sklearn 中编码分类特征?

标签 python scikit-learn categorical-data one-hot-encoding dictvectorizer

我有一个包含 41 个特征的数据集 [从 0 到 40 列],其中 7 个是分类特征。该分类集分为两个子集:

  • 字符串类型的子集(列特征1、2、3)
  • int类型的子集,二进制形式0或1(列特征6,11,20,21)

此外,列特征 1、2 和 3(字符串类型)的基数分别为 3、66 和 11。 在这种情况下,我必须对它们进行编码以使用支持向量机算法。 这是我的代码:

import numpy as np
import pandas as pd
from sklearn import preprocessing
from sklearn import feature_extraction

df = pd.read_csv("train.csv")
datanumpy = df.as_matrix()
X = datanumpy[:, 0:40]  # select columns 1 through 41 (the features)
y = datanumpy[:, 41]  # select column 42 (the labels)

我不知道使用 DictVectorizer()OneHotEncoder() 哪个更好 [出于我上面公开的原因],主要是用哪种方式使用他们 [在代码方面] 与我拥有的 X 矩阵。 或者我应该简单地为字符串类型子集中的每个基数分配一个数字(因为它们具有高基数,所以我的特征空间将呈指数增长)?

编辑 关于 int 类型的子集,我想最好的选择是保持列特征不变(不要将它们传递给任何编码器) 对于具有高基数的字符串类型的子集,问题仍然存在。

最佳答案

这是迄今为止最简单的:

 df = pd.get_dummies(df, drop_first=True)

如果出现内存溢出或速度太慢,则降低基数:

top = df[col].isin(df[col].value_counts().index[:10])
df.loc[~top, col] = "other"

关于python - 如何在 sklearn 中编码分类特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40617862/

相关文章:

python - 首先是 Tkinter 还是 PyQt?

python - SK学习: TypeError: __init__() got an unexpected keyword argument n_splits

r - 从相互排斥的虚拟变量创建分类变量

python - Django模型层中GET和FILTER的区别

python - 检查实例是否在 Python 中覆盖了父类(super class)方法

python - 带有部分字符串的 xpath 搜索属性

python - 如何保存 GridSearchCV 对象?

Python 决策树 GraphViz

testing - SAS 对比度 : "Weighting" for linear combination of parameter estimates in PROC GLM

python - 如何将序数值转换为分类值?