2017-04-07 7 views
0

각 행 (샘플)이 비트 목록 (~ 200 000 비트)으로 표시되는 큰 데이터 세트 (10 000 행)가 있습니다. 각 비트는 부재 또는 샘플에 지형지 물의 존재 여부를 나타냅니다. 그래서, 이 큰 (10 000 x 200 000) 높은 차원 스파 스 데이터가 각 샘플에 대해, 나는 단지 비 제로 비트의 인덱스를 저장하고있어, 메모리 공간을 절약하기 위해sklearn.svm.LinearSVC와 함께 사용되는 희박한 행렬 표현

을 설정합니다. 7 개 기능을 가진 벡터 예 :

[0, 0, 1, 0, 0, 1, 1] ===> [2, 5, 6]

나는 모든 데이터 세트에 대해이 작업을하고 있어요. 결과가 X (10 000 가변 크기 벡터)이되도록 합니다. 각 행은 두 개의 라벨 중 하나로 표지

    [[0,0,1,0],  [[2], 
    initial_data= [0,1,1,0], ===> [1,2], = X 
        [0,1,0,1]]  [1,3]] 

: malignant 또는 benign 초기 데이터는 Exemple 3x4 세트. 선형 지원 벡터 분류 모델 (sklearn.svm.LinearSVC의 모델)은 X으로 표시되는 데이터에 대해 학습됩니다. 상기 모델은 스파 스 입력을 받아 SciPy 가능한 일곱 개 표현이 있음을 알고 :

  • csc_matrix : 압축 스파 스 열 형식
  • csr_matrix : 압축 스파 스 행 형식
  • bsr_matrix : 블록 스파 스 행 형식
  • lil_matrix : 목록 형식 목록
  • dok_matrix : 사전 키 형식
  • coo_matrix : COOrdinate 형식 (일명 IJV, 삼중 항 형식)
  • dia_matrix : 대각선 형식

표현은 모델을 훈련에 더 효율적입니다? X에서 그 표현으로 효율적으로 전달하려면 어떻게해야합니까?

답변

3

csr이 (가) sklearn's sources으로 지원됩니다. 발췌 :

class LinearSVC(BaseEstimator, LinearClassifierMixin, 
      _LearntSelectorMixin, SparseCoefMixin): 
    ... 
    ... 
    X, y = check_X_y(X, y, accept_sparse='csr', 
        dtype=np.float64, order="C") 

CSR 및 기타 여러 형식을 직접 스파 스 매트릭스를 구축하지 않는 것이 좋습니다 (물건을 추가/희소성 구조를 변경하는 것은 매우 비용이 많이 드는).

dok_matrix/lil_matrix를 사용하여 데이터에서 스파 스 매트릭스를 만들고 (간단해야 함) 변환 한 다음 (선형 시간으로 완료) dok_matrix/lil_matrix를 사용하십시오.

X = X.tocsr() 

은 또한 당신이 통과하는 모든 데이터가 liblinear로 내부적으로 변환되는 것을 명심 sklearn에서 사용하는 외부 라이브러리는 자신의 데이터 구조를 가지고있다. 따라서 잘못된 형식을 전달하면 그것은 일회성 전환 비용입니다. 순수 훈련 절차는 상관 없습니다!

0

모든 형식에는 to... 다른 형식으로 변환하는 방법이 있습니다. 따라서 너무 많은 추가 비용없이 하나의 형식으로 작성하고 다른 형식으로 계산할 수 있습니다.

  • coo_matrix는 - 같은 길이의 단지 3 배열 -이에 대한 입력을 이해하고 쉽게 만들 수 있습니다. 이미 배열이 빽빽한 경우이 형식으로 지정하면 색인이 추출됩니다.

  • csr_matrix - 대부분의 계산을 구현하는 형식입니다. coo.tocsr(...)이 널리 사용됩니다. 입력의 coo 스타일을 사용할 수 있습니다. indptr 입력 스타일을 사용하는 형식에 대해 더 많이 알아야합니다.

  • csc_matrix - 단지 변형 csr입니다. 그 전치의 일종.

  • lil_matrix - 이해하기 쉽습니다. 그리고 점진적으로 매트릭스를 만드는 것이 적당합니다. 조밀 한 배열에 대한 증분 변경만큼 좋지 않습니다.

  • bsr_matrix - 실제로 작은 묶음에서 행렬을 만드는 방법. 내부적으로 coo 형식을 사용합니다. 자연적으로 블록 지향적 인 어플리케이션의 경우.

  • dok_matrix - 실제로 사전 하위 클래스입니다. 점진적으로 사용하는 것은 좋지만 비슷한 사전 키를 사용하여 사전을 채우는 것보다 느립니다.

  • dia_matrix - 대각선으로 매트릭스를 정의 할 수 있습니다. 중간 형식입니다. 코드의 대각선 방향이 강한 경우에만 유용합니다.