-2

トレーニング データをスケーリングし、相互検証を実行して最適なパラメーターを取得しようとしましたが、その方法がわかりません。svm_problemスケーリングされたトレーニング データを読み取り、それらを変数に割り当てようとしました。

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データの 1 つの特徴ベクトルを保持していることを保証できます。

でも電話したら

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

ランタイム アクセス違反エラーが発生します。

私は満たされました

  • Test_data.l= 特徴ベクトルの数
  • Test_data.y= 機能ラベル
  • Test_Data.x= 機能値

ここで何が問題なのかわかりません。

ここにも変なものがあります。my の値とインデックスを読み取ろうとすると、svm_node常に my の最後の行が取得され、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();
            }
}
4

1 に答える 1

1

トレーニング データが LIBSVM 形式 (別名 svmlight 形式) の場合、最も簡単な解決策は、LIBSVM がモデルを読み取るために使用するルーチンを確認することです。

void read_problem(const char *filename);

svm-train.cLIBSVM パッケージで定義されているとおりです。

于 2013-05-17T19:05:17.793 に答える