2012-10-18 8 views
6

Scikit-learn은 기계 학습을위한 사용자 친화적 인 Python 모듈을 제공합니다.scikit-learn에서 SVM과 함께 정수가 아닌 문자열 레이블을 사용하려면 어떻게해야합니까? Python

내 라벨 및 입력 데이터가 단어 및 주석 인 자연 언어 처리 (NLP) 용 SVM 태그 지정자를 학습하려고합니다. 예 : 입력 튜플 [[1,2], [2,0]]으로 이중/정수 데이터를 사용하는 대신 내 튜플이 다음과 같이 표시 될 것입니다 [['word','NOUN'], ['young', 'adjective']]

누구나 내가 튜플과 함께 SVM을 사용할 수있는 방법을 보여줄 수 있습니까? 여기에 제공된 튜토리얼/문서는 정수/이중 입력에 대한 것입니다. http://scikit-learn.org/stable/modules/svm.html

답변

12

대부분의 기계 학습 알고리즘 프로세스 입력 샘플을 같은 그 A A 사이에 거리를 (보통 유클리드) 작은 샘플 쌍인 을 의미하며, 2 개의 샘플은 당면 문제와 관련된 방식으로 과 유사한입니다.

인코딩 할 수있는 플로트 기능 세트를 찾는 것은 기계 학습 전문가의 책임입니다. 이 인코딩은 특정 도메인입니다. 따라서 모든 응용 프로그램 도메인 (다양한 NLP 작업, 컴퓨터 비전, 트랜잭션 로그 분석 ...)에서 작동 할 원시 데이터에서 해당 표현을 작성하는 일반적인 방법은 없습니다. 모델링 작업을 학습하는이 부분을 피쳐 추출이라고합니다. 수작업이 많이 필요할 때 기능 엔지니어링이라고도합니다.

이제 특수한 문제에 대해 문장에서 관심있는 단어 (예 : 명명 된 엔티티 검색과 같은 시퀀스 태그 지정) 주변의 단어 창에 대한 POS 태그는 scikit-learn의 DictVectorizer feature extraction helper class을 사용하여 적절하게 인코딩 할 수 있습니다.

+0

+1. POS 태깅의 경우 POS 창은 한 방향으로 만 확장 할 수 있습니다. 단어 창은 좋은 기능을 제공 할 수도 있습니다 (적어도 NER 및 WSD에서는 잘 작동합니다). 또한 고려중인 단어의 고정 길이 접두사도 사용할 수 있습니다. –

4

이것은 scikit이나 python의 질문이 아니지만 SVM의 일반적인 문제입니다. 의 SVM에서

데이터 인스턴스는 스칼라 종류, 일반적으로 실수의의 벡터로 표현해야합니다. 따라서 범주 속성은 SVM에 포함되기 전에 먼저 일부 숫자 값에 매핑되어야합니다.

일부 범주 속성은 더 자연스럽게/논리적으로 일부 규모 (일부 "느슨한"지표)에 매핑 될 수 있습니다. 예를 들어, 'no rush', 'standard delivery', 'Urgent'및 'Most Urgent'와 같은 우선 순위 필드에 대한 (1, 2, 3, 5) 매핑이 적합 할 수 있습니다. 또 다른 예로 빨강, 초록, 파랑 ​​등의 컴포넌트에 대해 3 차원으로 매핑 할 수있는 색상이있을 수 있습니다.
다른 속성에는 축척에 대한 대략적인 논리 매핑도 허용하는 의미론이 없습니다. 이러한 속성에 대한 다양한 값에는 SVM의 하나 (또는 ​​여러 개) 차원에 임의의 숫자 값을 할당해야합니다. SVM에 이러한 임의의 "비 메트릭"차원이 많으면 SVM 작업에 암시적인 거리 계산 및 클러스터링 논리가 의미 적으로 덜 관련되어 있기 때문에 항목을 적절히 분류 할 때 효율성이 떨어질 수 있습니다.

이 관찰은 항목에 비 숫자 또는 비 메트릭 차원이 포함 된 SVM을 전혀 사용할 수 없다는 의미는 아니지만 기능 선택 및 기능 매핑이 일반적으로 분류 자의 매우 중요한 매개 변수임을 상기시키는 것은 분명합니다. 특히 SVM.

POS-tagging의 특별한 경우 ... 나는 지금 당황 스럽다. 라벨을 붙인 코퍼스의 속성과 숫자 값에 매핑하는 방법에 대해 궁금하다. SVMTool은 SVM을 사용하여 매우 효율적인 POS 태그 생성기를 생성 할 수 있으며 여러 학술 논문에서도 SVM을 기반으로하는 태그 작성기를 설명합니다. 그러나 나는 태그에 대한 다른 접근 방식에 익숙해있어 (HMM에 또는 최대 엔트로피와 예.) 수레의 벡터이다