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

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

?? svmfusvmlargeopt.cpp

?? This is SvmFu, a package for training and testing support vector machines (SVMs). It s written in C
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//     This is a part of the SvmFu library, a library for training //     Support Vector Machines.//      //     Copyright (C) 2000  rif and MIT////     Contact: rif@mit.edu//     This program is free software; you can redistribute it and/or//     modify it under the terms of the GNU General Public License as//     published by the Free Software Foundation; either version 2 of//     the License, or (at your option) any later version.//     This program is distributed in the hope that it will be useful,//     but WITHOUT ANY WARRANTY; without even the implied warranty of//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//     GNU General Public License for more details.//     You should have received a copy of the GNU General Public//     License along with this program; if not, write to the Free//     Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,//     MA 02111-1307 USA#include "SvmFuSvmLargeOpt.h"#ifdef CallTemplate#undef CallTemplate#endif#define CallTemplate(rettype, funcname) \template<class DataPt, class KernVal> \rettype SvmLargeOpt<DataPt, KernVal>::funcname#ifdef InlineTemplate#undef InlineTemplate#endif#define InlineTemplate(rettype, funcname) \template<class DataPt, class KernVal> \rettype SvmLargeOpt<DataPt, KernVal>::funcname//! The standard, cold-start constructor, no extraCacheRows argtemplate <class DataPt, class KernVal>SvmLargeOpt<DataPt, KernVal>::SvmLargeOpt(int svmSize, const IntVec y, DataPt *trnSetPtr, const KernVal (*kernProdFuncPtr)(const DataPt &pt1,				  const DataPt &pt2), int chunkSize, double C, double tol, double eps, int verbosity)  : SvmBase<DataPt, KernVal>(svmSize, y, trnSetPtr,			     kernProdFuncPtr, C, eps),  chunkSize_(chunkSize), tol_(tol), majorIterations_(0), updateNumber_(1),   optimized_(false), verbosity_(verbosity), startType_(coldStart),  extraCacheRows_(0){  initInternal();}//! The standard, cold-start constructor, with an extraCacheRows argtemplate <class DataPt, class KernVal>SvmLargeOpt<DataPt, KernVal>::SvmLargeOpt(int svmSize, const IntVec y, DataPt *trnSetPtr, int extraCacheRows, const KernVal (*kernProdFuncPtr)(const DataPt &pt1,				  const DataPt &pt2), int chunkSize, double C, double tol, double eps, int verbosity)  : SvmBase<DataPt, KernVal>(svmSize, y, trnSetPtr,			     kernProdFuncPtr, C, eps),  chunkSize_(chunkSize), tol_(tol), majorIterations_(0), updateNumber_(1),   optimized_(false), verbosity_(verbosity), startType_(coldStart),  extraCacheRows_(extraCacheRows){  initInternal();}//! The warm-start constructor: you have a guess for alpha and b,// and outputs???  I don't understand this.   If you need outputs,// I don't know what the use is.  This should be cut.template <class DataPt, class KernVal>SvmLargeOpt<DataPt, KernVal>::SvmLargeOpt(int svmSize, const IntVec y, DataPt *trnSetPtr, const KernVal (*kernProdFuncPtr)(const DataPt &pt1,				  const DataPt &pt2), DoubleVec cVec, DoubleVec alphaVec, DoubleVec outputVec, double b, int chunkSize, double tol, double eps, int verbosity)  : SvmBase<DataPt, KernVal>(svmSize, y, trnSetPtr,			     kernProdFuncPtr, 1, eps),    chunkSize_(chunkSize), tol_(tol), majorIterations_(0), updateNumber_(1),     optimized_(false), verbosity_(verbosity), outputs_(outputVec),     startType_(warmStart){  initInternal();  setCVec(cVec);  setAllAlphas(alphaVec);  setB(b);}//! The hot-start constructor, you're passing in a *chunkKernCachetemplate <class DataPt, class KernVal>SvmLargeOpt<DataPt, KernVal>::SvmLargeOpt(int svmSize, const IntVec y, DataPt *trnSetPtr, const KernVal (*kernProdFuncPtr)(const DataPt &pt1,				  const DataPt &pt2), DoubleVec cVec, DoubleVec alphaVec, DoubleVec outputVec, double b, int chunkSize,  SvmKernCache<DataPt, KernVal> *chunkKernCache, double tol, double eps, int verbosity)  : SvmBase<DataPt, KernVal>(svmSize, y, trnSetPtr,			     kernProdFuncPtr, 1, eps),    chunkSize_(chunkSize), tol_(tol), majorIterations_(0), updateNumber_(1),     optimized_(false), verbosity_(verbosity), chunkKernCache_(chunkKernCache),    outputs_(outputVec), startType_(hotStart){  initInternal();  setCVec(cVec);  setAllAlphas(alphaVec);  setB(b);}CallTemplate(void, initInternal)() {  int i;  int size = getSize();        if (size < SVM_LARGEOPT_MIN_TOTAL_SIZE) {    cerr << "ERROR: Total size for SvmLargeOpt must be at least " <<      SVM_LARGEOPT_MIN_TOTAL_SIZE << ".  Aborting." << endl;    exit(1);  }        // Check sizes  if (chunkSize_ > size) {    if (verbosity_ >= 2) {      cerr << "Warning: chunkSize_(" << chunkSize_ << 	") > svmSize_(" << size << ").  Adjusting " <<	"chunk size downward." << endl;    }    chunkSize_ = size;  }        workingSetPos_ = new int[size];  lastCheckIter_ = new int[size];  updateHelper_ = new int[size];  tempKernProds_ = new KernVal[size];  if (startType_ == coldStart) { outputs_ = new double[size]; }  for (i = 0; i < size; i++) {     workingSetPos_[i] = -1;    if (startType_ == coldStart) { outputs_[i] = 0; }    lastCheckIter_[i] = 0;    updateHelper_[i] = 0;  }        workingSet_ = new int[chunkSize_];  chunkY_ = new int[chunkSize_];  chunkC_Vec_ = new double[chunkSize_];  chunkAlphas_ = new double[chunkSize_];  chunkTrnSetPtr_ = new DataPt[chunkSize_];  usingLinear_ = false;}CallTemplate(void, useLinearKernel)(int dims, const void(*afunc)(double *&w, const DataPt &p, double amt), const double(*mfunc)(double *w, const DataPt &p)) {  if (usingLinear_ == false) {    int i;    linDims_ = dims;    w_ = new double[dims];    for (i = 0; i < dims; i++) {      w_[i] = 0;    }        int size = getSize();    double eps = getEpsilon();        addToWPtr_ = afunc;    multWPtr_ = mfunc;    for (i = 0; i < size; i++) {      if (getAlpha(i) > eps) {	addToWPtr_(w_, getTrainingExample(i), getY(i)*getAlpha(i));      }    }        usingLinear_ = true;  }}template<class DataPt, class KernVal> SvmLargeOpt<DataPt, KernVal>::~SvmLargeOpt() {  int i;  for (i = 0; i < (int)alphaDiffHistory_.size(); i++) {    delete[] alphaDiffHistory_[i];  }  delete[] workingSet_;  delete[] workingSetPos_;  delete[] chunkY_;  delete[] chunkC_Vec_;  delete[] chunkAlphas_;  delete[] chunkTrnSetPtr_;  if (startType_ == coldStart) { delete[] outputs_; }  delete[] updateHelper_;  delete[] tempKernProds_;    if (chunkKernCacheAllocatedP_) {    delete chunkKernCache_;  }  delete[] selfProds_;  if (usingLinear_) {    delete[] w_;  }}/*! \fn void SvmLargeOpt<DataPt, KernVal>::optimize () * * Optimizes the svm. */CallTemplate(void, optimize)() {  setupAndSolveInitialChunk();  if (verbosity_ >= 2) cout << "Solved initial chunk." << endl;  while (setupAndSolveNewChunk()) {    if (verbosity_ >= 2) cout << "Solved chunk." << endl;	  }      optimized_ = true;}CallTemplate(void, reoptimize)() {  if (verbosity_ >= 2) cout << "Forcing current chunk." << endl;  forceCurrentChunk();  while (setupAndSolveNewChunk()) {    if (verbosity_ >= 2) cout << "Solved chunk." << endl;	  }  optimized_ = true;}CallTemplate(void, setupAndSolveInitialChunk)() {  createInitialWorkingSet();  setupInitialChunkData();  if (verbosity_ >= 2) cout << "Setup initial chunk data. " << endl;  buildAndSolveChunk();  if (verbosity_ >= 2) cout << "Built and solved initial chunk. " << endl;  updateAlphasAndB();  if (verbosity_ >= 2) cout << "Updated alphas and B. " << endl;  destroyChunk();}/*! \fn void SvmLargeOpt<DataPt, KernVal>::setupInitialChunkData () * * Sets up the initial chunk using the indices from workingSet_ * and creates the kernel cache. */CallTemplate(void, setupInitialChunkData)() {  int i;    for (i = 0; i < chunkSize_; i++) {    int ex = workingSet_[i];    chunkY_[i] = getY(ex);    chunkC_Vec_[i] = getC(ex);    chunkTrnSetPtr_[i] = getTrainingExample(ex);    chunkAlphas_[i] = getAlpha(workingSet_[i]);  }  if (startType_ != hotStart) {    chunkKernCache_ = new SvmKernCache<DataPt, KernVal>      (chunkSize_, extraCacheRows_, svmSize_, trnSetPtr_, kernProdFuncPtr_);    chunkKernCacheAllocatedP_ = true;  } else {    chunkKernCacheAllocatedP_ = false;  }  chunkKernCache_->workingSetChanged(workingSet_, eltQueue_);  // This now goes here because we need the initialization of the  // data structure done by workingSetChanged to happen BEFORE we  // read the cachedKernProds.  Bad Hack.  int size = getSize();  selfProds_ = new KernVal[size];  if (startType_ == hotStart && chunkKernCache_->readFromFile_) {    for (i = 0; i < size; i++) {      selfProds_[i] = chunkKernCache_->cachedKernProd(i,i);    }  } else {    for (i = 0; i < size; i++) {      selfProds_[i] = kernProdFuncPtr_(getTrainingExample(i),				       getTrainingExample(i));    }  }}CallTemplate(bool, setupAndSolveNewChunk)() {  // if we can improve the working set...  if (updateWorkingSetAndChunkData()) {    buildAndSolveChunk();    updateAlphasAndB();    destroyChunk();        return true;  } else {    return false;  }}CallTemplate(void, forceCurrentChunk)() {  buildAndSolveChunk();  updateAlphasAndB();  destroyChunk();}/*! \fn bool SvmLargeOpt<DataPt, KernVal>::updateWorkingSetAndChunkData () * * Prepares a new working set for optimization by an SvmSmallOpt. * * Returns false if we're done. * * \todo make sure iteration through the sets is in the proper direction */CallTemplate(bool, updateWorkingSetAndChunkData)() {    int numUSVs = getNumUnbndSupVecs();  int maxToAdd = chunkSize_-numUSVs-SVM_LARGEOPT_NON_USVS_TO_KEEP;  int origQueueSize = eltQueue_.size();  int size, i;  bool didAPivot = false;  ////////////////////  // bounds checking  ////////////////////    if (origQueueSize == 0) {    if (verbosity_ >= 2) {      cerr << "WARNING: All elements are in the working set --- we're done." 	   << endl;    }    return false;  }  if (maxToAdd < SVM_LARGEOPT_MIN_TO_ADD) {    maxToAdd = SVM_LARGEOPT_MIN_TO_ADD;    if (maxToAdd > chunkSize_) { maxToAdd = chunkSize_; }    if (verbosity_ >= 2) {       cerr << "WARNING: chunkSize = " << chunkSize_	   << ", numUSVs = " << numUSVs << "; things could get SLOW..."	   << endl;    }  }  ////////////////////////////////////////////////  // choose points to add to the working set and  // update the working set data structures  ////////////////////////////////////////////////  int numPointsFound = 0;  int numPointsChecked = 0;  int numPointsShrunk = 0;  int checksSinceLastFind = 0;  int firstFound = -1;  int lastFound = -1;  int maxGapSize = 0;  int curGapSize = 0;  list<QueueElt_> removedPoints;  list<QueueElt_> checkedNotAddedPoints;    double *phiDiffs = new double[majorIterations_];  double curPhi = 0;    for (i = majorIterations_ - 1; i >= 0; i--) {    curPhi += phis_[i];    phiDiffs[i] = curPhi;  }  int pointsRemoved, SVsRemoved, SVsAdded;  pointsRemoved = SVsRemoved = SVsAdded = 0;    while ((numPointsChecked < origQueueSize) &&	 ((numPointsFound == 0) ||	  ((numPointsFound < maxToAdd) && 	   (checksSinceLastFind <= firstFound+	    SVM_LARGEOPT_MAX_NONFIND_CHECKS)))) {    QueueElt_ qe = eltQueue_.top();    eltQueue_.pop();    int ex = qe.elt_;        double alpha = getAlpha(ex);    bool checkNeeded = false;    int lc = lastCheckIter_[ex];    double rho = sqrt(selfProds_[ex]*phiDiffs[lc]) + getB() - bHistory_[lc];    double oldOut = outputs_[ex];    int y = getY(ex);        double eps = getEpsilon();    if (alpha < eps) {      if (y*oldOut - rho < 1) { checkNeeded = true; }    } else if (alpha > getC(ex) - eps) {      if (y*oldOut + rho >= 1) { checkNeeded = true; }    } else { // USV not in the working set, check it.      checkNeeded = true;    }        double KKT_Dist = 0;    if (checkNeeded) {       KKT_Dist = KKT_ViolationAmt(ex);    }          // if the point is a violator    if (KKT_Dist > tol_) {      // remove the least offending point from the removal queue       QueueElt_ pointToRemove = removalQueue_.top();      removalQueue_.pop();      pointsRemoved ++;      if (alpha > 0) { SVsAdded++; }      if (getAlpha(pointToRemove.elt_) > 0) { SVsRemoved++; }            // Store the removed point in a list, so we can put it on the       // to be checked queue AFTER the round.      removedPoints.push_back(pointToRemove);      // update the working set with the new point      pivotWorkingSet(ex, pointToRemove.elt_);      // update statistics      checksSinceLastFind = 0;	      if (numPointsFound == 0) { firstFound = numPointsChecked; }      else {		if (curGapSize > maxGapSize) {	  maxGapSize = curGapSize;	}      }            lastFound = numPointsChecked;      numPointsFound++;      curGapSize = 0;    } else {      checkedNotAddedPoints.push_back(QueueElt_(ex, KKT_Dist));      checksSinceLastFind++;      curGapSize++;    }    numPointsChecked++;  }  delete[] phiDiffs;  if (verbosity_ > 0) {    cout << "Checked " << numPointsChecked << " points, adding " 	 << numPointsFound << " to working set." << endl;    cout << "Adding " << SVsAdded << " SVs, removing " << SVsRemoved << " SVs." << endl;  }  ////////////////////////////  // update the kernel cache  ////////////////////////////  // if we changed the working set  if (numPointsFound) {    // add points removed from the working set to the to-be-added set    for (list<QueueElt_>::iterator removedPoints_it = removedPoints.begin();	 removedPoints_it != removedPoints.end(); removedPoints_it++)    {      eltQueue_.push(QueueElt_(removedPoints_it->elt_,			       KKT_ViolationAmt(removedPoints_it->elt_)));    }    // add points we checked but didn't add back to the queue    for (list<QueueElt_>::iterator checkedNotAddedPoints_it =	   checkedNotAddedPoints.begin();	 checkedNotAddedPoints_it != checkedNotAddedPoints.end();	 checkedNotAddedPoints_it++)    {      eltQueue_.push(*checkedNotAddedPoints_it);    }        chunkKernCache_->workingSetChanged(workingSet_, eltQueue_);    return true;  }   else return false;}CallTemplate(void, createInitialWorkingSet)() {  if (startType_ == coldStart) {    createInitialWorkingSetCold();  } else if (startType_ == warmStart) {    createInitialWorkingSetWarm();  } else { // startType_ == hotStart    createInitialWorkingSetHot();  }}/*! \fn void SvmLargeOpt<DataPt, KernVal>::createInitialWorkingSetCold () * * Populates the working set with a balanced selection of points * if possible. * * This is a little complicated.  We make only a single pass * over the data, filling in the working set with positive examples * from the bottom, and negative from the top.  We allow ourselves * to write more than sS/2 of a given class into the array, but if * we later find enough examples of the other class, we overwrite. */CallTemplate(void, createInitialWorkingSetCold)() {  const int sS = chunkSize_; // for readability      // "clever" method for trying to get as many points from  // both classes as possible into the working set.  This avoids  // the need to prerandomize the order of presentation of the  // points, although that's still a good idea for other reasons.      struct initInfo {    int numGood;    int maxGood;    int numFound;    int startPos;    int posChange;  };    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲gay无套男同| 亚洲特级片在线| 不卡在线观看av| 一区二区三区在线观看欧美| 国产免费观看久久| 国产女同性恋一区二区| 久久蜜桃一区二区| 久久婷婷成人综合色| 26uuu亚洲综合色欧美| 日韩欧美一区二区不卡| 欧美群妇大交群中文字幕| 欧美电影一区二区三区| 制服丝袜成人动漫| 精品国产免费久久| 欧美电影免费观看高清完整版| 日韩三级视频在线看| 久久久久99精品一区| 国产精品丝袜91| 亚洲精品国产a| 亚洲一区在线视频| 视频一区二区国产| 韩国女主播成人在线| 成人黄页在线观看| 欧美人动与zoxxxx乱| 欧美大片在线观看| 日韩一区在线看| 亚洲777理论| 国产精品1区2区3区在线观看| av在线不卡免费看| 在线不卡欧美精品一区二区三区| 精品久久五月天| 国产精品国产三级国产普通话99| 亚洲综合免费观看高清完整版在线| 亚洲一区二区三区中文字幕| 午夜精品福利久久久| 国产九色精品成人porny| 在线中文字幕一区二区| 日韩一区二区三区av| 国产精品二三区| 蜜桃视频第一区免费观看| 成人做爰69片免费看网站| 精品视频一区二区不卡| 中文字幕免费在线观看视频一区| 亚洲一区二区三区四区在线免费观看| 视频一区二区中文字幕| 色综合咪咪久久| 久久久久久久免费视频了| 天天操天天综合网| 91亚洲精品乱码久久久久久蜜桃| 日韩欧美一级在线播放| 亚洲韩国精品一区| 成人av在线观| 久久蜜桃一区二区| 日本欧美大码aⅴ在线播放| 色呦呦日韩精品| 中文字幕av不卡| 国产酒店精品激情| 日韩欧美成人午夜| 视频一区欧美精品| 欧美疯狂性受xxxxx喷水图片| 国产色产综合产在线视频| 美腿丝袜在线亚洲一区| 欧美图片一区二区三区| 亚洲三级免费电影| 99r国产精品| 国产精品成人免费在线| 国产精品一二三四| 久久综合狠狠综合| 国产在线精品免费av| 日韩一区二区三区视频在线观看 | 不卡的av在线| 国产三级精品三级在线专区| 国产一区视频在线看| 日韩欧美国产午夜精品| 蜜臀av国产精品久久久久| 欧美日韩亚洲综合在线| 午夜一区二区三区在线观看| 91国偷自产一区二区三区观看| 18涩涩午夜精品.www| 99久久综合狠狠综合久久| 国产精品久久影院| 91女人视频在线观看| 亚洲成在线观看| 91福利精品第一导航| 亚洲色图欧美偷拍| 欧美日韩在线三区| 日韩福利电影在线| 精品噜噜噜噜久久久久久久久试看 | 色综合久久久久网| 亚洲尤物视频在线| 日韩一区二区视频在线观看| 毛片av中文字幕一区二区| www国产亚洲精品久久麻豆| 国产91丝袜在线播放| 亚洲免费观看视频| 91精品国产一区二区| 国产精品性做久久久久久| 自拍av一区二区三区| 欧美精品久久一区二区三区| 精品一区二区三区在线观看| 国产人成一区二区三区影院| 91性感美女视频| 日韩极品在线观看| 亚洲国产精华液网站w| 精品视频在线免费看| 韩国在线一区二区| 亚洲美女精品一区| 男女激情视频一区| 久久久久久久久久久久久久久99 | 国产亚洲一区二区在线观看| 国产成人丝袜美腿| 亚洲在线中文字幕| 久久女同精品一区二区| 日本道免费精品一区二区三区| 琪琪久久久久日韩精品| 亚洲欧洲一区二区在线播放| 欧美高清视频一二三区| 成人福利电影精品一区二区在线观看| 亚洲一区二区三区爽爽爽爽爽 | 国内精品写真在线观看| 专区另类欧美日韩| 欧美精品一区二区三区四区| 91久久精品午夜一区二区| 美女看a上一区| 一区二区三区色| 国产亚洲综合在线| 日韩三级视频在线看| 色8久久精品久久久久久蜜| 国产在线精品不卡| 日韩电影免费一区| 一区二区不卡在线播放 | 91国内精品野花午夜精品| 国产一区三区三区| 午夜国产精品影院在线观看| 中文字幕日韩欧美一区二区三区| 精品国产伦一区二区三区观看体验 | 久久网这里都是精品| 欧美日本一区二区| 欧美在线播放高清精品| 9色porny自拍视频一区二区| 国产激情一区二区三区| 美女视频黄 久久| 蜜臀av性久久久久蜜臀aⅴ| 亚洲狠狠爱一区二区三区| 中文字幕在线播放不卡一区| 国产三级精品三级| 久久精品欧美一区二区三区麻豆| 日韩精品一区二区三区视频| 欧美一区二区视频在线观看2020 | 国内精品久久久久影院薰衣草| 首页国产丝袜综合| 亚洲一区二区三区四区在线免费观看 | 国产亚洲欧美激情| 久久久不卡影院| 国产日产欧美一区二区三区| 日韩一区二区麻豆国产| 91精品在线麻豆| 日韩免费视频一区| 欧美xxxx老人做受| 久久你懂得1024| 中文字幕不卡的av| 亚洲日韩欧美一区二区在线| 亚洲日本中文字幕区| 亚洲电影中文字幕在线观看| 性做久久久久久免费观看欧美| 天天爽夜夜爽夜夜爽精品视频| 奇米精品一区二区三区在线观看一| 日韩精品欧美成人高清一区二区| 免费黄网站欧美| 国产成人免费网站| 色综合天天狠狠| 欧美日韩在线一区二区| 日韩天堂在线观看| 国产精品你懂的| 亚洲图片欧美视频| 国模无码大尺度一区二区三区| 国产成人精品网址| 91豆麻精品91久久久久久| 欧美老女人在线| 国产午夜精品理论片a级大结局| 中文字幕中文字幕中文字幕亚洲无线 | 秋霞电影网一区二区| 国产伦精品一区二区三区免费迷| 99久久亚洲一区二区三区青草| 欧美又粗又大又爽| www日韩大片| 一区二区久久久久| 国产一区二区三区美女| 色综合欧美在线视频区| 欧美成人伊人久久综合网| 国产精品国产三级国产a| 视频一区视频二区中文| 成人在线综合网| 欧美日本在线播放| 中文字幕一区日韩精品欧美| 蜜桃久久久久久| 日本二三区不卡| 久久精品日产第一区二区三区高清版| 亚洲一区二区视频在线观看| 懂色av噜噜一区二区三区av|