2014-11-13 7 views
0

LIBSVM에 대한 자체 유효성 검사 기능을 구현하려고 시도하고 있지만, 제공되는 데이터 구조를 처리하는 방법에 대해 혼란 스럽습니다. 입력 데이터.svm_problem을 사용자 정의 교차 유효성 검사를 위해 5 폴드로 나누는 방법 - LIBSVM

데이터는 svm_problem 구조에 저장된다

public class svm_problem implements java.io.Serializable 
{ 
    public int l; 
    public double[] y; 
    public svm_node[][] x; 
} 

: L 데이터 세트의 길이이고; y은 대상 값을 포함하는 배열입니다. x은 하나의 학습 벡터를 나타내는 포인터의 배열입니다.

public class svm_node implements java.io.Serializable 
{ 
    public int index; 
    public double value; 
} 

내 목표는 5 겹으로 훈련 데이터를 분할 훈련 (기능 svm_train)에 대한 그들의 4를 사용하고, 그 결과를 테스트하기 위해 나머지 하나를 사용하는 것입니다

svm_node는 다음과 같이 정의된다 (svm_predict)를 사용하여 가장 좋은 예측 결과를 갖는 C의 값을 찾습니다 (오류 기능 기준).

제 문제는 데이터 구조에 따라 데이터를 5 배로 분리하는 것입니다. 나를

내가 가이드로 이것을 사용하고있다 C.

의 최적화를 진행하는 방법은 데이터 구조가 제대로 위해 5 겹으로 나눌 수 있습니다 A Practical Guide to Support Vector Classification

누군가가 예 또는를 제공 할 수있는 경우 이것이 최선의 방법에 대한 예제에 링크하면 크게 감사하겠습니다. 감사.

답변

1

svm_problemi = 0, 1, ..., l - 1 들어 설명하는 학습 기능에 대한 ff(x[i])해야 대략 동일 y[i]있다. 각각의 튜플 (x[i], y[i])은 찾으려는 함수 f의 노이즈가 많은 샘플로 생각할 수 있습니다.

데이터 집합을 교육, 교차 유효성 검사 및 테스트 데이터 집합으로 분할하려면 집합 {0, 1, ..., l - 1}을 임의로 3 부분으로 나누면됩니다. 이것은 전형적으로 숫자 0, 1, ..., l - 1의 목록을 뒤섞어서 "그 숫자의 처음 60 %는 훈련이고, 다음 20 %는 교차 검증이고, 다음 20 %는 시험"이라고 말하는 것과 비슷합니다. 각 데이터 집합의 하위 집합에 대해 데이터의 해당 부분 만 설명하는 svm_problem을 새로 만들 수 있습니다.

+0

교육용 및 테스트 용 데이터 세트가 이미 두 개 있습니다. 최선의 C 값을 찾기 위해 교차 검증을 수행하기 위해 교육 데이터 세트를 5 폴드로 분할하려합니다. 이 C 값은 전체 데이터 세트가 svm을 학습하는 데 사용될 때 사용됩니다. 가장 좋은 C를 찾기 위해 4 가지 다른 방법을 사용하여 각 세트의 유효성을 검사하는 방법을 잘 모르겠습니다. C가 수동으로 업데이트됩니다. 각각 다른 4 개를 결합하여 svm_train으로 전달해야합니까? 아니면 각각을 svm_train에 개별적으로 전달해야합니까? 이 기능은 Libsvm에 포함되어 있습니다. –

+0

@MattKoczwara'svm_train'이 모델 매개 변수를 점차적으로 업데이트한다고 가정 할 때 실제로 네 개의 20 %'svm_problem' 인스턴스 또는 한 개의 80 %'svm_problem' 인스턴스 중 어떤 것을 공급하는지 상관하지 않아야합니다. 필자는 특정 라이브러리에 익숙하지 않지만 데이터를 분할하는 방법은 기계 학습에 있어서는 매우 보편적입니다. –