2016-06-01 9 views
0

SVR (Support Vector Regression)의 RBF 커널에 대해 최상의 매개 변수 인 감마와 C를 선택하기 위해 교차 유효성 검사를 수행하고 싶습니다. LIBSVM을 사용하고 있습니다. 3D 메쉬 그룹 4 개가 포함 된 데이터베이스가 있습니다. 제 질문은 입니다. 제가 사용하고있는 접근 방식은 4 배 교차 검증입니까? RBF Kernal의 C와 Gamma 매개 변수를 선택하기 위해 예측 된 값과 groud_truth_values ​​사이의 오차를 최소화해야한다고 생각합니다.SVM 회귀 분석 교차 응답

[C,gamma] = meshgrid(-5:2:15, -15:2:3); %range of values for C and 
             %gamma 

%# grid search, and cross-validation 

for m=1:numel(C) 

    for k=1:4 
     fid1 = fopen(sprintf('list_learning_%d.txt',k), 'rt'); 
     i=1; 

     while feof(fid1) == 0 
      tline = fgetl(fid1); 
      v= load(tline); 
      v=normalize(v); 
      matrix_feature_tmp(i,:)=v; 
      i=i+1; 
     end 

     fclose(fid1); 

     % I fill matrix_feature_train of size m by n via matrix_feature_tmp 

     %%construction of the test matrix 
     fid2 = fopen(sprintf('liste_features_test%d.txt',k), 'rt'); 
     i=1; 

     while feof(fid2) == 0 
      tline = fgetl(fid2); 
      v= load(tline); 
      v=normalize(v); 
      matrice_feature_test_tmp(i,:)=v; 
      i=i+1; 
     end 

     fclose(fid2); 

     %I fill matrix_feature_test of size m by k via matrix_feature_test_tmp 

     mos_learning=load(sprintf('mos_learning_%d.txt',k)); 
     mos_wanted=load(sprintf('mos_test%d.txt',k)); 

     model = svmtrain(mos_learning, matrix_feature_train',sprintf('- 
     s %f -t %f -c %f -g %f -p %f ',3,2 ,2^C(m),2^gamma(m),1)); 

     [y_hat, Acc, projection] = svmpredict(mos_wanted, 
            matrix_feature_test', model); 
     MSE_Test = mean((y_hat-mos_wanted).^2); 
     vecc_error(k)=MSE_Test; 

     end 
     mean_vec_error_fold(m)=mean(vecc_error); 
end 

%select the best gamma and C 
[~,idx]=min(mean_vec_error_fold); 

best_C = 2^C(idx); 
best_gamma = 2^gamma(idx); 

%training with best parameters 
%for example 
model = svmtrain(mos_learning1, matrice_feature_train1',sprintf('-s 
      %f -t %f -c %f -g %f -p %f ',3,2 ,best_C, best_gamma,1)); 

[y_hat_final, Acc, projection] = svmpredict(mos_test1,matrice_feature_test1', 
          model); 

답변

1

기반 : 교차 유효성 검사 (제곱 상관 계수 = 유모 (회귀)) 여기

내가 쓴 코드가있는 동안

나는 또 다른 문제는,이에게 NAN 값을 얻기도했다 귀하의 설명에, 귀하의 코드를 읽지 않고, 그것은 교차 검증을하고 있지 않은 것처럼 들립니다. 교차 유효성 검사는 매개 변수 집합 (즉, Cgamma의 값)을 선택하고 해당 매개 변수를 일정하게 유지하기 위해 k-1 접기를 사용하여 배로 테스트하고이 값을 k 배로하여 테스트 집합으로 사용할 수 있습니다 일단. 그런 다음이 k 테스트에 대한 오류/정확도 측정 값을 집계합니다.이 값은 모든 데이터에 대해 훈련 된 모델에 대해 의 순위를 매기는 데 사용하는 측정 값입니다. 사용한 매개 변수 집합에 대한 교차 유효성 검사 오류를 호출하십시오. 그런 다음 다양한 매개 변수 범위에 대해이 프로세스를 반복하고 최상의 정확도/최저 CV 오류로 매개 변수 세트를 선택하십시오. 최종 모델은 데이터에 대한 교육을 받았습니다.

코드가 실제로 나에게 의미가 없습니다. 이 조각

folds = 4; 
for i=1:numel(C) 
    cv_acc(i) = svmtrain(ground_truth, matrice_feature_train', ... 
       sprintf(' -s %d -t %d -c %f -g %f -p %d -v %d',3,2, 
       2^C(i), 2^gamma(i), 1, 4)); %Kernel RBF 
end 

cv_acc에 포함 된 무엇을보고? 필자에게 실제 SVM 모델 (MATLAB 도구 상자를 사용하는 경우 SVMStruct, LIBSVM을 사용하는 경우 다른 것)이 포함되어 있습니다. 루프를 사용하여 어떤 폴드가 트레이닝 세트로 사용되는지를 변경한다면 이것은 괜찮습니다. 그러나이 매개 변수를 사용하여 gammaC 매개 변수의 값을 변경하는 것은 잘못되었습니다. 그러나 나중에 min(cv_acc);을 호출하므로 smvtrain에 대한 호출이 실제로 교육 오류를 반환했다고 생각하는 것 같습니까? 나는 당신이 의미있는 방법으로 그 구조의 배열에 min를 호출 할 수있는 방법을 볼 수 없지만, 내가 잘못 될 수 있습니다. 하지만 그렇다고하더라도 실제로 훈련 오류를 최소화하는 데 관심이 없다면 시험 시험 합계 인 교차 유효성 검사 오류를 최소화하고 k 실행 중 오류가 발생하여 훈련과 관련 없음 오류 .

는 지금 당신이 우리에게 gammaC의 벡터를 게재하지 않기 때문에이 잘못 BT 수행 한 경우 실제로 아는 것은 불가능하지만 (하지 않는 한 루프보다는 이러한 반복하는 중첩 루프를 가지고에이 이상하다 당신은 그것들을 진리표처럼 배열했습니다. 그러나 저는 그것을 의심합니다). 각 잠재 가치 C을 각각의 값 gamma과 쌍으로 테스트해야합니다. 현재 C의 각 값에 대해 gamma의 1 개의 다른 값만 시도하는 것 같습니다.

this answer에서 SVM과 함께 사용되는 교차 유효성 검증의 예를 확인하십시오.

+0

안녕하세요, 1) 내 게시물에서 SVMTRAIN의 호출이 구조 모델이 아닌 평균 제곱 오류를 반환하도록 지정했습니다 (옵션 -V를 사용하여 SVTMTRAIN을 호출한다는 사실을주의하십시오). 그래서, 나는 cv_acc 벡터가 각 쌍 (C, 감마)과 관련된 오류를 포함하기 때문에 min (cv_acc)의 사용이 정확하다고 생각합니다. 2) 폴드를 변경하기 위해 중첩 루프를 사용해야합니다. 나는 편집 할 것이다. 3) 나중에 최상의 매개 변수를 선택하기 위해 교차 유효성 검사의 오류를 최소화해야한다고 생각했습니다. – Anass

+0

@Anass 교육 오류가 여전히 잘못된 경우 매개 변수 집합이 최상의 교육 오류를 제공하는지 상관하지 않습니다. 교차 검증 오류가 걱정됩니다. 그래서 3 배로 훈련하고, SVM 모델을 반환하고, 그 모델을 사용하여 4 배로 예측하고, MSE를 계산하고, 4 회 수행하고, 오류를 집계하고, 해당 매개 변수 집합에 대한 교차 검증 * 오류를 집계합니다. 그런 다음 테스트 할 모든 매개 변수 조합에 대해이를 반복하고 각 매개 변수 조합에 대해 교차 유효성 검사 오류의 최소값 만 신경 씁니다. – Dan

+1

고맙습니다. 나는 이것을 시도하고 내 게시물을 편집하여 결과를 보여줍니다. – Anass