2014-11-20 3 views
2

알 수없는 테스트 데이터를 분류하기 위해 선형 svm 분류기를 작성하려고합니다.테스트 및 교육 세트의 기능 수가 다릅니다.

그러나 텍스트 문서의 길이가 고정되어 있지 않으므로 새 문서의 피쳐 길이가 같은지 확인하려면 어떻게해야합니까?

의 Src와 신지는 속성 # 다를

:! 2 = 1484

LibSVM classifier = new LibSVM(); 
classifier.setKernelType(new SelectedTag(LibSVM.KERNELTYPE_LINEAR, LibSVM.TAGS_KERNELTYPE)); 
classifier.buildClassifier(data1); 


System.out.println("done"); 
data2.setClassIndex(data2.numAttributes() - 1); 
double res = classifier.classifyInstance(data2.instance(0)); 

데이터 2 arff

@data 
'This is a string!','?' 

내가 가진 속성 같은 수의 특징 벡터를 만들 수 어쨌든 있나요 현재 모델? 아니면 다른 해결책이있을 것입니다.

답변

1

SVM이 숫자 데이터 만 처리 할 수 ​​있기 때문에이 방법이 효과가 있을지는 의문입니다. 문자열을 사용하려면 another kernel을 사용하거나 문자열 데이터를 필터를 사용하여 숫자 데이터로 변환해야합니다.

난 당신이 StringToWordVector 필터를 시도 제안 :

변환 문자열은 단어 발생 (토크 나이에 따라 다름) 문자열에 포함 된 텍스트 정보를 나타내는 속성 세트에 속성. 단어 집합 (속성)은 필터링 된 첫 번째 배치 (일반적으로 훈련 데이터)에 의해 결정됩니다.

해당 필터에 대한 설명 : 필터를 초기화 할 학습 데이터를 먼저 일괄 필터링합니다. 그런 다음 필터를 테스트 데이터에 적용하면 (심지어 데이터가 알려지지 않음 데이터) 필터링 된 교육 데이터와 항상 호환됩니다.

큰 문제는 모델이 프로그램 종료 후에도 생존해야한다는 것입니다. 그렇지 않은 경우 문제가 없습니다.

Instances train = ... // from somewhere 
Instances test = ... // from somewhere 
Standardize filter = new Standardize(); 
filter.setInputFormat(train); // initializing the filter once with training set 
Instances newTrain = Filter.useFilter(train, filter); // configures the Filter based on train instances and returns filtered instances 
Instances newTest = Filter.useFilter(test, filter); // create new test set 

(source)

필터가 훈련 데이터를 초기화 되었기 때문에, 당신은 지금이

을 마지막 줄을 반복하여 설정 한 필터링되지 않은 훈련과 같은 데이터 세트에 적용 할 수 있습니다
Instances newTest2 = Filter.useFilter(test2, filter); // create another new test set 

응용 프로그램을 여러 번 실행하는 동안 모델을 저장하고 반복해서 적용하려면 FilteredClassifier을 사용해야합니다. (this answer을 보시고 여기에서 FilteredClassifier의 사용법을 설명했습니다.) tl; dr : 필터는 분류 자의 일부이며 입력 데이터에 대한 변환을 유지하면서 분류 자의 일부입니다.

+0

나는 훈련 및 테스트 데이터에서 문자열을 단어 벡터 필터에 적용하여 모델을 작성했습니다. 그러나 모델을 다시 작성하지 않고 새로운 알 수없는 테스트 데이터로 작업하려면이 모델이 필요합니다. 어쨌든이 새로운 기능에 새로운 알 수없는 데이터를 추가 할 수 있습니까? – aceminer

+0

알 수없는 테스트 데이터로 작동합니다. 내 대답을 좀 더 명확하게 편집했습니다. – Sentry

관련 문제