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

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

?? kernel.cpp

?? 支持向量機(SVM)的VC源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
#include "kernel.h"


/**
 *
 * kernel_container_c
 *
 **/

kernel_container_c::~kernel_container_c(){
  kernel = 0;
};


kernel_c* kernel_container_c::get_kernel(){
  if(kernel == 0){
    kernel = new kernel_dot_c();
    is_linear=1;    
  };
  return kernel;
};


void kernel_container_c::clear(){
  // do not delete kernel, for reading of aggregation kernels
  kernel = 0;
};


istream& operator >> (istream& data_stream, kernel_container_c& the_kernel){
  char* s = new char[MAXCHAR];

  if(data_stream.eof() || ('@' == data_stream.peek())){
    // no kernel definition, take dot as default
    if(0 != the_kernel.kernel){
      delete the_kernel.kernel;
    };
    the_kernel.kernel = new kernel_dot_c();
    //    throw read_exception("No kernel definition found");
  }
  else{
    while((! data_stream.eof()) &&
	  (('#' == data_stream.peek()) ||
	   ('\n' == data_stream.peek()))){
	// ignore comment & newline
	data_stream.getline(s,MAXCHAR);
    };
    data_stream >> s;
    if(0 == strcmp("type",s)) {
      the_kernel.is_linear=0;
      data_stream >> s;
      if(0==strcmp("dot",s)){
	if(0 != the_kernel.kernel){
	  delete the_kernel.kernel;
	};
	the_kernel.kernel = new kernel_dot_c();
	the_kernel.is_linear=1;
	data_stream >> *(the_kernel.kernel);
      }
      else if(0==strcmp("lin_dot",s)){
	if(0 != the_kernel.kernel){
	  delete the_kernel.kernel;
	};
	the_kernel.kernel = new kernel_lin_dot_c();
	data_stream >> *(the_kernel.kernel);
      }
      else if(0 == strcmp("polynomial",s)){
	if(0 != the_kernel.kernel){
	  delete the_kernel.kernel;
	};
	the_kernel.kernel = new kernel_polynomial_c();
	data_stream >> *(the_kernel.kernel);
      }
      else if(0 == strcmp("radial",s)){
	if(0 != the_kernel.kernel){
	  delete the_kernel.kernel;
	};
	the_kernel.kernel = new kernel_radial_c();
	data_stream >> *(the_kernel.kernel);
      }
      else if(0 == strcmp("neural",s)){
	if(0 != the_kernel.kernel){
	  delete the_kernel.kernel;
	};
	the_kernel.kernel = new kernel_neural_c();
	data_stream >> *(the_kernel.kernel);
      }
      else if(0 == strcmp("anova",s)){
	if(0 != the_kernel.kernel){
	  delete the_kernel.kernel;
	};
	the_kernel.kernel = new kernel_anova_c();
	data_stream >> *(the_kernel.kernel);
      }
      else if((0==strcmp("aggregation",s))||(0==strcmp("sum_aggregation",s))){
	if(0 != the_kernel.kernel){
	  delete the_kernel.kernel;
	};
	the_kernel.kernel = new kernel_aggregation_c();
	data_stream >> *(the_kernel.kernel);
      }
      else if(0 == strcmp("prod_aggregation",s)){
	if(0 != the_kernel.kernel){
	  delete the_kernel.kernel;
	};
	the_kernel.kernel = new kernel_prod_aggregation_c();
	data_stream >> *(the_kernel.kernel);
      }
      else if(0 == strcmp("zero",s)){
	if(0 != the_kernel.kernel){
	  delete the_kernel.kernel;
	};
	the_kernel.kernel = new kernel_zero_c();
	data_stream >> *(the_kernel.kernel);
      }
      else if(0 == strcmp("user",s)){
	if(0 != the_kernel.kernel){
	  delete the_kernel.kernel;
	};
	the_kernel.kernel = new kernel_user_c();
	data_stream >> *(the_kernel.kernel);
      }
      else if(0 == strcmp("user2",s)){
	if(0 != the_kernel.kernel){
	  delete the_kernel.kernel;
	};
	the_kernel.kernel = new kernel_user2_c();
	data_stream >> *(the_kernel.kernel);

      }
      // insert code for other kernels here
      else{
	char* t = new char[MAXCHAR];
	strcpy(t,"Unknown kernel type: ");
	strcat(t,s);
	throw read_exception(t);
      };
    }
    else{
      cout<<"read: "<<s<<endl;
      throw read_exception("kernel type has to be defined first");
    };
  };
  delete []s;
  return data_stream;
};


ostream& operator << (ostream& data_stream, kernel_container_c& the_kernel){
  if(0 != the_kernel.kernel){
    data_stream << *(the_kernel.kernel);
  }
  else{
    data_stream << "Empty kernel"<<endl;
  };
  return data_stream;
};


/**
 *
 * kernel_c
 *
 **/
kernel_c::kernel_c(){
  dim =0;
  cache_size=0;
  examples_size = 0;
  rows = 0;
  last_used = 0;
  index = 0;
  counter=0;
};

kernel_c::~kernel_c(){
  //  cout<<"destructor"<<endl;
  clean_cache();
};

SVMFLOAT kernel_c::calculate_K(const SVMINT i, const SVMINT j){
  //  cout<<"K("<<i<<","<<j<<")"<<endl;
  svm_example x = the_examples->get_example(i);
  svm_example y = the_examples->get_example(j);
  return(calculate_K(x,y));
};

inline
SVMFLOAT kernel_c::calculate_K(const svm_example x, const svm_example y){
  // default is inner product
  return innerproduct(x,y); 
};

inline
SVMFLOAT kernel_c::innerproduct(const svm_example x, const svm_example y){
  // returns x*y
  SVMFLOAT result=0;

  svm_attrib* att_x = x.example;
  svm_attrib* att_y = y.example;
  svm_attrib* length_x = &(att_x[x.length]);
  svm_attrib* length_y = &(att_y[y.length]);

  while((att_x < length_x) && (att_y < length_y)){
    if(att_x->index == att_y->index){
      result += (att_x->att)*(att_y->att);
      att_x++;
      att_y++;
    }
    else if(att_x->index < att_y->index){
      att_x++;
    }
    else{
      att_y++;
    };
  };

  return result;
};


int kernel_c::cached(const SVMINT i){
  return(index[lookup(i)] == i);
};


SVMFLOAT kernel_c::norm2(const svm_example x, const svm_example y){
  // returns ||x-y||^2
  SVMFLOAT result=0;
  SVMINT length_x = x.length;
  SVMINT length_y = y.length;
  svm_attrib* att_x = x.example;
  svm_attrib* att_y = y.example;
  SVMINT pos_x=0;
  SVMINT pos_y=0;
  SVMFLOAT dummy;
  while((pos_x < length_x) && (pos_y < length_y)){
    if(att_x[pos_x].index == att_y[pos_y].index){
      dummy = att_x[pos_x++].att-att_y[pos_y++].att;
      result += dummy*dummy;
    }
    else if(att_x[pos_x].index < att_y[pos_y].index){
      dummy = att_x[pos_x++].att;
      result += dummy*dummy;
    }
    else{
      dummy = att_y[pos_y++].att;
      result += dummy*dummy;
    };
  };
  while(pos_x < length_x){
    dummy = att_x[pos_x++].att;
    result += dummy*dummy;
  };
  while(pos_y < length_y){
    dummy = att_y[pos_y++].att;
    result += dummy*dummy;
  };
  return result;
};


int kernel_c::check(){
  // check cache integrity, for debugging
  int result = 1;

  cout<<"Checking cache"<<endl;
  SVMINT i;
  // rows != 0
  for(i=0;i<cache_size;i++){
    if(rows[i] == 0){
      cout<<"ERROR: row["<<i<<"] = 0"<<endl;
      result = 0;
    };
  };
  cout<<"rows[i] checked"<<endl;

  // 0 <= index <= examples_size
  if(index != 0){
    SVMINT last_i=index[0];
    for(i=0;i<=cache_size;i++){
      if(index[i]<0){
	cout<<"ERROR: index["<<i<<"] = "<<index[i]<<endl;
	result = 0;
      };
      if(index[i]>examples_size){
	cout<<"ERROR: index["<<i<<"] = "<<index[i]<<endl;
	result = 0;
      };
      if(index[i]<last_i){
	cout<<"ERROR: index["<<i<<"] descending"<<endl;
	result = 0;
      };
      last_i = index[i];
    };
  };
  cout<<"index[i] checked"<<endl;

  // 0 <= last_used <= counter
  for(i=0;i<cache_size;i++){
    if(last_used[i]<0){
      cout<<"ERROR: last_used["<<i<<"] = "<<last_used[i]<<endl;
      result = 0;
    };
    if(last_used[i]>counter){
      cout<<"ERROR: last_used["<<i<<"] = "<<last_used[i]<<endl;
      result = 0;
    };
  };
  cout<<"last_used[i] checked"<<endl;

  cout<<"complete cache test"<<endl;
  SVMFLOAT* adummy;
  for(SVMINT i2=0;i2<cache_size;i2++){
    cout<<i2<<" "; cout.flush();
    adummy = new SVMFLOAT[examples_size];
    for(SVMINT ai=0;ai<examples_size;ai++) adummy[ai] = (rows[i2])[ai];
    delete [](rows[i2]);
    rows[i] = adummy;
  }
  cout<<"cache test succeeded"<<endl;



  return result;
};


void kernel_c::init(SVMINT cache_MB, example_set_c* new_examples){
//   cout<<"init"<<endl;
//   cout<<"cache_size = "<<cache_size<<endl;
//   cout<<"examples_size = "<<examples_size<<endl;
//   cout<<"rows = "<<rows<<endl;
//   if(rows != 0)cout<<"rows[0] = "<<rows[0]<<endl;
  clean_cache();
  the_examples = new_examples; 
  dim = the_examples->get_dim();
  cache_mem = cache_MB*1048576;
  // check if reserved memory big enough
  if(cache_mem<(SVMINT)(sizeof(SVMFLOAT)*the_examples->size()+sizeof(SVMFLOAT*)+2*sizeof(SVMINT))){
    // not enough space for one example, increaee
    cache_mem = sizeof(SVMFLOAT)*the_examples->size()+sizeof(SVMFLOAT*)+2*sizeof(SVMINT);
  };
  set_examples_size(the_examples->size());
};


void kernel_c::clean_cache(){
  counter=0;
  if(rows != 0){
    for(SVMINT i=0;i<cache_size;i++){
      if(0 != rows[i]){
	delete [](rows[i]);
	rows[i]=0;
      };
    };
    delete []rows;
  };
  if(last_used != 0) delete []last_used;
  if(index != 0) delete []index;
  rows=0;
  last_used=0;
  index=0;
  cache_size=0;
  examples_size=0;
};


inline
SVMINT kernel_c::lookup(const SVMINT i){
  // find row i in cache
  // returns pos of element i if i in cache,
  // returns pos of smallest element large than i otherwise
  SVMINT low;
  SVMINT high;
  SVMINT med;

  low=0;
  high=cache_size;
  // binary search
  while(low<high){
    med = (low+high)/2;
    if(index[med]>=i){
      high=med;
    }
    else{
      low=med+1;
    };
  };
  return high;
};


void kernel_c::overwrite(const SVMINT i, const SVMINT j){
  // overwirte entry i with entry j
  // WARNING: only to be used for shrinking!

  //  cout<<"overwrite("<<i<<","<<j<<")"<<endl;
  // i in cache?
  SVMINT pos_i=lookup(i);
  SVMINT pos_j=lookup(j);

  if((index[pos_i] == i) && (index[pos_j] == j)){
    // swap pos_i and pos_j
    SVMFLOAT* dummy = rows[pos_i];
    rows[pos_i] = rows[pos_j];
    rows[pos_j] = dummy;
    last_used[pos_i] = last_used[pos_j];

  }
  else{
    // mark rows as invalid
    if(index[pos_i] == i){
      last_used[pos_i] = 0;
    }
    else if(index[pos_j] == j){
      last_used[pos_j] = 0;
    };
  };

  // swap i and j in all rows
  SVMFLOAT* my_row;
  for(pos_i=0;pos_i<cache_size;pos_i++){
    my_row = rows[pos_i];
    if(my_row != 0){
      my_row[i] = my_row[j];
    };
  };
};


void kernel_c::set_examples_size(const SVMINT new_examples_size){
  // cache row with new_examples_size entries only
  
  // cout<<"shrinking from "<<examples_size<<" to "<<new_examples_size<<endl;
  if(new_examples_size>examples_size){
    clean_cache();
    examples_size = new_examples_size;
    cache_size = cache_mem/(sizeof(SVMFLOAT)*examples_size+sizeof(SVMFLOAT*)+2*sizeof(SVMINT));
    if(cache_size>examples_size){
      cache_size = examples_size;
    };
    // init 
    rows = new SVMFLOAT*[cache_size];
    last_used = new SVMINT[cache_size];
    index = new SVMINT[cache_size+1];
    for(SVMINT i=0;i<cache_size;i++){
      rows[i] = 0; // new SVMFLOAT[new_examples_size];
      last_used[i] = 0;
      index[i] = new_examples_size;
    };
    index[cache_size] = new_examples_size;
  }
  else if(new_examples_size<examples_size){
    // copy as much rows into new cache as possible
    SVMINT old_cache_size=cache_size;
    cache_size = cache_mem/(sizeof(SVMFLOAT)*new_examples_size+sizeof(SVMFLOAT*)+2*sizeof(SVMINT));
    if(cache_size > new_examples_size){
      cache_size = new_examples_size;
    };
    if(cache_size>=old_cache_size){
      // skip it, enough space available
      cache_size=old_cache_size;
      return;
    };

    SVMFLOAT** new_rows = new SVMFLOAT*[cache_size];
    SVMINT* new_last_used = new SVMINT[cache_size];
    SVMINT* new_index = new SVMINT[cache_size+1];
    SVMINT old_pos=0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩在线| 亚洲一二三区在线观看| 欧美羞羞免费网站| 激情五月激情综合网| 亚洲天堂精品视频| 2023国产精品自拍| 在线不卡的av| 色婷婷精品久久二区二区蜜臀av| 国产一区激情在线| 日韩精品一二三| 亚洲最快最全在线视频| 国产欧美1区2区3区| 日韩一区二区免费在线观看| 色婷婷综合久久久久中文一区二区| 国产精品综合一区二区三区| 午夜久久电影网| 亚洲综合色自拍一区| 国产精品久久久久久妇女6080| 日韩精品一区在线| 欧美电影在哪看比较好| 91极品美女在线| 成人美女视频在线观看18| 国产一区免费电影| 精品写真视频在线观看| 日本中文在线一区| 爽好久久久欧美精品| 一区二区三区不卡视频在线观看| 亚洲欧洲日韩综合一区二区| 久久久亚洲精华液精华液精华液| 日韩一区二区免费电影| 欧美欧美欧美欧美首页| 欧美在线一二三| 色婷婷精品大视频在线蜜桃视频| 不卡一区二区三区四区| 懂色av一区二区三区免费看| 国产自产视频一区二区三区| 日本一不卡视频| 日本 国产 欧美色综合| 伦理电影国产精品| 老司机精品视频在线| 久久精品国产一区二区| 秋霞av亚洲一区二区三| 蜜臀av性久久久久av蜜臀妖精| 免费黄网站欧美| 久久国产成人午夜av影院| 美女尤物国产一区| 极品少妇xxxx精品少妇偷拍| 久久99精品久久久久久动态图 | 国产亚洲精品福利| 国产三级一区二区三区| 国产日韩欧美精品一区| 中文字幕一区二区在线观看| 亚洲欧洲日产国产综合网| 亚洲三级在线播放| 亚洲成人av中文| 久久狠狠亚洲综合| 高清不卡一区二区在线| 91啪亚洲精品| 欧美日韩高清影院| 久久综合久久久久88| 亚洲欧洲无码一区二区三区| 亚洲一区av在线| 蓝色福利精品导航| 成人18视频在线播放| 欧美三级视频在线观看| 日韩亚洲欧美一区二区三区| 国产午夜精品在线观看| 亚洲精品久久久蜜桃| 午夜私人影院久久久久| 久久精品国产一区二区三区免费看| 蜜臀av一区二区| 97se亚洲国产综合在线| 欧美日韩国产大片| 欧美精品一区二| ...中文天堂在线一区| 亚洲va国产天堂va久久en| 久久er99精品| 色综合久久久久综合体| 91精品国产手机| 欧美国产禁国产网站cc| 亚洲国产精品嫩草影院| 激情图区综合网| 91成人在线免费观看| 日韩欧美亚洲国产精品字幕久久久| 国产欧美一区二区三区在线看蜜臀 | 亚洲色图在线看| 丝袜亚洲另类丝袜在线| 国产精品99久久久久久久女警 | 国产精品伦理在线| 亚洲v精品v日韩v欧美v专区| 国产一区免费电影| 欧美亚洲国产bt| 国产亚洲精品bt天堂精选| 五月激情六月综合| 成人一区二区三区视频在线观看| 欧美日韩精品是欧美日韩精品| 久久女同精品一区二区| 午夜影院在线观看欧美| 99综合影院在线| 欧美精品一区二区三区四区| 亚洲国产综合色| 北条麻妃一区二区三区| 欧美成人乱码一区二区三区| 亚洲精品成人少妇| 不卡的电视剧免费网站有什么| 日韩一级高清毛片| 性久久久久久久久| 一本色道久久综合亚洲aⅴ蜜桃| 久久久久久99精品| 蜜臀91精品一区二区三区| 欧美丝袜丝交足nylons图片| 亚洲欧美一区二区三区国产精品 | 精品视频在线免费看| 国产精品久久夜| 国产一级精品在线| 欧美一区二区三区免费在线看| 亚洲美女区一区| av在线播放一区二区三区| 国产色一区二区| 精品一区二区精品| 日韩欧美激情四射| 日本91福利区| 日韩三级精品电影久久久| 青青草原综合久久大伊人精品| 欧美性做爰猛烈叫床潮| 亚洲一区二区欧美| 欧美午夜精品一区二区蜜桃 | 亚洲欧美另类图片小说| 国产精品一区二区在线观看网站| 日韩免费观看高清完整版| 青青草国产成人99久久| 欧美一区二区三区免费| 麻豆一区二区99久久久久| 欧美一区二区三区电影| 美女网站色91| 精品日韩欧美一区二区| 六月婷婷色综合| 精品福利av导航| 国模一区二区三区白浆| 久久影音资源网| 国产成人a级片| 国产精品视频在线看| 不卡一区二区中文字幕| 综合电影一区二区三区| 日本韩国一区二区| 亚洲国产毛片aaaaa无费看 | 欧美电影免费观看高清完整版在| 日韩成人一级片| 日韩女同互慰一区二区| 久国产精品韩国三级视频| 久久尤物电影视频在线观看| 国产精品中文字幕欧美| 国产精品久线观看视频| 欧美在线一二三| 日韩二区三区四区| 久久久www成人免费毛片麻豆| 国产成人综合视频| 国产精品动漫网站| 在线观看免费亚洲| 蜜臀av性久久久久蜜臀aⅴ | 欧美怡红院视频| 奇米色一区二区三区四区| 久久婷婷久久一区二区三区| 成人动漫精品一区二区| 亚洲韩国一区二区三区| 精品国产乱子伦一区| 91丝袜美腿高跟国产极品老师| 亚洲国产乱码最新视频| 久久亚洲二区三区| 99久久精品免费看国产免费软件| 亚洲一区二区欧美激情| 久久综合久久久久88| 色天天综合久久久久综合片| 日本免费新一区视频| 久久久久久久久久久99999| 91香蕉视频mp4| 日韩电影在线免费| 国产欧美视频一区二区三区| 91成人看片片| 韩国女主播一区| 一区二区三区蜜桃网| 欧美tickling网站挠脚心| 972aa.com艺术欧美| 日韩精品电影在线| 国产视频一区二区在线观看| 在线观看免费亚洲| 国产精品一区二区久久不卡| 有码一区二区三区| 久久综合成人精品亚洲另类欧美| 在线观看成人小视频| 国产精品一区免费视频| 天天射综合影视| 日韩毛片精品高清免费| 精品国产三级a在线观看| 91理论电影在线观看| 国产一区二区影院| 三级亚洲高清视频| 亚洲精品欧美综合四区| 久久伊人中文字幕| 日韩一区二区三|