如何在sklearn中编码分类特征?
作者:互联网
我有一个包含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,scikit-learn,one-hot-encoding,categorical-data,dictvectorizer 来源: https://codeday.me/bug/20190627/1309252.html