Sklearn - невозможно использовать закодированные данные в классификаторе Random Forest

я новичок в науке. Я'Я пытаюсь использовать предварительную обработку. OneHotEncoder для кодирования моих тренировочных и тестовых данных. После кодирования я попытался обучить классификатор случайных лесов, используя эти данные. Но я получаю следующую ошибку при установке. (Здесь ошибка трассировки)

    99         model.fit(X_train, y_train)
    100         preds = model.predict_proba(X_cv)[:, 1]
    101 

C:\Python27\lib\site-packages\sklearn\ensemble\forest.pyc in fit(self, X, y, sample_weight)
    288 
    289         # Precompute some data
--> 290         X, y = check_arrays(X, y, sparse_format="dense")
    291         if (getattr(X, "dtype", None) != DTYPE or
    292                 X.ndim != 2 or

C:\Python27\lib\site-packages\sklearn\utils\validation.pyc in check_arrays(*arrays, **options)
    200                     array = array.tocsc()
    201                 elif sparse_format == 'dense':
--> 202                     raise TypeError('A sparse matrix was passed, but dense '
    203                                     'data is required. Use X.toarray() to '
    204                                     'convert to a dense numpy array.')

TypeError: A sparse matrix was passed, but dense data is required. Use X.toarray() to convert to a dense numpy array.

Я попытался преобразовать разреженную матрицу в плотную, используя X.toarray () и X.todense (), но когда я это сделал, я получил следующую трассировку ошибки.

 99         model.fit(X_train.toarray(), y_train)
    100         preds = model.predict_proba(X_cv)[:, 1]
    101 

C:\Python27\lib\site-packages\scipy\sparse\compressed.pyc in toarray(self)
    548 
    549     def toarray(self):
--> 550         return self.tocoo(copy=False).toarray()
    551 
    552     ##############################################################

C:\Python27\lib\site-packages\scipy\sparse\coo.pyc in toarray(self)
    236 
    237     def toarray(self):
--> 238         B = np.zeros(self.shape, dtype=self.dtype)
    239         M,N = self.shape
    240         coo_todense(M, N, self.nnz, self.row, self.col, self.data, B.ravel())

ValueError: array is too big.

Может ли кто-нибудь помочь мне исправить это.

Спасибо

Ответы на вопрос(1)

Случайные леса sklearn не работают с разреженным вводом, и ваша форма набора данных слишком велика и слишком редка для плотной версии, чтобы поместиться в памяти.

Вероятно, у вас есть некоторые категориальные особенности с большим или большим количеством элементов (например, свободное текстовое поле или уникальные идентификаторы записей). Попробуйте отказаться от этих функций и начать все сначала.

 Fred Foo19 июн. 2013 г., 18:14
Это'Пришло время исправить случайные леса :)
 Fred Foo19 июн. 2013 г., 22:42
Вы имеете в виду, что OP должен сначала сделать выбор функции?
 ogrisel20 июн. 2013 г., 10:23
Я имею в виду, что OP не должен использовать OneHotEncoder для функций, которые имеют уникальные значения, такие как идентификатор образца или поле произвольного текста.
 ogrisel19 июн. 2013 г., 18:35
Договорились, хотя в этом случае этоОчень вероятно, что наивное применение onehotencoder для функций с очень высокой мощностью не сработало бы, даже если бы у нас была редкая поддержка ввода в RF. Шумные функции никогда не помогут.

Ваш ответ на вопрос