¿Cómo codificar características categóricas en sklearn?

Tengo un conjunto de datos con 41 características [de 0 a 40 columnas], de las cuales 7 son categóricas. Este conjunto categórico se divide en dos subconjuntos:

Un subconjunto de tipo de cadena (las características de columna 1, 2, 3)Un subconjunto de tipo int, en forma binaria 0 o 1 (las características de columna 6, 11, 20, 21)

Además, las características de columna 1, 2 y 3 (de tipo de cadena) tienen cardinalidad 3, 66 y 11 respectivamente. En este contexto, tengo que codificarlos para usar el algoritmo de máquina de vectores de soporte. Este es el código que tengo:

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)

No sé si es mejor usarDictVectorizer() oOneHotEncoder() [por las razones que expuse anteriormente], y principalmente de qué manera usarlos [en términos de código] con elX matriz que tengo. ¿O debería simplemente asignar un número a cada cardinalidad en el subconjunto de tipo de cadena (ya que tienen una alta cardinalidad y, por lo tanto, mi espacio de características aumentará exponencialmente)?

EDITAR Con respecto al subconjunto de tipo int, supongo que la mejor opción es mantener las características de la columna como están (no las pase a ningún codificador). El problema persiste para el subconjunto de tipo de cadena con alta cardinalidad.

Respuestas a la pregunta(4)

Su respuesta a la pregunta