亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国内精品国产成人| 国产精品你懂的在线| 天堂蜜桃91精品| 777久久久精品| 精品在线播放免费| 久久伊人中文字幕| 99久久99久久久精品齐齐| 亚洲女同女同女同女同女同69| 91福利在线观看| 奇米精品一区二区三区在线观看| 精品三级av在线| 成人动漫一区二区三区| 亚洲线精品一区二区三区| 欧美一级日韩免费不卡| 国产美女主播视频一区| 最新不卡av在线| 91精品国产欧美一区二区18| 国产综合久久久久久久久久久久| 中文字幕av一区二区三区高| 欧美影片第一页| 极品少妇xxxx偷拍精品少妇| 国产精品久久久久久久久快鸭 | 国产乱妇无码大片在线观看| 国产亚洲欧美日韩在线一区| 91激情五月电影| 毛片av一区二区| 日本一区二区三区在线不卡| 欧美亚洲日本一区| 国产一区二区h| 亚洲一二三专区| 国产欧美日韩在线| 欧美午夜精品免费| 国产精品123| 一区二区三区四区在线播放| 久久这里只有精品6| 欧美性生活久久| 成人网页在线观看| 麻豆免费看一区二区三区| 最新成人av在线| 久久久777精品电影网影网| 欧洲精品视频在线观看| 国产成人综合网站| 视频一区中文字幕国产| 亚洲精选一二三| 国产人成亚洲第一网站在线播放| 欧美日韩一级片在线观看| www.av亚洲| 国产乱码精品一区二区三区忘忧草| 亚洲五月六月丁香激情| 国产精品久久久久影院亚瑟| 精品国产第一区二区三区观看体验| 精品视频123区在线观看| av影院午夜一区| 大尺度一区二区| 国产剧情av麻豆香蕉精品| 青青草97国产精品免费观看| 亚洲精品国产视频| 中文字幕一区二区三区四区| 久久精品男人天堂av| 日韩网站在线看片你懂的| 欧美精品少妇一区二区三区| 色播五月激情综合网| 91丨porny丨户外露出| 国产99精品在线观看| 久久不见久久见免费视频7| 日本不卡一区二区| 一区二区三区在线观看动漫| 国产精品免费人成网站| 中文av一区特黄| 久久综合五月天婷婷伊人| 欧美一区中文字幕| 欧美精品电影在线播放| 欧美日韩一区二区在线观看视频| 91福利国产精品| 欧美在线观看视频一区二区三区| 91色九色蝌蚪| 欧洲av一区二区嗯嗯嗯啊| 91丨porny丨蝌蚪视频| 色悠久久久久综合欧美99| 91老师片黄在线观看| 91福利资源站| 在线播放视频一区| 日韩欧美一级在线播放| 日韩天堂在线观看| 久久久久高清精品| 中文字幕 久热精品 视频在线| 国产精品理论片在线观看| 一区二区三区中文字幕电影| 亚洲电影视频在线| 日本午夜一区二区| 国产真实精品久久二三区| 国产美女视频91| 不卡一区在线观看| 欧美色综合网站| 欧美日韩国产小视频| 91精品国产欧美日韩| 精品sm在线观看| 欧美国产欧美综合| 亚洲九九爱视频| 日韩av一级电影| 韩国在线一区二区| 高清在线不卡av| 欧美日韩一区二区三区在线看| 欧美一级欧美一级在线播放| 久久久五月婷婷| 一区二区三区高清| 免费成人小视频| 成人av资源在线观看| 欧美日韩在线三区| 久久久久久久综合色一本| 亚洲裸体xxx| 久久疯狂做爰流白浆xx| www.99精品| 欧美成人一区二区三区在线观看 | 中文字幕不卡的av| 亚洲国产成人tv| 国产一区二区视频在线| 91老师片黄在线观看| 精品国偷自产国产一区| 亚洲欧美一区二区三区极速播放| 蜜桃视频一区二区三区在线观看| 成人性色生活片免费看爆迷你毛片| 日本国产一区二区| 国产人伦精品一区二区| 亚洲成va人在线观看| 高清shemale亚洲人妖| 欧美日韩国产经典色站一区二区三区| 国产三级一区二区| 婷婷国产v国产偷v亚洲高清| 波多野洁衣一区| 欧美三级韩国三级日本一级| 国产日韩三级在线| 美女一区二区三区在线观看| 99国产精品99久久久久久| 2023国产精华国产精品| 偷拍一区二区三区| 91蜜桃免费观看视频| 久久精品夜色噜噜亚洲a∨| 日本欧美一区二区| 色诱亚洲精品久久久久久| 国产午夜精品福利| 韩国三级在线一区| 欧美日本一道本| 日韩影院精彩在线| 91久久一区二区| 国产精品女主播在线观看| 久久99国产精品麻豆| 在线不卡一区二区| 五月天亚洲婷婷| 91麻豆福利精品推荐| 中文字幕日韩av资源站| 国产精品91xxx| 久久久久久久久久久久久久久99| 蜜臀av亚洲一区中文字幕| 91精品国产综合久久精品麻豆| 一区二区三区加勒比av| 色哟哟一区二区三区| 国产精品久久久久久久浪潮网站| 国产suv一区二区三区88区| 久久亚洲综合色一区二区三区| 另类综合日韩欧美亚洲| 日韩视频中午一区| 男女男精品视频网| 日韩一卡二卡三卡国产欧美| 视频一区欧美日韩| 欧美猛男gaygay网站| 午夜精品福利在线| 在线成人av影院| 美女视频免费一区| 精品国产污污免费网站入口| 久久99久久99| 久久久久久夜精品精品免费| 国产精品一区二区在线播放| 欧美激情资源网| 99精品欧美一区二区三区小说| 亚洲婷婷综合久久一本伊一区| 99免费精品在线| 亚洲蜜臀av乱码久久精品蜜桃| 在线观看欧美黄色| 日韩极品在线观看| 欧美一级理论片| 国产精品18久久久久久久久| 国产精品三级视频| 99re热视频精品| 亚洲一区二区成人在线观看| 欧美一区二区福利在线| 国产在线播放一区二区三区| 欧美国产一区视频在线观看| 91在线精品一区二区| 亚洲成人tv网| 精品日韩成人av| 99re这里都是精品| 五月婷婷另类国产| 久久先锋影音av鲁色资源网| 成人av免费在线| 首页国产欧美久久| 中文一区在线播放| 欧美人妇做爰xxxⅹ性高电影| 另类人妖一区二区av| 国产精品久久影院|