我有一个包含 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/