применение onehotencoder к массиву NumPy - PullRequest
0 голосов
/ 22 мая 2018

Я применяю OneHotEncoder для массива numpy.

Вот код

print X.shape, test_data.shape #gives 4100, 15) (410, 15)
onehotencoder_1 = OneHotEncoder(categorical_features = [0, 3, 4, 5, 6, 8, 9, 11, 12])
X = onehotencoder_1.fit_transform(X).toarray()
onehotencoder_2 = OneHotEncoder(categorical_features = [0, 3, 4, 5, 6, 8, 9, 11, 12])
test_data = onehotencoder_2.fit_transform(test_data).toarray()

print X.shape, test_data.shape #gives (4100, 46) (410, 43)

, где X и test_data равны <type 'numpy.ndarray'>

X это мой поезд, пока test_data мой тестовый набор.

Как же нет.столбцов разных для X & test_data.они должны быть 46 или 43 для обоих после применения onehotencoder.

Я применяю OnehotEncoder для определенных атрибутов, поскольку они являются категоричными по своей природе как в X, так и вtest_data

Может кто-нибудь указать, что здесь не так?

1 Ответ

0 голосов
/ 22 мая 2018

Не используйте новый OneHotEncoder для test_data, используйте первый и используйте только transform() для него.Сделайте следующее:

test_data = onehotencoder_1.transform(test_data).toarray()

Никогда не используйте fit() (или fit_transform()) для данных тестирования.

Различное количество столбцов вполне возможно, поскольку может случиться, что данные теста не содержатнекоторые категории, которые присутствуют в данных поезда.Поэтому, когда вы используете новый OneHotEncoder и вызываете fit() (или fit_transform()), он узнает только о категориях, присутствующих в test_data.Так что будет разница между столбцами.

...