我有一个包含 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()
or OneHotEncoder()
[出于我上面暴露的原因],以及主要以哪种方式使用它们[就代码而言]X
我拥有的矩阵。
或者我应该简单地为字符串类型子集中的每个基数分配一个数字(因为它们具有高基数,因此我的特征空间将呈指数级增长)?
EDIT对于 int 类型的子集,我猜最好的选择是保持列特征不变(不要将它们传递给任何编码器)
对于具有高基数的字符串类型子集,问题仍然存在。
这是迄今为止最简单的:
df = pd.get_dummies(df, drop_first=True)
如果内存溢出或者速度太慢,则减少基数:
top = df[col].isin(df[col].value_counts().index[:10])
df.loc[~top, col] = "other"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)