2012-10-03 1 views
3

scikit-learn의 SVM은 LIBSVM을 기반으로합니다. LIBSVM/SVM에서는 데이터의 크기를 조정해야하며 기능 값은 [0, 1] 또는 [-1, 1]의 두 범위 중 하나 여야합니다. 즉, 일반적인 행렬에서 각 열은 피쳐이고 배율은 열마다 수행됩니다.[0,1] 또는 [-1,1] 사이의 기능을 확장하는 scikit 지원

x'=(x-min)/(Max-min) 

이 "간단한 스케일링을"지원 scikit 배우기 않습니다

LIBSVM 자주 묻는 질문 [0, 1] 사이의 기능을 얻을 수있는 간단한 스케일링을 제안? SVM 및 RBF 커널과 함께 사용할 기능을 조정하는 다른 권장 사항이 있습니까? 어떤 참조? LIBSVM을 기반으로하는 "벡터 분류 지원을위한 실용 가이드"라는 참조 문헌을 발견했으며 [0, 1] 또는 [-1, 1]로 스케일링 할 것을 권장합니다.

답변

5

예,이 기능이 포함되어 있습니다. 귀하가 묘사하는 정확한 수식은 다음 릴리스에 sklearn.preprocessing.MinMaxScaler으로 표시됩니다. 지금은 sklearn.preprocessing.Scaler (다음 릴리스에서는 StandardScaler으로 이름이 바뀌 겠지만 이전 버전에는 이전 이름이 그대로 유지됨) 센터 및 비율 기능은 평균 0과 분산 1을 가지며 SVM 학습자에게 데이터를 전달하기에 충분해야합니다.

는 또한 sklearn.preprocessing.Normalizer (텍스트 및 분류에 사용되는 TfidfVectorizer)의 범위에 따라 샘플 값 정규화 [0, 1]. 이것은 텍스트 분류 및 정보 검색에서 일반적인 길이 정규화에 해당합니다.

당신은 SVM 분류 스케일링, 센터링을 구성하기 위해 Pipeline 객체를 사용할 수 있습니다

만 출혈 가장자리 버전
clf = Pipeline([('scale', Scaler()), 
       ('svm', SVC())]) 
+0

감사합니다 Larsmans! 전처리 .Scaler()는 열 (평균 0, var = 1)을 표준화합니다. 그러나 범위 [-1, + 1] 내 값을 얻지 못하고 있습니다. 나는 행렬을 가지고있다. 다음 코드를 사용하고 있습니다 : scal = preprocessing.Scaler(), scal.fit (a), scal.transform (a). 결과는 [-1, + 1] 범위에 없습니다. – user963386

+1

@ user963386 행렬에 부동 소수점 값이 포함되어 있는지 확인하십시오. 스케일러는 그렇지 않으면 올바르게 작동하지 않습니다. –

1

적어도 [-1,1]의 경우 StandardScaler을 찾고 있다고 생각합니다.

+0

; 이 클래스는 여전히 최신 릴리스에서'Scaler'라고 불 렸습니다. 자세한 내용은 내 대답을 참조하십시오. –

관련 문제