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

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

?? svm.java

?? 為了下東西 隨便發了個 datamining 的源代碼
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:



package com.prudsys.pdm.Models.Regression.SVM.Algorithms.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 int size;
	private final class head_t
	{
		head_t prev, next;	// a cicular list
		float[] data;
		int len;		// data[0,len) is cached in this entry
	}
	private final head_t[] head;
	private head_t lru_head;

	Cache(int l_, int size_)
	{
		l = l_;
		size = size_;
		head = new head_t[l];
		for(int i=0;i<l;i++) head[i] = new head_t();
		size /= 4;
		size -= l * (16/4);	// sizeof(head_t) == 16
		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, float[][] 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
			float[] new_data = new float[len];
			if(h.data != null) System.arraycopy(h.data,0,new_data,0,h.len);
			h.data = new_data;
			size -= more;
			do {int _=h.len; h.len=len; len=_;} while(false);
		}

		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]);
		do {float[] _=head[i].data; head[i].data=head[j].data; head[j].data=_;} while(false);
		do {int _=head[i].len; head[i].len=head[j].len; head[j].len=_;} while(false);
		if(head[i].len > 0) lru_insert(head[i]);
		if(head[j].len > 0) lru_insert(head[j]);

		if(i>j) do {int _=i; i=j; j=_;} while(false);
		for(head_t h = lru_head.next; h!=lru_head; h=h.next)
		{
			if(h.len > i)
			{
				if(h.len > j)
					do {float _=h.data[i]; h.data[i]=h.data[j]; h.data[j]=_;} while(false);
				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 Kernel {
	private svm_node[][] x;
	private final double[] x_square;

	// svm_parameter
	private final int kernel_type;
	private final double degree;
	private final double gamma;
	private final double coef0;

	abstract float[] get_Q(int column, int len);

	void swap_index(int i, int j)
	{
		do {svm_node[] _=x[i]; x[i]=x[j]; x[j]=_;} while(false);
		if(x_square != null) do {double _=x_square[i]; x_square[i]=x_square[j]; x_square[j]=_;} while(false);
	}

	private static double tanh(double x)
	{
		double e = Math.exp(x);
		return 1.0-2.0/(e*e+1);
	}

	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 Math.pow(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 tanh(gamma*dot(x[i],x[j])+coef0);
			default:
				System.err.print("unknown kernel function.\n");
				System.exit(1);
				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 Math.pow(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 tanh(param.gamma*dot(x,y)+param.coef0);
			default:
				System.err.print("unknown kernel function.\n");
				System.exit(1);
				return 0;	// java
		}
	}
}

// Generalized SMO+SVMlight algorithm
// Solves:
//
//	min 0.5(\alpha^T Q \alpha) + b^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, b, y, Cp, Cn, and an initial feasible point \alpha
//	l is the size of vectors and matrices
//	eps is the stopping criterion
//
// 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;
	Kernel Q;
	double eps;
	double Cp,Cn;
	double[] b;
	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);
		do {byte _=y[i]; y[i]=y[j]; y[j]=_;} while(false);
		do {double _=G[i]; G[i]=G[j]; G[j]=_;} while(false);
		do {byte _=alpha_status[i]; alpha_status[i]=alpha_status[j]; alpha_status[j]=_;} while(false);
		do {double _=alpha[i]; alpha[i]=alpha[j]; alpha[j]=_;} while(false);
		do {double _=b[i]; b[i]=b[j]; b[j]=_;} while(false);
		do {int _=active_set[i]; active_set[i]=active_set[j]; active_set[j]=_;} while(false);
		do {double _=G_bar[i]; G_bar[i]=G_bar[j]; G_bar[j]=_;} while(false);
	}

	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] + b[i];

		for(i=0;i<active_size;i++)
			if(is_free(i))
			{
				float[] 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, Kernel Q, double[] b_, byte[] y_,
		   double[] alpha_, double Cp, double Cn, double eps, SolutionInfo si, int shrinking)
	{
		this.l = l;
		this.Q = Q;
		b = (double[])b_.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] = b[i];
				G_bar[i] = 0;
			}
			for(i=0;i<l;i++)
				if(!is_lower_bound(i))
				{
					float[] 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

			float[] Q_i = Q.get_Q(i,active_size);
			float[] 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 delta = (-G[i]-G[j])/(Q_i[i]+Q_j[j]+2*Q_i[j]);
				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 delta = (G[i]-G[j])/(Q_i[i]+Q_j[j]-2*Q_i[j]);
				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] + b[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 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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人黄色一级视频| 亚洲大尺度视频在线观看| 欧美亚洲国产一区二区三区va| 蓝色福利精品导航| 日韩国产欧美三级| 免费的成人av| 蜜桃视频一区二区三区在线观看| 亚洲成人激情自拍| 一区二区三区精品在线观看| 成人欧美一区二区三区小说| 欧美xxxxx牲另类人与| 欧美日韩一区二区三区高清| 色美美综合视频| 色偷偷一区二区三区| 蜜臂av日日欢夜夜爽一区| 天使萌一区二区三区免费观看| 婷婷六月综合亚洲| 亚洲欧美自拍偷拍| 亚洲国产婷婷综合在线精品| 国产精品久久久久久久久动漫| 国产亚洲精品中文字幕| 亚洲欧洲美洲综合色网| 久久久99精品久久| 日韩美女一区二区三区| 久久综合狠狠综合| 中文字幕制服丝袜成人av| 亚洲欧洲精品一区二区三区| 亚洲一区二区偷拍精品| 美女看a上一区| 精品一区二区三区欧美| 成人高清免费在线播放| 久久精品一区八戒影视| 亚洲高清免费观看高清完整版在线观看| 日韩免费高清视频| kk眼镜猥琐国模调教系列一区二区 | 日韩视频免费直播| 欧美r级在线观看| 国产精品少妇自拍| 一区二区视频免费在线观看| 免费高清在线一区| 国产成a人无v码亚洲福利| 91视频国产观看| 7777精品伊人久久久大香线蕉完整版| 日韩一区二区不卡| 久久久久久久久99精品| 亚洲一二三四在线观看| 国产一区在线视频| 色哟哟一区二区三区| 欧美成人一区二区三区在线观看| 欧美精品一区在线观看| 伊人性伊人情综合网| 精品伊人久久久久7777人| 99精品热视频| 精品久久久久久久久久久久久久久久久| 6080yy午夜一二三区久久| 国产精品每日更新在线播放网址| 日产国产高清一区二区三区| 成人在线综合网站| 欧美电视剧在线观看完整版| 亚洲高清免费观看高清完整版在线观看| 久久99久久久久| 欧美日韩精品一区二区三区四区| 中文一区二区完整视频在线观看 | 丝袜亚洲另类欧美综合| 成人黄色在线视频| 欧美一区二区精品在线| 亚洲国产精品人人做人人爽| 成人av影视在线观看| 精品裸体舞一区二区三区| 亚洲成人资源网| 91一区一区三区| 国产亚洲婷婷免费| 久久91精品久久久久久秒播| 色噜噜狠狠色综合中国| 亚洲欧美日韩国产综合在线 | 亚洲精品网站在线观看| 国产福利一区在线| 精品国内二区三区| 天天亚洲美女在线视频| 欧美日韩精品欧美日韩精品一| 综合av第一页| 成人免费毛片嘿嘿连载视频| 久久久久久久一区| 国精产品一区一区三区mba视频| 欧美综合久久久| 亚洲日韩欧美一区二区在线| 99re8在线精品视频免费播放| 国产日产欧美一区二区三区| 国产精品系列在线观看| 国产日韩精品一区二区三区| 国产乱人伦偷精品视频不卡| 精品久久久久久无| 国产精品一级片在线观看| 欧美精品一区二区三区蜜桃视频| 久久精品国产77777蜜臀| 91精品欧美一区二区三区综合在| 一区二区成人在线| 3751色影院一区二区三区| 免费精品视频在线| 欧美日本一区二区三区| 美日韩一区二区三区| 精品国内片67194| 国产乱码精品一品二品| 亚洲欧洲色图综合| 欧洲国内综合视频| 五月婷婷激情综合网| 欧美精品一卡二卡| 麻豆一区二区在线| 久久久精品国产免费观看同学| 成人国产亚洲欧美成人综合网 | 日韩av在线播放中文字幕| 欧美一区二区性放荡片| 国产一区二区三区精品视频| 中文一区在线播放| 欧洲精品在线观看| 日韩二区三区在线观看| 中文字幕精品一区| 欧美日韩国产综合一区二区| 蜜桃传媒麻豆第一区在线观看| 中文字幕国产一区| 欧美日韩国产bt| 顶级嫩模精品视频在线看| 一区二区不卡在线播放| 国产欧美一二三区| 欧美日韩大陆一区二区| 成人短视频下载| 日本欧美一区二区在线观看| 国产亚洲综合av| 777久久久精品| 99久久99久久久精品齐齐| 老司机一区二区| 亚洲精品国产高清久久伦理二区| 2021国产精品久久精品| 欧美三级电影在线看| 成人精品视频一区| 麻豆成人久久精品二区三区小说| 亚洲男人电影天堂| 国产欧美日韩一区二区三区在线观看| 欧美日韩一卡二卡| 91色porny在线视频| 精品在线观看免费| 夜夜嗨av一区二区三区| 欧美本精品男人aⅴ天堂| 欧美撒尿777hd撒尿| 高清国产一区二区| 久久97超碰色| 全国精品久久少妇| 亚洲成av人片在www色猫咪| 亚洲美女在线国产| 国产精品狼人久久影院观看方式| 久久亚洲精品小早川怜子| 欧美日韩国产首页| 一本大道av伊人久久综合| av成人免费在线| 国产精品18久久久久久久久| 九九国产精品视频| 精品一区二区三区免费| 日韩成人免费看| 日本在线不卡视频一二三区| 亚洲一区二区三区在线看| 亚洲欧美一区二区久久| 亚洲欧美日韩人成在线播放| 亚洲人成电影网站色mp4| 亚洲女同ⅹxx女同tv| 亚洲欧美一区二区三区极速播放 | 精品免费国产二区三区 | 99国产精品久久久久久久久久| 国产美女娇喘av呻吟久久| 久久国产精品99精品国产 | 天使萌一区二区三区免费观看| 一级日本不卡的影视| 亚洲乱码国产乱码精品精98午夜| 中文字幕一区二区三区精华液 | 欧美一区二区成人6969| 欧美亚洲综合另类| 91精品在线麻豆| 欧美一区二区精品久久911| 欧美成人一区二区| 精品99久久久久久| 国产精品国产馆在线真实露脸| 亚洲色图清纯唯美| 亚洲va欧美va国产va天堂影院| 青娱乐精品视频| 国产99久久久国产精品| 97久久精品人人爽人人爽蜜臀| 在线欧美日韩国产| 欧美影片第一页| 精品国产免费人成在线观看| 精品久久一区二区三区| 国产精品欧美精品| 亚洲一区二区高清| 激情欧美日韩一区二区| 成人av午夜电影| 欧美日韩一区精品| 欧美电影精品一区二区| 久久精品一区二区三区四区| 亚洲国产综合91精品麻豆| 国产综合成人久久大片91| 色视频成人在线观看免| 日韩精品中文字幕一区|