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

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

?? cvm_core.cpp

?? Ball Vector Machine (BVM)支撐向量機C++程序項目代碼
?? CPP
字號:
#include <math.h>#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <float.h>#include <string.h>#include <assert.h>#include <time.h>
#include "cvm.h"


//// Solver for Lagrangian SVM classification and regression//// Solves:////	min 0.5(\alpha^T Q \alpha) - 0.5(\alpha^T D)////		e^T \alpha = 1//		\alpha >= 0//// Given:////	Q, D and an initial feasible point \alpha//	num is the size of vectors and matrices//// solution will be put in \alpha//
Solver_Lag::Solver_Lag(int *CoreIdx, int numCore, const QMatrix& Q, const double* D, double *inAlpha, double Eps, double MinEps, int initSize)
{	this->l				= numCore;	this->Q				= &Q;		this->allocatedSize = initSize;	this->eps		    = Eps;	this->minEps	    = MinEps;	// The following members (inheritanced from Solver) will be used in update_alpha_status	this->Cp = INF;								this->Cn = INF;		// all the following members (inheritanced from Solver) will not be used	this->b     = NULL;	this->G_bar = NULL;	this->y     = NULL;	active_set  = NULL;	unshrinked  = true;				{		alpha		 = (double *)calloc(allocatedSize,sizeof(double));		// initialized as zero				alpha_status = (char *)calloc(allocatedSize,sizeof(char));			// initialize alpha_status		for (int i=0;i<numCore;i++)		{			alpha[i] = inAlpha[i];			update_alpha_status2(i);		}	}	// initialize gradient	{		G	  = (double*) calloc(allocatedSize,sizeof(double));				vec_d = (double *)calloc(allocatedSize,sizeof(double));			int i;		for(i=0;i<numCore;i++)		{			if(!is_lower_bound(i))						// non-zero alpha			{				const Qfloat *Q_i = Q.get_Q(CoreIdx[i],numCore,CoreIdx);				double alpha_i = alpha[i];				for(int j=0;j<numCore;j++)									G[j] += alpha_i*Q_i[j];			}		}		for(i=0; i<numCore; i++)		{			vec_d[i] = D[i]*0.5;						G[i] -= vec_d[i];		}	}	CacheQ_i = (Qfloat *)calloc(allocatedSize,sizeof(Qfloat));}Solver_Lag::~Solver_Lag(){	free(CacheQ_i);	free(vec_d);		free(G);	free(alpha);	free(alpha_status);}

int Solver_Lag::Solve(int *CoreIdx, int numCore, const double* newD)
{	assert( numCore >= this->l );	int prevSize   = this->l;	this->l        = numCore;										// update the patterns		this->_CoreIdx = CoreIdx;	// The problem is now larger (allocate space if necessary)	if ( numCore >= allocatedSize )	{					allocatedSize = (int)(1.5*allocatedSize);		CacheQ_i      = (Qfloat*)realloc(CacheQ_i,     allocatedSize*sizeof(Qfloat));		alpha         = (double*)realloc(alpha,		   allocatedSize*sizeof(double));		vec_d         = (double*)realloc(vec_d,		   allocatedSize*sizeof(double));		alpha_status  = (char*)  realloc(alpha_status, allocatedSize*sizeof(char));		G             = (double*)realloc(G,            allocatedSize*sizeof(double));	}	// Initialize the newly-added part:		for (int i=prevSize; i<numCore; i++)	{		alpha[i] = 0.0;									// adding zero at the end					update_alpha_status2(i);					vec_d[i] = newD[i-prevSize]*0.5;		// gradient		G[i] = -vec_d[i];								// linear -> constant		const Qfloat *Q_i = Q->get_Q(CoreIdx[i],numCore,CoreIdx);		for (int j=0; j<prevSize; j++)			G[i] += Q_i[j] * alpha[j];					// quadratic -> linear	}	QD = Q->get_QD();		////////////////////////////////////////////////////////////////////////////////////	// optimization step	int iter = 0;		while(1)	{		int i,j, notSelected;		if( (notSelected = select_working_set(i,j)) != 0 )		{						if ( iter == 0 )			{								// internal epsilon is too large				while ( notSelected && (eps > minEps) )				{					eps *= EPS_SCALING;					eps  = max(eps,minEps);#ifndef RELEASE_VER					printf("Dynamic Scheme: EPS now is %.10g\n", eps);#else					printf("o");#endif					notSelected = select_working_set(i,j);				} 				if (notSelected) 				{					printf("not selected\n");					break;				}			}			else break;		}		++iter;		// update alpha[i] and alpha[j], handle bounds carefully				const double old_alpha_i = alpha[i];		const double old_alpha_j = alpha[j];		const double sum   = alpha[i] + alpha[j];		// original sum (must maintain during update)		const Qfloat *Q_i  = CacheQ_i;				const Qfloat *Q_j  = Q->get_Q(CoreIdx[j],numCore, CoreIdx);		const double P_val = max((double)(Q_i[i]+Q_j[j]-2.0*Q_i[j]), 0.0);	// it should be non-negative		const double Q_val = (G[i]-G[j]) - old_alpha_i * P_val;						if ( P_val < EPSILON )											// non quadratic problem		{			if ( Q_val >= 0.0 )				alpha[i] = 0.0;			else alpha[i] = sum;										// unbounded linear problem		}		else		{			alpha[i] = (-Q_val/P_val);			if ( alpha[i] < 0.0 )				alpha[i] = 0.0;			else if ( alpha[i] > sum )				alpha[i] = sum;		}		alpha[j] = (sum - alpha[i]);		// update the alpha's status		update_alpha_status2(i);		update_alpha_status2(j);		// update G				double delta_alpha_i = alpha[i] - old_alpha_i;		double delta_alpha_j = alpha[j] - old_alpha_j;		for(int k=0;k<numCore;k++)			G[k] += Q_i[k]*delta_alpha_i + Q_j[k]*delta_alpha_j;		// stop if little improvement (eps^2 is a very very small number)		if ( fabs(delta_alpha_i) + fabs(delta_alpha_j) < SQUARE(eps) )			break;	}	#ifndef RELEASE_VER	info("#SMO=%d ",iter);#endif	return iter;}
int Solver_Lag::select_working_set(int &out_i, int &out_j){	// return i,j such that	// i: maximizes - grad(f)_i, i 	// j: minimizes the decrease of obj value	//    (if quadratic coefficeint <= 0, replace it with tau)	//    -grad(f)_j < -grad(f)_i, j for \alpha_j>0		double Gmax  = -INF;	int Gmax_idx = -1;	int Gmin_idx = -1;	double obj_diff_min = INF;	for(int t=0;t<this->l;t++)		if(-G[t] >= Gmax)		{			Gmax = -G[t];			Gmax_idx = t;			}			int i = Gmax_idx;	const Qfloat *Q_i = NULL;	if(i != -1) // NULL Q_i not accessed: Gmax=-INF if i=-1		Q_i = Q->get_Q(_CoreIdx[i],this->l,_CoreIdx);	else		return 1;	// using approximate second order information to maximize the functional gain	int j;	for(j=0;j<this->l;j++)	{		if (!is_lower_bound(j))		{			double grad_diff=Gmax+G[j];			if (grad_diff >= eps)			{				double obj_diff; 				double quad_coef=Q_i[i]+QD[_CoreIdx[j]]-2.0*Q_i[j];				if (quad_coef > 0.0)					obj_diff = -(grad_diff*grad_diff)/quad_coef;				else					obj_diff = -(grad_diff*grad_diff)/TAU;				if (obj_diff <= obj_diff_min)				{					Gmin_idx=j;					obj_diff_min = obj_diff;				}			}		}	}	if(Gmin_idx == -1) 		return 1;	for(j=0;j<this->l;j++)		CacheQ_i[j] = Q_i[j];	out_i = Gmax_idx;	out_j = Gmin_idx;	return 0;}

double Solver_Lag::computeObj() const{	double obj = 0.0;	for (int i=0; i<this->l; i++)		obj += alpha[i] * (G[i] - vec_d[i]);	obj /= 2;    	return obj;}

double Solver_Lag::computeCNorm() const{	double obj = 0.0;	for (int i=0; i<this->l; i++)		obj += alpha[i] * (G[i] + vec_d[i]);	    	return obj;}

//---------------------------------------------------------------------------------------------------------------------

void Solver_Core::Init(const svm_problem *_prob, const svm_parameter* _param)
{
	prob  = _prob;
	param = _param;
	_Init();
}

bool Solver_Core::Create(double CVM_eps)
{
	bool flag = _Create(CVM_eps);
	if (flag) 
	{
		// use a small subset for initial MEB
		solver->Solve(coreIdx,coreNum,tempD);
		outAlpha = solver->getAlpha();
		ComputeRadius2();
	}
	return flag;
}


int Solver_Core::Solve(int num_basis, double cvm_eps)
{
	this->maxNumBasis = num_basis;

    // The convergence of CVM does not require the exact MEB on the core-set. 
    // With the recent advance of core-set approximation, the (1+epsilon/2)-MEB approximation on the core-set 
    // can guarantee the quality and the convergence of the (1+epsilon)-MEB approximation for the whole data set.
    // See [Kumar, Mitchell, and Yildirim, 2003]
    //
	// iterate on epsilons
	double epsilonFactor = EPS_SCALING;
	for(double currentEpsilon = INITIAL_EPS; currentEpsilon/epsilonFactor > cvm_eps; currentEpsilon *= epsilonFactor)
	{
		// check epsilon
		currentEpsilon = (currentEpsilon < cvm_eps ? cvm_eps : currentEpsilon);		

		// solve problem with current epsilon (warm start from the previous solution)
		double maxDistance2 = 0.0;
		int maxDistance2Idx = 0;
		double factor       = 1.0 + currentEpsilon;
		factor             *= factor;

        // The convergence of CVM does not require the exact most violating point. 
        // A violating point is enough for the convergence of CVM. 
        // Probabilistic speedup lead to a good tradeoff between convergence and complexity at each iteration
        //
		while (maxDistance2Idx != -1)
		{
			// get a probabilistic sample
			maxDistance2    = r2 * factor;
			maxDistance2Idx = -1;			
			for(int sampleIter = 0; (sampleIter < 7) && (maxDistance2Idx == -1); sampleIter++)			
				maxDistance2 = _maxDistFromSampling(maxDistance2, maxDistance2Idx);

			// check maximal distance
			if (maxDistance2Idx != -1)
			{	
				_UpdateCoreSet(maxDistance2Idx);	
#ifndef RELEASE_VER
				printf("#%d eps: %g |c|: %.10f  R: %.10f |c-x|: %.10f r: %.10f\n",coreNum, currentEpsilon, coreNorm2, r2, maxDistance2, sqrt(maxDistance2/r2)-1.0);
#endif				
				solver->Solve(coreIdx,coreNum,tempD);
				outAlpha = solver->getAlpha();				
				ComputeRadius2();
				if (coreNum%20 < 1) info(".");				
			}
			if (IsExitOnMaxIter())
			{
				currentEpsilon = cvm_eps;
				break;
			}
		}
	}	
	info("\n");

	return coreNum;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区在线| 成人黄动漫网站免费app| 国产在线观看免费一区| 色综合激情久久| 欧美韩国一区二区| 蓝色福利精品导航| 欧美亚洲综合在线| 中文字幕在线免费不卡| 国产一区二区三区四区五区入口| 欧美三级在线视频| 亚洲欧洲日韩综合一区二区| 国产一区免费电影| 欧美一区欧美二区| 午夜精品久久久久久久久久 | 日韩一卡二卡三卡| 樱花草国产18久久久久| 国产不卡在线一区| 国产亲近乱来精品视频| 国产乱妇无码大片在线观看| 欧美电影免费观看高清完整版 | 成人av网站在线观看| xfplay精品久久| 日本麻豆一区二区三区视频| 欧美揉bbbbb揉bbbbb| 一区二区三区欧美| 欧美亚洲国产一区二区三区va | 久久久www免费人成精品| 久久99精品久久久久久国产越南| 91麻豆精品国产91久久久久久久久 | 日韩视频一区二区三区在线播放 | 亚洲男人电影天堂| 91麻豆免费视频| 亚洲免费毛片网站| 欧美在线视频日韩| 五月激情六月综合| 日韩欧美国产高清| 国产美女精品人人做人人爽| 久久综合色综合88| 成人av第一页| 一区二区三区日韩欧美| 欧美日韩激情一区| 日韩高清在线不卡| 精品国产成人在线影院| 国产91精品在线观看| 国产精品美女久久久久aⅴ| k8久久久一区二区三区| 亚洲私人黄色宅男| 欧美日韩精品福利| 久久精品国产久精国产爱| 国产校园另类小说区| 91浏览器打开| 五月开心婷婷久久| 久久久久久久综合日本| 91色视频在线| 蜜桃精品在线观看| 国产精品天美传媒| 欧美午夜理伦三级在线观看| 久久99精品久久只有精品| 中文字幕不卡三区| 欧美日韩久久久| 国产很黄免费观看久久| 一级女性全黄久久生活片免费| 欧美精品久久99久久在免费线 | 国产精品免费aⅴ片在线观看| 一本色道**综合亚洲精品蜜桃冫| 视频一区二区中文字幕| 欧美激情一区二区三区全黄| 欧美日韩久久久| 国产精品1区2区3区在线观看| 亚洲一区二区欧美| 久久久久综合网| 精品视频免费在线| 成人中文字幕电影| 美女网站色91| 一区二区成人在线| 久久久久一区二区三区四区| 欧美日韩精品一区二区三区四区| 国产精品亚洲第一区在线暖暖韩国| 亚洲宅男天堂在线观看无病毒| 欧美精品一区在线观看| 欧美综合一区二区| 成人18视频日本| 国内精品自线一区二区三区视频| 亚洲精品大片www| 日本一区二区在线不卡| 日韩美女一区二区三区四区| 欧美性猛交xxxx黑人交| 国产成人免费9x9x人网站视频| 日韩综合小视频| 亚洲免费观看视频| 国产人成亚洲第一网站在线播放| 欧美一区二区在线免费观看| 欧美亚洲自拍偷拍| 日韩欧美你懂的| 91福利社在线观看| a美女胸又www黄视频久久| 韩国一区二区视频| 麻豆精品国产91久久久久久| 无码av免费一区二区三区试看| 亚洲女女做受ⅹxx高潮| 成人免费在线视频| 国产精品天天看| 日本一二三不卡| 国产日韩高清在线| 国产午夜精品一区二区| 久久看人人爽人人| 久久久久国产免费免费| 久久婷婷综合激情| 久久蜜臀中文字幕| 久久丝袜美腿综合| 久久久三级国产网站| 久久一夜天堂av一区二区三区| 欧美一区二区视频在线观看2020 | 美女视频一区二区| 免费看欧美美女黄的网站| 免费在线观看一区| 日韩成人一区二区| 美女一区二区三区在线观看| 日韩电影免费在线| 久久成人免费网站| 国内精品视频一区二区三区八戒| 老司机免费视频一区二区| 狠狠色狠狠色合久久伊人| 国产乱对白刺激视频不卡| 国产高清一区日本| hitomi一区二区三区精品| 成人app下载| 欧美专区亚洲专区| 91精品国产综合久久小美女| 欧美大片国产精品| 国产日韩v精品一区二区| 日韩理论片中文av| 日韩精品一二区| 国内精品伊人久久久久av影院 | 久久久亚洲精品一区二区三区| 中文字幕欧美激情一区| 亚洲欧洲国产专区| 偷偷要91色婷婷| 国产精品一区二区久久不卡| 97超碰欧美中文字幕| 欧美裸体bbwbbwbbw| 2017欧美狠狠色| 一区二区三区免费网站| 免费在线观看一区| 成年人网站91| 欧美一区二区三区视频免费播放| 久久久久久影视| 亚洲国产cao| 国产成人午夜精品影院观看视频 | 91.com在线观看| 中文字幕av不卡| 日韩激情在线观看| 国精品**一区二区三区在线蜜桃| 99re热这里只有精品视频| 欧美日韩亚洲综合| 国产精品毛片久久久久久| 日韩成人av影视| 91在线你懂得| 久久一夜天堂av一区二区三区| 亚洲免费观看高清| 激情文学综合丁香| 欧美日韩中文国产| 亚洲国产激情av| 久久国产精品露脸对白| 色播五月激情综合网| 国产亚洲一二三区| 秋霞午夜鲁丝一区二区老狼| 91在线小视频| 国产视频911| 免费一级欧美片在线观看| 日本丰满少妇一区二区三区| 久久亚洲二区三区| 日本欧美肥老太交大片| 欧美艳星brazzers| 亚洲人成小说网站色在线 | 精品在线一区二区三区| 欧美日韩久久不卡| 尤物在线观看一区| 99精品热视频| 欧美高清一级片在线观看| 精品系列免费在线观看| 91 com成人网| 视频精品一区二区| 91成人在线观看喷潮| 亚洲欧美日本在线| 成人国产免费视频| 欧美韩日一区二区三区四区| 国产乱码精品一区二区三区av | 亚洲人成精品久久久久久| 懂色av一区二区三区免费观看| 精品粉嫩超白一线天av| 裸体歌舞表演一区二区| 欧美一区二区三区思思人| 免费看黄色91| 精品久久久久久久人人人人传媒 | 欧美三级中文字幕在线观看| 亚洲五码中文字幕| 欧美日本韩国一区二区三区视频 | 日韩精品中文字幕在线一区| 免费的国产精品|