我已經縮放了我的訓練數據,並試圖進行交叉驗證以獲得最佳參數,但我不知道該怎麼做。我想讀我的縮放訓練數據,並將它們分配給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,¶m,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();
}
}
這是一個編程問題,即使你的程序最終有一個計算機科學應用程序。所以我正在把這個問題轉移到[so]上。 – Gilles
我認爲這個問題需要很多工作。什麼是您傳遞svm_cross_validation的Test_Data?你如何閱讀它?您可能需要退後一步併發布SSCCE(短自我包含完整示例,http://sscce.org/) – carlosdc