2013-06-19 2 views
1

scikit-learn을 처음 사용했습니다. 전처리를 사용하려고합니다. OneHotEncoder를 사용하여 교육 및 테스트 데이터를 인코딩 할 수 있습니다. 인코딩 후에는 해당 데이터를 사용하여 임의의 포리스트 분류자를 훈련 시키려고했습니다. 하지만 피팅 할 때 다음 오류가 발생합니다. (여기서 오류 추적)Sklearn - 임의의 포리스트 분류 자에서 인코딩 된 데이터를 사용할 수 없습니다.

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. 

누구든지 해결하도록 도움을 줄 수 있습니까?

답변

3

sklearn 랜덤 포레스트 스파 스 입력에서 작동하지 않는 주셔서 감사 데이터 집합 모양이다 크고 조밀 한 버전은 메모리에 맞게 너무 스파 스.

큰 카디널리티가 많은 분류 기능 (예 : 무료 텍스트 필드 또는 고유 항목 ID)이있을 수 있습니다. 이러한 기능을 삭제하고 다시 시작하십시오.

+0

랜덤 포리스트를 수정해야 할 때입니다. –

+0

이 경우에도 RF에서 입력을 아주 적게 지원하더라도 매우 높은 카디널리티 기능에 순진하게 onehotencoder를 적용하면 작동하지 않을 가능성이 높습니다. 시끄러운 기능은 결코 도움이되지 않습니다. – ogrisel

+0

OP가 먼저 기능을 선택해야한다는 의미입니까? –

관련 문제