其他分享
首页 > 其他分享> > 如何在sklearn中编码分类特征?

如何在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