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

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

?? svm.m4

?? Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression. It s
?? M4
?? 第 1 頁 / 共 4 頁
字號:
define(`swap',`do {$1 _=$2; $2=$3; $3=_;} while(false)')define(`Qfloat',`float')define(`SIZE_OF_QFLOAT',4)define(`TAU',1e-12)package libsvm;import java.io.*;import java.util.*;//// Kernel Cache//// l is the number of total data items// size is the cache size limit in bytes//class Cache {	private final int l;	private long size;	private final class head_t	{		head_t prev, next;	// a cicular list		Qfloat[] data;		int len;		// data[0,len) is cached in this entry	}	private final head_t[] head;	private head_t lru_head;	Cache(int l_, long size_)	{		l = l_;		size = size_;		head = new head_t[l];		for(int i=0;i<l;i++) head[i] = new head_t();		size /= SIZE_OF_QFLOAT;		size -= l * (16/SIZE_OF_QFLOAT);	// sizeof(head_t) == 16		size = Math.max(size, 2* (long) l);  // cache must be large enough for two columns		lru_head = new head_t();		lru_head.next = lru_head.prev = lru_head;	}	private void lru_delete(head_t h)	{		// delete from current location		h.prev.next = h.next;		h.next.prev = h.prev;	}	private void lru_insert(head_t h)	{		// insert to last position		h.next = lru_head;		h.prev = lru_head.prev;		h.prev.next = h;		h.next.prev = h;	}	// request data [0,len)	// return some position p where [p,len) need to be filled	// (p >= len if nothing needs to be filled)	// java: simulate pointer using single-element array	int get_data(int index, Qfloat[][] data, int len)	{		head_t h = head[index];		if(h.len > 0) lru_delete(h);		int more = len - h.len;		if(more > 0)		{			// free old space			while(size < more)			{				head_t old = lru_head.next;				lru_delete(old);				size += old.len;				old.data = null;				old.len = 0;			}			// allocate new space			Qfloat[] new_data = new Qfloat[len];			if(h.data != null) System.arraycopy(h.data,0,new_data,0,h.len);			h.data = new_data;			size -= more;			swap(int,h.len,len);		}		lru_insert(h);		data[0] = h.data;		return len;	}	void swap_index(int i, int j)	{		if(i==j) return;				if(head[i].len > 0) lru_delete(head[i]);		if(head[j].len > 0) lru_delete(head[j]);		swap(Qfloat[],head[i].data,head[j].data);		swap(int,head[i].len,head[j].len);		if(head[i].len > 0) lru_insert(head[i]);		if(head[j].len > 0) lru_insert(head[j]);		if(i>j) swap(int,i,j);		for(head_t h = lru_head.next; h!=lru_head; h=h.next)		{			if(h.len > i)			{				if(h.len > j)					swap(Qfloat,h.data[i],h.data[j]);				else				{					// give up					lru_delete(h);					size += h.len;					h.data = null;					h.len = 0;				}			}		}	}}//// Kernel evaluation//// the static method k_function is for doing single kernel evaluation// the constructor of Kernel prepares to calculate the l*l kernel matrix// the member function get_Q is for getting one column from the Q Matrix//abstract class QMatrix {	abstract Qfloat[] get_Q(int column, int len);	abstract Qfloat[] get_QD();	abstract void swap_index(int i, int j);};abstract class Kernel extends QMatrix {	private svm_node[][] x;	private final double[] x_square;	// svm_parameter	private final int kernel_type;	private final int degree;	private final double gamma;	private final double coef0;	abstract Qfloat[] get_Q(int column, int len);	abstract Qfloat[] get_QD();	void swap_index(int i, int j)	{		swap(svm_node[],x[i],x[j]);		if(x_square != null) swap(double,x_square[i],x_square[j]);	}	private static double powi(double base, int times)	{	        double tmp = base, ret = 1.0;        	for(int t=times; t>0; t/=2)		{                	if(t%2==1) ret*=tmp;	                tmp = tmp * tmp;        	}	        return ret;	}	double kernel_function(int i, int j)	{		switch(kernel_type)		{			case svm_parameter.LINEAR:				return dot(x[i],x[j]);			case svm_parameter.POLY:				return powi(gamma*dot(x[i],x[j])+coef0,degree);			case svm_parameter.RBF:				return Math.exp(-gamma*(x_square[i]+x_square[j]-2*dot(x[i],x[j])));			case svm_parameter.SIGMOID:				return Math.tanh(gamma*dot(x[i],x[j])+coef0);			case svm_parameter.PRECOMPUTED:				return x[i][(int)(x[j][0].value)].value;			default:				return 0;	// java		}	}	Kernel(int l, svm_node[][] x_, svm_parameter param)	{		this.kernel_type = param.kernel_type;		this.degree = param.degree;		this.gamma = param.gamma;		this.coef0 = param.coef0;		x = (svm_node[][])x_.clone();		if(kernel_type == svm_parameter.RBF)		{			x_square = new double[l];			for(int i=0;i<l;i++)				x_square[i] = dot(x[i],x[i]);		}		else x_square = null;	}	static double dot(svm_node[] x, svm_node[] y)	{		double sum = 0;		int xlen = x.length;		int ylen = y.length;		int i = 0;		int j = 0;		while(i < xlen && j < ylen)		{			if(x[i].index == y[j].index)				sum += x[i++].value * y[j++].value;			else			{				if(x[i].index > y[j].index)					++j;				else					++i;			}		}		return sum;	}	static double k_function(svm_node[] x, svm_node[] y,					svm_parameter param)	{		switch(param.kernel_type)		{			case svm_parameter.LINEAR:				return dot(x,y);			case svm_parameter.POLY:				return powi(param.gamma*dot(x,y)+param.coef0,param.degree);			case svm_parameter.RBF:			{				double sum = 0;				int xlen = x.length;				int ylen = y.length;				int i = 0;				int j = 0;				while(i < xlen && j < ylen)				{					if(x[i].index == y[j].index)					{						double d = x[i++].value - y[j++].value;						sum += d*d;					}					else if(x[i].index > y[j].index)					{						sum += y[j].value * y[j].value;						++j;					}					else					{						sum += x[i].value * x[i].value;						++i;					}				}				while(i < xlen)				{					sum += x[i].value * x[i].value;					++i;				}				while(j < ylen)				{					sum += y[j].value * y[j].value;					++j;				}				return Math.exp(-param.gamma*sum);			}			case svm_parameter.SIGMOID:				return Math.tanh(param.gamma*dot(x,y)+param.coef0);			case svm_parameter.PRECOMPUTED:				return 	x[(int)(y[0].value)].value;			default:				return 0;	// java		}	}}// An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918// Solves:////	min 0.5(\alpha^T Q \alpha) + p^T \alpha////		y^T \alpha = \delta//		y_i = +1 or -1//		0 <= alpha_i <= Cp for y_i = 1//		0 <= alpha_i <= Cn for y_i = -1//// Given:////	Q, p, y, Cp, Cn, and an initial feasible point \alpha//	l is the size of vectors and matrices//	eps is the stopping tolerance//// solution will be put in \alpha, objective value will be put in obj//class Solver {	int active_size;	byte[] y;	double[] G;		// gradient of objective function	static final byte LOWER_BOUND = 0;	static final byte UPPER_BOUND = 1;	static final byte FREE = 2;	byte[] alpha_status;	// LOWER_BOUND, UPPER_BOUND, FREE	double[] alpha;	QMatrix Q;	Qfloat[] QD;	double eps;	double Cp,Cn;	double[] p;	int[] active_set;	double[] G_bar;		// gradient, if we treat free variables as 0	int l;	boolean unshrinked;	// XXX		static final double INF = java.lang.Double.POSITIVE_INFINITY;	double get_C(int i)	{		return (y[i] > 0)? Cp : Cn;	}	void update_alpha_status(int i)	{		if(alpha[i] >= get_C(i))			alpha_status[i] = UPPER_BOUND;		else if(alpha[i] <= 0)			alpha_status[i] = LOWER_BOUND;		else alpha_status[i] = FREE;	}	boolean is_upper_bound(int i) { return alpha_status[i] == UPPER_BOUND; }	boolean is_lower_bound(int i) { return alpha_status[i] == LOWER_BOUND; }	boolean is_free(int i) {  return alpha_status[i] == FREE; }	// java: information about solution except alpha,	// because we cannot return multiple values otherwise...	static class SolutionInfo {		double obj;		double rho;		double upper_bound_p;		double upper_bound_n;		double r;	// for Solver_NU	}	void swap_index(int i, int j)	{		Q.swap_index(i,j);		swap(byte,	y[i],y[j]);		swap(double,	G[i],G[j]);		swap(byte,	alpha_status[i],alpha_status[j]);		swap(double,	alpha[i],alpha[j]);		swap(double,	p[i],p[j]);		swap(int,	active_set[i],active_set[j]);		swap(double,	G_bar[i],G_bar[j]);	}	void reconstruct_gradient()	{		// reconstruct inactive elements of G from G_bar and free variables		if(active_size == l) return;		int i;		for(i=active_size;i<l;i++)			G[i] = G_bar[i] + p[i];		for(i=0;i<active_size;i++)			if(is_free(i))			{				Qfloat[] Q_i = Q.get_Q(i,l);				double alpha_i = alpha[i];				for(int j=active_size;j<l;j++)					G[j] += alpha_i * Q_i[j];			}	}	void Solve(int l, QMatrix Q, double[] p_, byte[] y_,		   double[] alpha_, double Cp, double Cn, double eps, SolutionInfo si, int shrinking)	{		this.l = l;		this.Q = Q;		QD = Q.get_QD();		p = (double[])p_.clone();		y = (byte[])y_.clone();		alpha = (double[])alpha_.clone();		this.Cp = Cp;		this.Cn = Cn;		this.eps = eps;		this.unshrinked = false;		// initialize alpha_status		{			alpha_status = new byte[l];			for(int i=0;i<l;i++)				update_alpha_status(i);		}		// initialize active set (for shrinking)		{			active_set = new int[l];			for(int i=0;i<l;i++)				active_set[i] = i;			active_size = l;		}		// initialize gradient		{			G = new double[l];			G_bar = new double[l];			int i;			for(i=0;i<l;i++)			{				G[i] = p[i];				G_bar[i] = 0;			}			for(i=0;i<l;i++)				if(!is_lower_bound(i))				{					Qfloat[] Q_i = Q.get_Q(i,l);					double alpha_i = alpha[i];					int j;					for(j=0;j<l;j++)						G[j] += alpha_i*Q_i[j];					if(is_upper_bound(i))						for(j=0;j<l;j++)							G_bar[j] += get_C(i) * Q_i[j];				}		}		// optimization step		int iter = 0;		int counter = Math.min(l,1000)+1;		int[] working_set = new int[2];		while(true)		{			// show progress and do shrinking			if(--counter == 0)			{				counter = Math.min(l,1000);				if(shrinking!=0) do_shrinking();				System.err.print(".");			}			if(select_working_set(working_set)!=0)			{				// reconstruct the whole gradient				reconstruct_gradient();				// reset active set size and check				active_size = l;				System.err.print("*");				if(select_working_set(working_set)!=0)					break;				else					counter = 1;	// do shrinking next iteration			}						int i = working_set[0];			int j = working_set[1];			++iter;			// update alpha[i] and alpha[j], handle bounds carefully			Qfloat[] Q_i = Q.get_Q(i,active_size);			Qfloat[] Q_j = Q.get_Q(j,active_size);			double C_i = get_C(i);			double C_j = get_C(j);			double old_alpha_i = alpha[i];			double old_alpha_j = alpha[j];			if(y[i]!=y[j])			{				double quad_coef = Q_i[i]+Q_j[j]+2*Q_i[j];				if (quad_coef <= 0)					quad_coef = TAU;				double delta = (-G[i]-G[j])/quad_coef;				double diff = alpha[i] - alpha[j];				alpha[i] += delta;				alpha[j] += delta;							if(diff > 0)				{					if(alpha[j] < 0)					{						alpha[j] = 0;						alpha[i] = diff;					}				}				else				{					if(alpha[i] < 0)					{						alpha[i] = 0;						alpha[j] = -diff;					}				}				if(diff > C_i - C_j)				{					if(alpha[i] > C_i)					{						alpha[i] = C_i;						alpha[j] = C_i - diff;					}				}				else				{					if(alpha[j] > C_j)					{						alpha[j] = C_j;						alpha[i] = C_j + diff;					}				}			}			else			{				double quad_coef = Q_i[i]+Q_j[j]-2*Q_i[j];				if (quad_coef <= 0)					quad_coef = TAU;				double delta = (G[i]-G[j])/quad_coef;				double sum = alpha[i] + alpha[j];				alpha[i] -= delta;				alpha[j] += delta;				if(sum > C_i)				{					if(alpha[i] > C_i)					{						alpha[i] = C_i;						alpha[j] = sum - C_i;					}				}				else				{					if(alpha[j] < 0)					{						alpha[j] = 0;						alpha[i] = sum;					}				}				if(sum > C_j)				{					if(alpha[j] > C_j)					{						alpha[j] = C_j;						alpha[i] = sum - C_j;					}				}				else				{					if(alpha[i] < 0)					{						alpha[i] = 0;						alpha[j] = sum;					}				}			}			// 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<active_size;k++)			{				G[k] += Q_i[k]*delta_alpha_i + Q_j[k]*delta_alpha_j;			}			// update alpha_status and G_bar			{				boolean ui = is_upper_bound(i);				boolean uj = is_upper_bound(j);				update_alpha_status(i);				update_alpha_status(j);				int k;				if(ui != is_upper_bound(i))				{					Q_i = Q.get_Q(i,l);					if(ui)						for(k=0;k<l;k++)							G_bar[k] -= C_i * Q_i[k];					else						for(k=0;k<l;k++)							G_bar[k] += C_i * Q_i[k];				}				if(uj != is_upper_bound(j))				{					Q_j = Q.get_Q(j,l);					if(uj)						for(k=0;k<l;k++)							G_bar[k] -= C_j * Q_j[k];					else						for(k=0;k<l;k++)							G_bar[k] += C_j * Q_j[k];				}			}		}		// calculate rho		si.rho = calculate_rho();		// calculate objective value		{			double v = 0;			int i;			for(i=0;i<l;i++)				v += alpha[i] * (G[i] + p[i]);			si.obj = v/2;		}		// put back the solution		{			for(int i=0;i<l;i++)				alpha_[active_set[i]] = alpha[i];		}		si.upper_bound_p = Cp;		si.upper_bound_n = Cn;		System.out.print("\noptimization finished, #iter = "+iter+"\n");	}	// return 1 if already optimal, return 0 otherwise	int select_working_set(int[] working_set)	{		// return i,j such that		// i: maximizes -y_i * grad(f)_i, i in I_up(\alpha)		// j: mimimizes the decrease of obj value		//    (if quadratic coefficeint <= 0, replace it with tau)		//    -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\alpha)				double Gmax = -INF;		double Gmax2 = -INF;		int Gmax_idx = -1;		int Gmin_idx = -1;		double obj_diff_min = INF;			for(int t=0;t<active_size;t++)			if(y[t]==+1)				{				if(!is_upper_bound(t))					if(-G[t] >= Gmax)					{						Gmax = -G[t];						Gmax_idx = t;					}			}			else			{				if(!is_lower_bound(t))					if(G[t] >= Gmax)					{						Gmax = G[t];						Gmax_idx = t;					}			}			int i = Gmax_idx;		Qfloat[] Q_i = null;		if(i != -1) // null Q_i not accessed: Gmax=-INF if i=-1			Q_i = Q.get_Q(i,active_size);			for(int j=0;j<active_size;j++)		{			if(y[j]==+1)			{				if (!is_lower_bound(j))				{					double grad_diff=Gmax+G[j];					if (G[j] >= Gmax2)						Gmax2 = G[j];					if (grad_diff > 0)					{						double obj_diff; 						double quad_coef=Q_i[i]+QD[j]-2*y[i]*Q_i[j];						if (quad_coef > 0)							obj_diff = -(grad_diff*grad_diff)/quad_coef;						else

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷综合另类小说色区| 日韩一区二区麻豆国产| 国产欧美日本一区视频| 久久精品噜噜噜成人av农村| 欧美日韩国产首页| 亚洲va欧美va人人爽| 成人丝袜18视频在线观看| 精品国产制服丝袜高跟| 美女国产一区二区三区| 欧美一区二区三区在| 婷婷久久综合九色综合绿巨人| 91社区在线播放| 亚洲欧美一区二区三区极速播放| 久久综合色之久久综合| 精品一区二区三区不卡| 26uuu国产一区二区三区| 日本aⅴ精品一区二区三区| 91精品国产91热久久久做人人| 日韩黄色片在线观看| 91精品欧美一区二区三区综合在| 亚洲一区二区偷拍精品| 欧美精品18+| 日韩不卡在线观看日韩不卡视频| 欧美精品vⅰdeose4hd| 人人精品人人爱| 在线成人小视频| 日本不卡免费在线视频| 精品久久久久久久久久久久久久久久久 | 精品99一区二区三区| 高清国产一区二区三区| 国产精品不卡在线| 一本色道**综合亚洲精品蜜桃冫| 国产精品理论片在线观看| 91亚洲国产成人精品一区二区三| 一区二区三区中文字幕电影| 3d动漫精品啪啪一区二区竹菊| 蜜臀91精品一区二区三区| 久久精品亚洲乱码伦伦中文| www.爱久久.com| 亚洲精品国产视频| 日韩一区二区三区精品视频 | 色婷婷精品久久二区二区蜜臂av| 亚洲女厕所小便bbb| 欧美日韩激情在线| 国产综合色在线| 亚洲欧美色一区| 91精品国产美女浴室洗澡无遮挡| 六月丁香婷婷久久| 亚洲视频一区二区在线| 911精品产国品一二三产区| 美腿丝袜亚洲一区| 中文字幕在线不卡视频| 日韩一区二区麻豆国产| www.爱久久.com| 免费成人av资源网| 亚洲视频在线一区观看| 欧美成人官网二区| 91官网在线观看| 久久99精品久久久久婷婷| 中文字幕一区二区三区视频| 在线亚洲免费视频| 久久er精品视频| 亚洲一二三四区不卡| 久久久久久久久蜜桃| 欧美日韩三级在线| 99久久国产综合精品女不卡| 青草av.久久免费一区| 亚洲少妇中出一区| 久久综合九色综合久久久精品综合| 99精品视频一区| 日韩不卡免费视频| 一区二区三区丝袜| 国产精品久久久久影院亚瑟| 日韩一区二区视频| 日本韩国一区二区| 懂色av中文一区二区三区| 日韩va欧美va亚洲va久久| 1024国产精品| 国产丝袜在线精品| 日韩欧美一区二区在线视频| 欧美日韩欧美一区二区| 97精品久久久午夜一区二区三区| 久久综合综合久久综合| 视频一区在线播放| 亚洲国产一二三| 亚洲国产日韩在线一区模特| 亚洲大片精品永久免费| 日韩精品亚洲专区| 精品系列免费在线观看| 国产精品一区免费视频| 国产精品1024| 99久久精品国产一区| 色噜噜狠狠一区二区三区果冻| 欧美在线一二三| 日韩亚洲欧美高清| 久久久精品人体av艺术| 亚洲欧洲韩国日本视频| 一区二区三区四区不卡在线| 日日夜夜免费精品| 国产又粗又猛又爽又黄91精品| 国产精品123| 日本电影亚洲天堂一区| 欧美日韩午夜影院| 久久综合色婷婷| 亚洲素人一区二区| 日日夜夜精品视频天天综合网| 蜜臀精品久久久久久蜜臀| 国产福利91精品一区| 色婷婷综合激情| 日韩欧美高清dvd碟片| 亚洲国产成人私人影院tom| 亚洲卡通动漫在线| 蜜桃av噜噜一区| eeuss影院一区二区三区| 欧美精品 国产精品| 久久天堂av综合合色蜜桃网| 丁香亚洲综合激情啪啪综合| 91老师片黄在线观看| 91.xcao| 国产精品久久久久影院亚瑟| 丝袜美腿成人在线| eeuss鲁片一区二区三区在线看| 欧美美女bb生活片| 国产精品美女久久久久aⅴ | 国产日韩欧美在线一区| 亚洲综合另类小说| 国产福利一区二区三区视频在线| 在线观看国产精品网站| 国产日韩欧美激情| 日本不卡一区二区三区| 99国产精品久久久久久久久久| 欧美一级精品大片| 亚洲欧美色一区| 久久99精品网久久| 欧美日韩视频第一区| 中文字幕不卡一区| 久久99国产乱子伦精品免费| av亚洲精华国产精华| 精品国产在天天线2019| 亚洲第一综合色| av毛片久久久久**hd| 精品国产乱码久久久久久1区2区| 亚洲最大色网站| 国产91综合一区在线观看| 91精品国产一区二区三区| 玉足女爽爽91| 99精品国产热久久91蜜凸| 久久网站热最新地址| 狂野欧美性猛交blacked| 精品视频123区在线观看| 国产精品久久久久久久久免费樱桃 | 中文字幕第一页久久| 狠狠色狠狠色综合系列| 91麻豆精品国产自产在线 | 国产一区二区三区免费| 555夜色666亚洲国产免| 亚洲尤物视频在线| 色狠狠色噜噜噜综合网| 中文字幕一区二区三区四区不卡| 国产成人小视频| 国产片一区二区三区| 韩国中文字幕2020精品| 精品国产乱码久久久久久夜甘婷婷 | 亚洲精品在线观看视频| 毛片av一区二区| 日韩欧美三级在线| 裸体健美xxxx欧美裸体表演| 制服丝袜亚洲网站| 奇米影视在线99精品| 欧美一区二区视频在线观看2020| 亚洲图片一区二区| 欧美另类z0zxhd电影| 亚洲r级在线视频| 欧美另类高清zo欧美| 婷婷丁香久久五月婷婷| 欧美日韩亚洲综合在线 | 亚洲人午夜精品天堂一二香蕉| 国产成人h网站| 国产精品国产自产拍高清av王其| 国产精品一级片| 中文字幕第一区| 91香蕉国产在线观看软件| 亚洲老妇xxxxxx| 欧美日韩免费高清一区色橹橹 | 亚洲一区二区三区免费视频| 最新日韩在线视频| 色噜噜狠狠色综合欧洲selulu| 亚洲一区中文日韩| 日韩一区二区电影在线| 激情都市一区二区| 国产精品视频线看| 91久久一区二区| 日韩成人免费电影| 久久久影院官网| 色综合久久久久综合体桃花网| 亚洲gay无套男同| 精品国产露脸精彩对白| 99免费精品视频| 视频一区欧美日韩| 国产欧美日韩不卡免费|