У меня есть набор данных с 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
, которая у меня есть. Или я должен просто присвоить номер каждой мощности в подмножестве строкового типа (поскольку они имеют высокую мощность, и поэтому мое пространство функций будет увеличиваться в геометрической прогрессии)?
EDIT Что касается подмножества типа int, я думаю, что лучший выбор - сохранить функции столбцов такими, какие они есть (не передавать их какому-либо кодировщику). Проблема сохраняется для подмножества строкового типа с высокая кардинальность.