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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? svm.cpp

?? 支撐向量機(jī)庫文件
?? CPP
?? 第 1 頁 / 共 4 頁
字號(hào):
	delete[] alpha;	delete[] alpha_status;	delete[] active_set;	delete[] G;	delete[] G_bar;}// return 1 if already optimal, return 0 otherwiseint Solver::select_working_set(int &out_i, int &out_j){	// return i,j which maximize -grad(f)^T d , under constraint	// if alpha_i == C, d != +1	// if alpha_i == 0, d != -1	double Gmax1 = -INF;		// max { -grad(f)_i * d | y_i*d = +1 }	int Gmax1_idx = -1;	double Gmax2 = -INF;		// max { -grad(f)_i * d | y_i*d = -1 }	int Gmax2_idx = -1;	for(int i=0;i<active_size;i++)	{		if(y[i]==+1)	// y = +1		{			if(!is_upper_bound(i))	// d = +1			{				if(-G[i] > Gmax1)				{					Gmax1 = -G[i];					Gmax1_idx = i;				}			}			if(!is_lower_bound(i))	// d = -1			{				if(G[i] > Gmax2)				{					Gmax2 = G[i];					Gmax2_idx = i;				}			}		}		else		// y = -1		{			if(!is_upper_bound(i))	// d = +1			{				if(-G[i] > Gmax2)				{					Gmax2 = -G[i];					Gmax2_idx = i;				}			}			if(!is_lower_bound(i))	// d = -1			{				if(G[i] > Gmax1)				{					Gmax1 = G[i];					Gmax1_idx = i;				}			}		}	}	if(Gmax1+Gmax2 < eps) 		return 1;	out_i = Gmax1_idx;	out_j = Gmax2_idx;	return 0;}void Solver::do_shrinking(){	int i,j,k;	if(select_working_set(i,j)!=0) return;	double Gm1 = -y[j]*G[j];	double Gm2 = y[i]*G[i];	// shrink		for(k=0;k<active_size;k++)	{		if(is_lower_bound(k))		{			if(y[k]==+1)			{				if(-G[k] >= Gm1) continue;			}			else	if(-G[k] >= Gm2) continue;		}		else if(is_upper_bound(k))		{			if(y[k]==+1)			{				if(G[k] >= Gm2) continue;			}			else	if(G[k] >= Gm1) continue;		}		else continue;		--active_size;		swap_index(k,active_size);		--k;	// look at the newcomer	}	// unshrink, check all variables again before final iterations	if(unshrinked || -(Gm1 + Gm2) > eps*10) return;		unshrinked = true;	reconstruct_gradient();	for(k=l-1;k>=active_size;k--)	{		if(is_lower_bound(k))		{			if(y[k]==+1)			{				if(-G[k] < Gm1) continue;			}			else	if(-G[k] < Gm2) continue;		}		else if(is_upper_bound(k))		{			if(y[k]==+1)			{				if(G[k] < Gm2) continue;			}			else	if(G[k] < Gm1) continue;		}		else continue;		swap_index(k,active_size);		active_size++;		++k;	// look at the newcomer	}}double Solver::calculate_rho(){	double r;	int nr_free = 0;	double ub = INF, lb = -INF, sum_free = 0;	for(int i=0;i<active_size;i++)	{		double yG = y[i]*G[i];		if(is_lower_bound(i))		{			if(y[i] > 0)				ub = min(ub,yG);			else				lb = max(lb,yG);		}		else if(is_upper_bound(i))		{			if(y[i] < 0)				ub = min(ub,yG);			else				lb = max(lb,yG);		}		else		{			++nr_free;			sum_free += yG;		}	}	if(nr_free>0)		r = sum_free/nr_free;	else		r = (ub+lb)/2;	return r;}//// Solver for nu-svm classification and regression//// additional constraint: e^T \alpha = constant//class Solver_NU : public Solver{public:	Solver_NU() {}	void Solve(int l, const Kernel& Q, const double *b, const schar *y,		   double *alpha, double Cp, double Cn, double eps,		   SolutionInfo* si, int shrinking)	{		this->si = si;		Solver::Solve(l,Q,b,y,alpha,Cp,Cn,eps,si,shrinking);	}private:	SolutionInfo *si;	int select_working_set(int &i, int &j);	double calculate_rho();	void do_shrinking();};int Solver_NU::select_working_set(int &out_i, int &out_j){	// return i,j which maximize -grad(f)^T d , under constraint	// if alpha_i == C, d != +1	// if alpha_i == 0, d != -1	double Gmax1 = -INF;	// max { -grad(f)_i * d | y_i = +1, d = +1 }	int Gmax1_idx = -1;	double Gmax2 = -INF;	// max { -grad(f)_i * d | y_i = +1, d = -1 }	int Gmax2_idx = -1;	double Gmax3 = -INF;	// max { -grad(f)_i * d | y_i = -1, d = +1 }	int Gmax3_idx = -1;	double Gmax4 = -INF;	// max { -grad(f)_i * d | y_i = -1, d = -1 }	int Gmax4_idx = -1;	for(int i=0;i<active_size;i++)	{		if(y[i]==+1)	// y == +1		{			if(!is_upper_bound(i))	// d = +1			{				if(-G[i] > Gmax1)				{					Gmax1 = -G[i];					Gmax1_idx = i;				}			}			if(!is_lower_bound(i))	// d = -1			{				if(G[i] > Gmax2)				{					Gmax2 = G[i];					Gmax2_idx = i;				}			}		}		else		// y == -1		{			if(!is_upper_bound(i))	// d = +1			{				if(-G[i] > Gmax3)				{					Gmax3 = -G[i];					Gmax3_idx = i;				}			}			if(!is_lower_bound(i))	// d = -1			{				if(G[i] > Gmax4)				{					Gmax4 = G[i];					Gmax4_idx = i;				}			}		}	}	if(max(Gmax1+Gmax2,Gmax3+Gmax4) < eps) 		return 1;	if(Gmax1+Gmax2 > Gmax3+Gmax4)	{		out_i = Gmax1_idx;		out_j = Gmax2_idx;	}	else	{		out_i = Gmax3_idx;		out_j = Gmax4_idx;	}	return 0;}void Solver_NU::do_shrinking(){	double Gmax1 = -INF;	// max { -grad(f)_i * d | y_i = +1, d = +1 }	double Gmax2 = -INF;	// max { -grad(f)_i * d | y_i = +1, d = -1 }	double Gmax3 = -INF;	// max { -grad(f)_i * d | y_i = -1, d = +1 }	double Gmax4 = -INF;	// max { -grad(f)_i * d | y_i = -1, d = -1 }	int k;	for(k=0;k<active_size;k++)	{		if(!is_upper_bound(k))		{			if(y[k]==+1)			{				if(-G[k] > Gmax1) Gmax1 = -G[k];			}			else	if(-G[k] > Gmax3) Gmax3 = -G[k];		}		if(!is_lower_bound(k))		{			if(y[k]==+1)			{					if(G[k] > Gmax2) Gmax2 = G[k];			}			else	if(G[k] > Gmax4) Gmax4 = G[k];		}	}	double Gm1 = -Gmax2;	double Gm2 = -Gmax1;	double Gm3 = -Gmax4;	double Gm4 = -Gmax3;	for(k=0;k<active_size;k++)	{		if(is_lower_bound(k))		{			if(y[k]==+1)			{				if(-G[k] >= Gm1) continue;			}			else	if(-G[k] >= Gm3) continue;		}		else if(is_upper_bound(k))		{			if(y[k]==+1)			{				if(G[k] >= Gm2) continue;			}			else	if(G[k] >= Gm4) continue;		}		else continue;		--active_size;		swap_index(k,active_size);		--k;	// look at the newcomer	}	// unshrink, check all variables again before final iterations	if(unshrinked || max(-(Gm1+Gm2),-(Gm3+Gm4)) > eps*10) return;		unshrinked = true;	reconstruct_gradient();	for(k=l-1;k>=active_size;k--)	{		if(is_lower_bound(k))		{			if(y[k]==+1)			{				if(-G[k] < Gm1) continue;			}			else	if(-G[k] < Gm3) continue;		}		else if(is_upper_bound(k))		{			if(y[k]==+1)			{				if(G[k] < Gm2) continue;			}			else	if(G[k] < Gm4) continue;		}		else continue;		swap_index(k,active_size);		active_size++;		++k;	// look at the newcomer	}}double Solver_NU::calculate_rho(){	int nr_free1 = 0,nr_free2 = 0;	double ub1 = INF, ub2 = INF;	double lb1 = -INF, lb2 = -INF;	double sum_free1 = 0, sum_free2 = 0;	for(int i=0;i<active_size;i++)	{		if(y[i]==+1)		{			if(is_lower_bound(i))				ub1 = min(ub1,G[i]);			else if(is_upper_bound(i))				lb1 = max(lb1,G[i]);			else			{				++nr_free1;				sum_free1 += G[i];			}		}		else		{			if(is_lower_bound(i))				ub2 = min(ub2,G[i]);			else if(is_upper_bound(i))				lb2 = max(lb2,G[i]);			else			{				++nr_free2;				sum_free2 += G[i];			}		}	}	double r1,r2;	if(nr_free1 > 0)		r1 = sum_free1/nr_free1;	else		r1 = (ub1+lb1)/2;		if(nr_free2 > 0)		r2 = sum_free2/nr_free2;	else		r2 = (ub2+lb2)/2;		si->r = (r1+r2)/2;	return (r1-r2)/2;}//// Q matrices for various formulations//class SVC_Q: public Kernel{ public:	SVC_Q(const svm_problem& prob, const svm_parameter& param, const schar *y_)	:Kernel(prob.l, prob.x, param)	{		clone(y,y_,prob.l);		cache = new Cache(prob.l,(int)(param.cache_size*(1<<20)));	}		Qfloat *get_Q(int i, int len) const	{		Qfloat *data;		int start;		if((start = cache->get_data(i,&data,len)) < len)		{			for(int j=start;j<len;j++)				data[j] = (Qfloat)(y[i]*y[j]*(this->*kernel_function)(i,j));		}		return data;	}	void swap_index(int i, int j) const	{		cache->swap_index(i,j);		Kernel::swap_index(i,j);		swap(y[i],y[j]);	}	~SVC_Q()	{		delete[] y;		delete cache;	}private:	schar *y;	Cache *cache;};class ONE_CLASS_Q: public Kernel{public:	ONE_CLASS_Q(const svm_problem& prob, const svm_parameter& param)	:Kernel(prob.l, prob.x, param)	{		cache = new Cache(prob.l,(int)(param.cache_size*(1<<20)));	}		Qfloat *get_Q(int i, int len) const	{		Qfloat *data;		int start;		if((start = cache->get_data(i,&data,len)) < len)		{			for(int j=start;j<len;j++)				data[j] = (Qfloat)(this->*kernel_function)(i,j);		}		return data;	}	void swap_index(int i, int j) const	{		cache->swap_index(i,j);		Kernel::swap_index(i,j);	}	~ONE_CLASS_Q()	{		delete cache;	}private:	Cache *cache;};class SVR_Q: public Kernel{ public:	SVR_Q(const svm_problem& prob, const svm_parameter& param)	:Kernel(prob.l, prob.x, param)	{		l = prob.l;		cache = new Cache(l,(int)(param.cache_size*(1<<20)));		sign = new schar[2*l];		index = new int[2*l];		for(int k=0;k<l;k++)		{			sign[k] = 1;			sign[k+l] = -1;			index[k] = k;			index[k+l] = k;		}		buffer[0] = new Qfloat[2*l];		buffer[1] = new Qfloat[2*l];		next_buffer = 0;	}	void swap_index(int i, int j) const	{		swap(sign[i],sign[j]);		swap(index[i],index[j]);	}		Qfloat *get_Q(int i, int len) const	{		Qfloat *data;		int real_i = index[i];		if(cache->get_data(real_i,&data,l) < l)		{			for(int j=0;j<l;j++)				data[j] = (Qfloat)(this->*kernel_function)(real_i,j);		}		// reorder and copy		Qfloat *buf = buffer[next_buffer];		next_buffer = 1 - next_buffer;		schar si = sign[i];		for(int j=0;j<len;j++)			buf[j] = si * sign[j] * data[index[j]];		return buf;	}	~SVR_Q()	{		delete cache;		delete[] sign;		delete[] index;		delete[] buffer[0];		delete[] buffer[1];	}private:	int l;	Cache *cache;	schar *sign;	int *index;	mutable int next_buffer;	Qfloat* buffer[2];};//// construct and solve various formulations//static void solve_c_svc(	const svm_problem *prob, const svm_parameter* param,	double *alpha, Solver::SolutionInfo* si, double Cp, double Cn){	int l = prob->l;	double *minus_ones = new double[l];	schar *y = new schar[l];	int i;	for(i=0;i<l;i++)	{		alpha[i] = 0;		minus_ones[i] = -1;		if(prob->y[i] > 0) y[i] = +1; else y[i]=-1;	}	Solver s;	s.Solve(l, SVC_Q(*prob,*param,y), minus_ones, y,		alpha, Cp, Cn, param->eps, si, param->shrinking);	double sum_alpha=0;	for(i=0;i<l;i++)		sum_alpha += alpha[i];	if (Cp==Cn)		info("nu = %f\n", sum_alpha/(Cp*prob->l));	for(i=0;i<l;i++)		alpha[i] *= y[i];	delete[] minus_ones;	delete[] y;}static void solve_nu_svc(	const svm_problem *prob, const svm_parameter *param,	double *alpha, Solver::SolutionInfo* si){	int i;	int l = prob->l;	double nu = param->nu;	schar *y = new schar[l];	for(i=0;i<l;i++)		if(prob->y[i]>0)			y[i] = +1;		else			y[i] = -1;	double sum_pos = nu*l/2;	double sum_neg = nu*l/2;	for(i=0;i<l;i++)		if(y[i] == +1)		{			alpha[i] = min(1.0,sum_pos);			sum_pos -= alpha[i];		}		else		{			alpha[i] = min(1.0,sum_neg);			sum_neg -= alpha[i];		}	double *zeros = new double[l];	for(i=0;i<l;i++)		zeros[i] = 0;	Solver_NU s;	s.Solve(l, SVC_Q(*prob,*param,y), zeros, y,		alpha, 1.0, 1.0, param->eps, si,  param->shrinking);	double r = si->r;	info("C = %f\n",1/r);	for(i=0;i<l;i++)		alpha[i] *= y[i]/r;	si->rho /= r;	si->obj /= (r*r);	si->upper_bound_p = 1/r;	si->upper_bound_n = 1/r;	delete[] y;	delete[] zeros;}static void solve_one_class(	const svm_problem *prob, const svm_parameter *param,	double *alpha, Solver::SolutionInfo* si){	int l = prob->l;	double *zeros = new double[l];	schar *ones = new schar[l];	int i;	int n = (int)(param->nu*prob->l);	// # of alpha's at upper bound	for(i=0;i<n;i++)		alpha[i] = 1;	alpha[n] = param->nu * prob->l - n;	for(i=n+1;i<l;i++)		alpha[i] = 0;	for(i=0;i<l;i++)	{		zeros[i] = 0;		ones[i] = 1;	}	Solver s;	s.Solve(l, ONE_CLASS_Q(*prob,*param), zeros, ones,		alpha, 1.0, 1.0, param->eps, si, param->shrinking);	delete[] zeros;	delete[] ones;}static void solve_epsilon_svr(	const svm_problem *prob, const svm_parameter *param,	double *alpha, Solver::SolutionInfo* si){	int l = prob->l;	double *alpha2 = new double[2*l];	double *linear_term = new double[2*l];	schar *y = new schar[2*l];	int i;	for(i=0;i<l;i++)	{		alpha2[i] = 0;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文无字幕一区二区三区| 欧美视频中文字幕| 在线亚洲高清视频| 91精品国产日韩91久久久久久| 精品国产精品网麻豆系列| 国产精品久线观看视频| 视频在线观看一区二区三区| 激情亚洲综合在线| 91网站最新地址| 日韩免费观看高清完整版 | 免费一区二区视频| 成人一区二区三区| 欧美日韩久久久| 欧美国产综合一区二区| 亚洲一区二区不卡免费| 国产一区在线观看视频| 在线亚洲高清视频| 国产亚洲视频系列| 五月天亚洲婷婷| 波波电影院一区二区三区| 6080日韩午夜伦伦午夜伦| 国产精品日韩精品欧美在线| 日韩高清在线不卡| 99这里都是精品| 精品美女在线观看| 亚洲国产精品久久一线不卡| 国产成人h网站| 日韩女优视频免费观看| 亚洲三级在线免费| 国产一区二区伦理| 欧美一区二区私人影院日本| 亚洲色图在线视频| 国产成a人亚洲| 日韩精品一区二区三区四区| 亚洲一区精品在线| 97久久超碰国产精品| 久久久久久久久伊人| 全国精品久久少妇| 欧美三片在线视频观看| 亚洲色图欧洲色图婷婷| 国产激情一区二区三区桃花岛亚洲| 欧美日韩性生活| 亚洲欧美日韩国产综合在线| 国产成人av一区二区三区在线| 欧美一区二区精品久久911| 亚洲一二三四区| 色婷婷久久一区二区三区麻豆| 中文字幕免费观看一区| 国产精品自拍在线| 精品国产一区二区三区av性色| 日韩国产精品久久| 欧美图区在线视频| 一区二区三区四区av| 99久久精品一区| 国产精品久久久久7777按摩| 国产精品 欧美精品| 久久久国际精品| 国产精品一级在线| 久久久国产午夜精品| 国产自产视频一区二区三区| 精品国产伦理网| 六月婷婷色综合| 日韩色在线观看| 免费成人美女在线观看| 日韩免费一区二区| 久久成人18免费观看| 精品国产一区二区在线观看| 激情图片小说一区| 国产欧美一区二区三区在线看蜜臀| 国产乱码精品一区二区三区忘忧草 | 国产女同性恋一区二区| 国产成人午夜高潮毛片| 国产三区在线成人av| 国产sm精品调教视频网站| 国产精品美女久久久久aⅴ| 成人国产精品免费观看动漫| 中文字幕日韩一区| 一本大道久久精品懂色aⅴ| 亚洲自拍偷拍麻豆| 欧美一区二区在线播放| 麻豆精品蜜桃视频网站| 精品国产免费久久| 国产精品18久久久| 亚洲欧洲av色图| 色天天综合久久久久综合片| 性做久久久久久久久| 日韩色视频在线观看| 国内久久婷婷综合| 亚洲国产精品成人综合| 一本大道久久a久久综合婷婷| 亚洲香肠在线观看| 日韩欧美国产一二三区| 国产成人免费视| 一区二区三区日本| 91精品欧美一区二区三区综合在| 久久av资源网| 国产精品毛片久久久久久久| 日本电影亚洲天堂一区| 日韩高清在线一区| 国产人伦精品一区二区| 91视频在线观看| 日韩—二三区免费观看av| 欧美精品一区二区三区蜜臀 | 亚洲精品视频在线观看网站| 欧美日韩精品免费| 国产一区二区三区最好精华液 | 欧美视频一区二| 久久成人免费网| 18涩涩午夜精品.www| 4438x成人网最大色成网站| 国产一区二区在线观看免费| 亚洲三级免费观看| 精品人在线二区三区| 91在线视频网址| 久久疯狂做爰流白浆xx| 亚洲三级久久久| 日韩美女主播在线视频一区二区三区| 成人综合在线观看| 日韩不卡一二三区| 国产精品丝袜在线| 欧美一级欧美一级在线播放| 丁香激情综合五月| 天堂va蜜桃一区二区三区| 国产欧美精品区一区二区三区| 欧美羞羞免费网站| 高清在线不卡av| 日韩电影免费一区| 亚洲欧美日韩人成在线播放| 精品久久人人做人人爽| 欧美网站一区二区| 成人一区二区三区| 久久精品国产**网站演员| 亚洲三级小视频| 国产午夜精品一区二区| 欧美精品久久99久久在免费线| 粉嫩欧美一区二区三区高清影视 | 精品成人免费观看| 欧美区一区二区三区| 成人免费精品视频| 国内久久精品视频| 日韩国产精品91| 夜夜亚洲天天久久| 国产精品激情偷乱一区二区∴| 日韩免费观看高清完整版| 欧美午夜不卡视频| 91免费看`日韩一区二区| 国产一区二区网址| 蜜桃视频在线一区| 婷婷久久综合九色国产成人| 亚洲女人小视频在线观看| 国产欧美视频在线观看| 精品处破学生在线二十三| 91.com在线观看| 欧美日韩另类国产亚洲欧美一级| 91美女视频网站| 成人av综合一区| 国产精品18久久久| 国内精品久久久久影院色| 蜜桃视频一区二区三区 | 精品美女在线观看| 91精品国模一区二区三区| 欧美日韩一区二区欧美激情| 91免费观看视频在线| 成人黄色小视频在线观看| 国产综合久久久久久鬼色| 精品伊人久久久久7777人| 日韩精品免费视频人成| 亚洲国产精品嫩草影院| 亚洲一区在线观看视频| 伊人性伊人情综合网| 亚洲日本中文字幕区| 日韩毛片视频在线看| 亚洲欧美福利一区二区| 亚洲丝袜另类动漫二区| 国产精品久久99| 国产精品盗摄一区二区三区| 中文字幕制服丝袜一区二区三区| 国产精品水嫩水嫩| 国产精品久久久久久亚洲伦| 国产精品国产自产拍高清av王其| 国产精品欧美极品| 亚洲欧洲99久久| 亚洲裸体xxx| 亚洲国产精品人人做人人爽| 亚洲va天堂va国产va久| 日韩电影免费一区| 激情另类小说区图片区视频区| 国产综合久久久久久鬼色| 国产大陆a不卡| 成人免费福利片| 色系网站成人免费| 欧美视频一区二区三区四区| 91精品久久久久久久99蜜桃| 日韩视频一区二区三区| 久久精品欧美日韩| 国产精品国产自产拍高清av王其| 亚洲精品国产无套在线观| 视频在线观看91| 激情都市一区二区| 99久久免费精品|