亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? svm_learn.cpp

?? 目前的svm(支持向量機)分類算法開源實現如svmlight和svmlib都沒有界面
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "svm.h"
#include "svm_learn.h"
#include "svm_hideo.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

/* interface to QP-solver */

double *optimize_qp(QP *, double *, long, double *, LEARN_PARM *);

/*---------------------------------------------------------------------------*/

/* Learns an SVM model based on the training data in docs/label. The resulting
model is returned in the structure model. */

void svm_learn(
               DOC *docs,                
               long *label,               
               long totdoc,               
               long totwords,             
               LEARN_PARM *learn_parm,    
               KERNEL_PARM *kernel_parm, 
               KERNEL_CACHE *kernel_cache,
               MODEL *model             
               )
{
    long *inconsistent,i;
    long inconsistentnum;
    long misclassified,upsupvecnum;
    double loss,model_length,example_length;
    double maxdiff,*lin,*a;
    long runtime_start,runtime_end;
    long iterations;
    long *unlabeled,transduction;
    long heldout;
    long loo_count=0,loo_count_pos=0,loo_count_neg=0,trainpos=0,trainneg=0;
    long loocomputed=0,runtime_start_loo=0,runtime_start_xa=0;
    double heldout_c=0,r_delta_sq=0,r_delta,r_delta_avg;
    
    double *xi_fullset; /* buffer for storing xi on full sample in loo */
    double *a_fullset;  /* buffer for storing alpha on full sample in loo */
    TIMING timing_profile;
    SHRINK_STATE shrink_state;
    
    runtime_start=get_runtime();

    timing_profile.time_kernel=0;
    timing_profile.time_opti=0;
    timing_profile.time_shrink=0;
    timing_profile.time_update=0;
    timing_profile.time_model=0;
    timing_profile.time_check=0;
    timing_profile.time_select=0;
    
	com_result.kernel_cache_statistic=0;
    
    learn_parm->totwords=totwords;
    
    /* make sure -n value is reasonable */
    if((learn_parm->svm_newvarsinqp < 2) || (learn_parm->svm_newvarsinqp > learn_parm->svm_maxqpsize))
    {
        learn_parm->svm_newvarsinqp=learn_parm->svm_maxqpsize;
    }
    
    init_shrink_state(&shrink_state,totdoc,(long)10000);
    
    inconsistent = (long *)my_malloc(sizeof(long)*totdoc);
    unlabeled = (long *)my_malloc(sizeof(long)*totdoc);
    a = (double *)my_malloc(sizeof(double)*totdoc);
    a_fullset = (double *)my_malloc(sizeof(double)*totdoc);
    xi_fullset = (double *)my_malloc(sizeof(double)*totdoc);
    lin = (double *)my_malloc(sizeof(double)*totdoc);
    learn_parm->svm_cost = (double *)my_malloc(sizeof(double)*totdoc);
    model->supvec = (DOC **)my_malloc(sizeof(DOC *)*(totdoc+2));
    model->alpha = (double *)my_malloc(sizeof(double)*(totdoc+2));
    model->index = (long *)my_malloc(sizeof(long)*(totdoc+2));

    
    model->at_upper_bound=0;
    model->b=0;        
    model->supvec[0]=0;  /* element 0 reserved and empty for now */
    model->alpha[0]=0;
    model->lin_weights=NULL;
    model->totwords=totwords;
    model->totdoc=totdoc;
    model->kernel_parm=(*kernel_parm);
    model->sv_num=1;
    model->loo_error=-1;
    model->loo_recall=-1;
    model->loo_precision=-1;
    model->xa_error=-1;
    model->xa_recall=-1;
    model->xa_precision=-1;
    inconsistentnum=0;
    transduction=0;
    
    r_delta=estimate_r_delta(docs,totdoc,kernel_parm);
    r_delta_sq=r_delta*r_delta;
    
    r_delta_avg=estimate_r_delta_average(docs,totdoc,kernel_parm);
    if(learn_parm->svm_c == 0.0)
    {  /* default value for C */
        learn_parm->svm_c=1.0/(r_delta_avg*r_delta_avg);
		if (com_pro.show_compute_1)
		{
        sprintf(temstr,"Setting default regularization parameter C=%.4f\n",learn_parm->svm_c);
        printm(temstr);
		}
    }
    
    for(i=0;i<totdoc;i++) 
    {    /* various inits */
        inconsistent[i]=0;
        a[i]=0;
        lin[i]=0;
        unlabeled[i]=0;
        if(label[i] == 0) 
        {
            unlabeled[i]=1;
            transduction=1;
        }
        if(label[i] > 0)
        {
            learn_parm->svm_cost[i]=learn_parm->svm_c*learn_parm->svm_costratio*
                fabs((double)label[i]);
            label[i]=1;
            trainpos++;
        }
        else if(label[i] < 0) 
        {
            learn_parm->svm_cost[i]=learn_parm->svm_c*fabs((double)label[i]);
            label[i]=-1;
            trainneg++;
        }
        else
        {
            learn_parm->svm_cost[i]=0;
        }
    }
    
    /* caching makes no sense for linear kernel */
    if(kernel_parm->kernel_type == LINEAR)
    {
        kernel_cache = NULL;   
    } 
    
    if(transduction) 
    {
        learn_parm->svm_iter_to_shrink=99999999;
        sprintf(temstr,"\nDeactivating Shrinking due to an incompatibility with the transductive \nlearner in the current version.\n\n");
        printm(temstr);
    }
    
    if(transduction && learn_parm->compute_loo) 
    {
        learn_parm->compute_loo=0;
        sprintf(temstr,"\nCannot compute leave-one-out estimates for transductive learner.\n\n");
        printm(temstr);
    }
    
    if(learn_parm->remove_inconsistent && learn_parm->compute_loo) 
    {
        learn_parm->compute_loo=0;
        sprintf(temstr,"\nCannot compute leave-one-out estimates when removing inconsistent examples.\n\n");
        printm(temstr);
    }    
    
    if((trainpos == 1) || (trainneg == 1)) 
    {
        learn_parm->compute_loo=0;
        sprintf(temstr,"\nCannot compute leave-one-out with only one example in one class.\n\n");
        printm(temstr);
    }    
    
    if (com_pro.show_action)
	{
		sprintf(temstr,"Optimizing..."); 
		printm(temstr);
	}
    
    /* train the svm */
    iterations=optimize_to_convergence(docs,label,totdoc,totwords,learn_parm,
        kernel_parm,kernel_cache,&shrink_state,model,inconsistent,unlabeled,a,lin,&timing_profile,  &maxdiff,(long)-1,(long)1);
    if (com_pro.show_action)
	{
		sprintf(temstr,"done. (%ld iterations) ",iterations);
		printm(temstr);
	}
    
    misclassified=0;
    for(i=0;(i<totdoc);i++)
    { /* get final statistic */
        if((lin[i]-model->b)*(double)label[i] <= 0.0) 
            misclassified++;
    }
	if (com_pro.show_action)
	{
		printm("optimization finished");
	}
	if (com_pro.show_trainresult)
	{
		sprintf(temstr," (%ld misclassified, maxdiff=%.5f).\n", misclassified,maxdiff); 
		printm(temstr);
	}
	com_result.train_misclassify=misclassified;
	com_result.max_difference=maxdiff;
             
    runtime_end=get_runtime();
             
    if (learn_parm->remove_inconsistent)
    {     
        inconsistentnum=0;
        for(i=0;i<totdoc;i++) 
            if(inconsistent[i]) 
               inconsistentnum++;
        sprintf(temstr,"Number of SV: %ld (plus %ld inconsistent examples)\n", model->sv_num-1,inconsistentnum);
        printm(temstr);
    }
    
    else
    {
     upsupvecnum=0;
     for(i=1;i<model->sv_num;i++) 
     {
         if(fabs(model->alpha[i]) >= (learn_parm->svm_cost[(model->supvec[i])->docnum]-learn_parm->epsilon_a)) 
             upsupvecnum++;
     }
	 if (com_pro.show_trainresult)
	 {
	 sprintf(temstr,"Number of SV: %ld (including %ld at upper bound)\n", model->sv_num-1,upsupvecnum);
     printm(temstr);
	 }
    }
	
	if( (!learn_parm->skip_final_opt_check)) 
	{
		loss=0;
		model_length=0; 
		for(i=0;i<totdoc;i++)
		{
			if((lin[i]-model->b)*(double)label[i] < 1.0-learn_parm->epsilon_crit)
				loss+=1.0-(lin[i]-model->b)*(double)label[i];
			model_length+=a[i]*label[i]*lin[i];
		}
		model_length=sqrt(model_length);
		sprintf(temstr,"L1 loss: loss=%.5f\n",loss);   printm(temstr);
		sprintf(temstr,"Norm of weight vector: |w|=%.5f\n",model_length);printm(temstr);
		example_length=estimate_sphere(model,kernel_parm); 
		sprintf(temstr,"Norm of longest example vector: |x|=%.5f\n",  length_of_longest_document_vector(docs,totdoc,kernel_parm));
		printm(temstr);
		sprintf(temstr,"Estimated VCdim of classifier: VCdim<=%.5f\n",       estimate_margin_vcdim(model,model_length,example_length,    kernel_parm));
		printm(temstr);
		if((!learn_parm->remove_inconsistent) && (!transduction)) 
		{
			runtime_start_xa=get_runtime();
                     sprintf(temstr,"Computing XiAlpha-estimates..."); 
                     printm(temstr);
                     compute_xa_estimates(model,label,unlabeled,totdoc,docs,lin,a,
                         kernel_parm,learn_parm,&(model->xa_error),
                         &(model->xa_recall),&(model->xa_precision));
                     
                     
                     sprintf(temstr,"Runtime for XiAlpha-estimates in cpu-seconds: %.2f\n",
                         (get_runtime()-runtime_start_xa)/100.0);
                     printm(temstr);
                     
                     fprintf(stdout,"XiAlpha-estimate of the error: error<=%.2f%% (rho=%.2f,depth=%ld)\n",
                         model->xa_error,learn_parm->rho,learn_parm->xa_depth);
                     fprintf(stdout,"XiAlpha-estimate of the recall: recall=>%.2f%% (rho=%.2f,depth=%ld)\n",
                         model->xa_recall,learn_parm->rho,learn_parm->xa_depth);
                     fprintf(stdout,"XiAlpha-estimate of the precision: precision=>%.2f%% (rho=%.2f,depth=%ld)\n",
                         model->xa_precision,learn_parm->rho,learn_parm->xa_depth);
                 }
                 else if(!learn_parm->remove_inconsistent)
                 {
                     estimate_transduction_quality(model,label,unlabeled,totdoc,docs,lin);
                 }
             }
	if (com_pro.show_trainresult)
	{
		sprintf(temstr,"Number of kernel evaluations: %ld\n",com_result.kernel_cache_statistic);
        printm(temstr);
	}
             /* leave-one-out testing starts now */
             if(learn_parm->compute_loo)
             {
                 /* save results of training on full dataset for leave-one-out */
                 runtime_start_loo=get_runtime();
                 for(i=0;i<totdoc;i++) 
                 {
                     xi_fullset[i]=1.0-((lin[i]-model->b)*(double)label[i]);
                     a_fullset[i]=a[i];
                 }
                 sprintf(temstr,"Computing leave-one-out");
                 printm(temstr);
                 
                 /* repeat this loop for every held-out example */
                 for(heldout=0;(heldout<totdoc);heldout++)
                 {
                     if(learn_parm->rho*a_fullset[heldout]*r_delta_sq+xi_fullset[heldout]
                         < 1.0) 
                     { 
                         /* guaranteed to not produce a leave-one-out error */
                         sprintf(temstr,"+"); 
                         printm(temstr);
                     }
                     else if(xi_fullset[heldout] > 1.0) 
                     {
                         /* guaranteed to produce a leave-one-out error */
                         loo_count++;
                         if(label[heldout] > 0) loo_count_pos++; else loo_count_neg++;
                         sprintf(temstr,"-");  printm(temstr);
                     }
                     else
                     {
                         loocomputed++;
                         heldout_c=learn_parm->svm_cost[heldout]; /* set upper bound to zero */
                         learn_parm->svm_cost[heldout]=0;
                         /* make sure heldout example is not currently  */
                         /* shrunk away. Assumes that lin is up to date! */
                         shrink_state.active[heldout]=1;  
                         
                         
                         optimize_to_convergence(docs,label,totdoc,totwords,learn_parm,
                             kernel_parm,
                             kernel_cache,&shrink_state,model,inconsistent,unlabeled,
                             a,lin,&timing_profile,
                             &maxdiff,heldout,(long)2);
                         
                         /* printf("%f\n",(lin[heldout]-model->b)*(double)label[heldout]); */
                         
                         if(((lin[heldout]-model->b)*(double)label[heldout]) < 0.0)
                         { 
                             loo_count++;                           /* there was a loo-error */
                             if(label[heldout] > 0) loo_count_pos++; else loo_count_neg++;
                         }
                         else
                         {
                             
                         }
                         /* now we need to restore the original data set*/
                         learn_parm->svm_cost[heldout]=heldout_c; /* restore upper bound */
                     }
                 } /* end of leave-one-out loop */
                 
                 
                 sprintf(temstr,"\nRetrain on full problem");  printm(temstr);
                 optimize_to_convergence(docs,label,totdoc,totwords,learn_parm,
                     kernel_parm,
                     kernel_cache,&shrink_state,model,inconsistent,unlabeled,
                     a,lin,&timing_profile,
                     &maxdiff,(long)-1,(long)1);
                 
                 
                 /* after all leave-one-out computed */
                 model->loo_error=100.0*loo_count/(double)totdoc;
                 model->loo_recall=(1.0-(double)loo_count_pos/(double)trainpos)*100.0;
                 model->loo_precision=(trainpos-loo_count_pos)/
                     (double)(trainpos-loo_count_pos+loo_count_neg)*100.0;
                 fprintf(stdout,"Leave-one-out estimate of the error: error=%.2f%%\n",
                     model->loo_error);
                 fprintf(stdout,"Leave-one-out estimate of the recall: recall=%.2f%%\n",
                     model->loo_recall);
                 fprintf(stdout,"Leave-one-out estimate of the precision: precision=%.2f%%\n",
                     model->loo_precision);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国在线一区二区| 亚洲综合偷拍欧美一区色| 精品综合免费视频观看| 欧美一级在线免费| 韩国三级在线一区| 国产调教视频一区| 91在线免费看| 亚洲午夜精品久久久久久久久| 欧美日韩一本到| 日韩成人精品在线观看| 精品日韩一区二区| 99免费精品在线| 亚洲线精品一区二区三区| 日韩一区二区三区四区| 国产成人8x视频一区二区| 亚洲欧美日韩电影| 欧美一区二区三区四区在线观看 | 在线播放中文字幕一区| 久久91精品久久久久久秒播| 国产免费久久精品| 在线观看日韩国产| 激情久久久久久久久久久久久久久久| 国产欧美一区二区三区鸳鸯浴| 一本大道久久a久久精二百| 三级在线观看一区二区| 久久精品亚洲乱码伦伦中文| 97精品电影院| 蜜臀91精品一区二区三区| 欧美激情一区二区三区在线| 欧美日韩三级视频| 国产精品亚洲视频| 亚洲国产成人高清精品| 五月婷婷激情综合| 中文字幕日韩av资源站| 91麻豆精品国产91久久久资源速度| 激情文学综合网| 亚洲综合偷拍欧美一区色| 久久久午夜电影| 欧美最新大片在线看| 国产综合久久久久久久久久久久| 亚洲一本大道在线| 中文字幕一区二区不卡| 日韩免费高清av| 欧洲一区二区三区在线| 粉嫩嫩av羞羞动漫久久久 | 久久国产欧美日韩精品| 怡红院av一区二区三区| 久久亚区不卡日本| 欧美一区二区视频在线观看2020| 91首页免费视频| 国产sm精品调教视频网站| 日日摸夜夜添夜夜添国产精品| 亚洲欧美自拍偷拍| 国产蜜臀97一区二区三区| 欧美mv日韩mv国产| 4438x成人网最大色成网站| 日本韩国欧美在线| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 精品日韩在线观看| 一本一道久久a久久精品| 国产黑丝在线一区二区三区| 美女网站一区二区| 亚洲成人av一区二区三区| 国产精品伦理在线| 久久精品视频网| 亚洲黄色小说网站| 91精品欧美一区二区三区综合在| 一本到不卡免费一区二区| av网站一区二区三区| 国产成人精品免费看| 精品一区二区综合| 老司机精品视频导航| 日韩电影在线一区| 日韩电影免费在线看| 日韩经典中文字幕一区| 亚洲一二三四在线观看| 亚洲国产精品久久人人爱| 亚洲高清免费在线| 丝袜美腿成人在线| 美女免费视频一区| 久草这里只有精品视频| 久久69国产一区二区蜜臀| 国产美女一区二区| 国产成a人无v码亚洲福利| 成人av电影在线| 久久久综合网站| 国产亚洲成av人在线观看导航| 日本一二三四高清不卡| 亚洲男人天堂av网| 亚洲综合激情网| 日本一道高清亚洲日美韩| 麻豆一区二区三区| 丁香桃色午夜亚洲一区二区三区| 成人午夜在线视频| 在线一区二区三区四区| 91精品国产色综合久久| 欧美精品一区二区久久久| 中文字幕乱码亚洲精品一区| 亚洲精品国产无天堂网2021| 午夜欧美电影在线观看| 国产真实乱对白精彩久久| 成人av电影在线观看| 欧美日韩亚洲综合一区| 精品免费视频一区二区| 国产精品网站导航| 亚洲一区二区影院| 国产一区中文字幕| 91婷婷韩国欧美一区二区| 在线91免费看| 国产肉丝袜一区二区| 国产精品国产三级国产普通话蜜臀| 国产精品天美传媒| 亚洲男同性视频| 亚洲va欧美va天堂v国产综合| 蜜乳av一区二区三区| 国产精品亚洲第一| 色婷婷久久久久swag精品| 91麻豆精品国产| 久久久久99精品国产片| ㊣最新国产の精品bt伙计久久| 亚洲黄色在线视频| 久久精品国产免费| av不卡免费电影| 欧美日韩成人综合在线一区二区| 欧美精品一区男女天堂| 亚洲激情男女视频| 日本大胆欧美人术艺术动态| 欧美一区二区在线看| 中文字幕av一区二区三区高| 天天做天天摸天天爽国产一区| 大桥未久av一区二区三区中文| 欧美日韩一区二区欧美激情| 欧美激情一区不卡| 蜜臀久久久久久久| 欧美伊人精品成人久久综合97| 国产日韩欧美一区二区三区乱码| 亚洲成a人片在线不卡一二三区| 粉嫩av一区二区三区| 欧美电影免费观看高清完整版在| 一区二区三区四区在线播放| 成人免费黄色在线| 日韩精品中文字幕在线不卡尤物 | 国产激情偷乱视频一区二区三区 | 色婷婷综合久久久久中文一区二区| 精品理论电影在线观看| 亚洲综合一二三区| av网站免费线看精品| 欧美国产一区视频在线观看| 9191久久久久久久久久久| 一区二区日韩av| 99久久er热在这里只有精品15 | 欧美体内she精高潮| 国产精品久久久久国产精品日日| 韩国女主播一区| 日韩久久久精品| 秋霞影院一区二区| 91精品国产91综合久久蜜臀| 亚洲图片一区二区| 欧美日韩三级在线| 首页亚洲欧美制服丝腿| 欧美少妇性性性| 亚洲二区在线观看| 欧美日韩大陆在线| 日韩电影在线免费看| 欧美一区二区不卡视频| 免费人成黄页网站在线一区二区 | 国产电影一区在线| 国产亚洲综合av| 国产成人超碰人人澡人人澡| 日本一区二区三区国色天香 | 欧美国产精品中文字幕| 国产·精品毛片| 国产精品欧美一级免费| 91丨porny丨国产| 一级精品视频在线观看宜春院| 在线免费观看视频一区| 午夜电影一区二区| 欧美videofree性高清杂交| 激情综合色播五月| 久久麻豆一区二区| av在线一区二区三区| 一区二区三区在线视频免费| av成人免费在线观看| 一区二区免费在线| 欧美裸体一区二区三区| 美腿丝袜亚洲综合| 国产亚洲欧美在线| 91影院在线免费观看| 亚洲不卡一区二区三区| 日韩欧美一级精品久久| 欧美喷水一区二区| 韩国成人精品a∨在线观看| 国产精品无遮挡| 91麻豆国产香蕉久久精品| 亚洲精品视频在线观看网站| 国内精品免费**视频| 国产喷白浆一区二区三区| 成人动漫在线一区| 一区二区在线观看视频| 欧美精品自拍偷拍动漫精品|