2013-05-17 59 views
-2

我已經縮放了我的訓練數據,並試圖進行交叉驗證以獲得最佳參數,但我不知道該怎麼做。我想讀我的縮放訓練數據,並將它們分配給svm_problem變量:閱讀libsvm的訓練數據後崩潰

svm_node My_svm_node[16400][157]; 
svm_node temp[157]; 
FILE *fp =NULL; 
fp = fopen("Scaled_Train_Data.txt","r"); //my data is in fp 
for(int LineNumber = 0 ; stop !=1 ; LineNumber++) 
{ 
    //std::cout<<"Line Number "<<LineNumber<<" Is processed .. \n"; 
    if (readline(fp)==NULL) 
    { 
     stop = 1; 
     break; 
    } 
    char *p=line; 
    int next_index=1; 
    int index = 0 ; 
    double target; 
    double value; 

    sscanf(p,"%lf",&target); 
    while(isspace(*p)) ++p;  //remove any spaces betweeen numbers ... 
    while(!isspace(*p)) ++p; 

    while(sscanf(p,"%d:%lf",&index,&value)==2) 
    { 
     for(i=next_index;i<index;i++) 
     { 
      temp[i-1].index = i; 
      temp[i-1].value = 0; 
     } 
     temp[index-1].index = index; 
     temp[index-1].value = value; 
     while(*p!=':') ++p;       //check to see if we obey the rule of libsvm 
     ++p;           
     while(isspace(*p)) ++p;      //remove any spaces between numbers 
     while(*p && !isspace(*p)) ++p;    
     next_index=index+1; 
    } 
    temp[index].index = -1; 
    temp[index].value = 0; 
    x[LineNumber] = temp; 
} 

我可以給你,我能夠成功地讀取數據的保證和temp變量始終抱着一個特徵向量我的scaled_train數據。

但是,當我打電話

svm_cross_validation(&Test_Data,&param,7,target); 

我得到一個運行時訪問衝突錯誤。

我充滿

  • Test_data.l =特徵向量
  • Test_data.y =功能標籤的數量
  • Test_Data.x =功能值

我不知道什麼是錯在這裏。

這裏也有些奇怪的東西。當我嘗試讀取我的svm_node, 的值和索引時,我總是得到我的scaled_data的最後一行,我無法看到整個數據。 (我想這個問題就出在這裏。)

for (int j = 0 ; j < 164000 ; j++) //number of rows 
{ 
     for (int i = 0 ; i < 157 ; i++) //maximum number of features 
      { 
        printf("The x[%d][%d] is %d %lf",j,i,x[j][i].index,x[j][i].value); //I always get the last row for 16400 times !!!!! 
        getchar(); 
      } 
} 
+0

這是一個編程問題,即使你的程序最終有一個計算機科學應用程序。所以我正在把這個問題轉移到[so]上。 – Gilles

+0

我認爲這個問題需要很多工作。什麼是您傳遞svm_cross_validation的Test_Data?你如何閱讀它?您可能需要退後一步併發布SSCCE(短自我包含完整示例,http://sscce.org/) – carlosdc

回答

1

如果你的訓練數據是LIBSVM格式(又名svmlight格式),最簡單的解決辦法是看看常規LIBSVM使用閱讀模式:

void read_problem(const char *filename); 

如在LIBSVM包中的svm-train.c中定義的。

+0

謝謝,我已經完成了,只有一個問題可以告訴我如何實現網格。 py語法搜索c中最好的c,g?我想在vs2010中實現從培訓到測試的所有項目,除了找到最好的c,g之外,我只做了一些練習,我只知道應該使用交叉驗證,但我不知道如何設置它的參數(k倍等等......) – PsP

+0

@PANAHI你可能應該問兩個新問題 – Bull

相關問題