⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algorithmpca2.java

📁 包含了模式识别中常用的一些分类器设计算法
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	// Debug	//	// System.out.println(algo_id + " : computeDecisionRegions()");		DisplayScale scale = output_panel_d.disp_area_d.getDisplayScale();		double currentX = scale.xmin;	double currentY = scale.ymin;		// set precision	//	int outputWidth = output_panel_d.disp_area_d.getXPrecision();	int outputHeight = output_panel_d.disp_area_d.getYPrecision();	    	double incrementY = (scale.ymax-scale.ymin)/outputHeight;	double incrementX = (scale.xmax-scale.xmin)/outputWidth;	    	// declare a 2D array to store the class associations	//	output_canvas_d = new int[outputWidth][outputHeight];	    	// loop through each and every point on the pixmap and	// determine which class each pixel is associated with	//	MyPoint point;	double dist = 0.0;	int associated = 0;	double smallestSoFar = Double.MAX_VALUE;	    	int target = 0;	boolean set1flag = true;	boolean set2flag = true;	boolean set3flag = true;	pro_box_d.setProgressMin(0);	pro_box_d.setProgressMax(outputWidth);	for (int i = 0; i < outputWidth; i++)	{			    // set current status	    //			    currentX += incrementX;	    currentY = scale.ymin;	    pro_box_d.setProgressCurr(i);			    for (int j = 0; j < outputHeight; j++)	    {		    		// declare the current pixel point		//	    		currentY += incrementY;		MyPoint pixel = new MyPoint(currentX, currentY);		smallestSoFar = Double.MAX_VALUE;		    		// convert the pixel to the time domain		//		double X[][] = new double[1][2];		X[0][0] = pixel.x;		X[0][1] = pixel.y;		    		// reset the boolean flags		//		set1flag = true;		set2flag = true;		set3flag = true;		    		// find the closest point from the first class		//		for (int k = 0; k < point_means_d.size(); k++)		{		    		    // get the first mean point		    //		    point = (MyPoint)point_means_d.elementAt(k);		    // convert the mean point to the time domain		    //		    double Y[][] = new double[1][2];		    Y[0][0] = point.x;		    Y[0][1] = point.y;		    // represent the pixel as a matrix		    //		    Matrix A = new Matrix();		    A.initMatrix(X, 1, 2);					    // represent the mean point as a matrix		    //		    Matrix B = new Matrix();		    B.initMatrix(Y, 1, 2);					    // transform the pixel and mean point to the 		    // feature space		    //		    Matrix C = new Matrix();		    Matrix D = new Matrix();					    // use the transformation matrix of the		    // first data set		    //		    if (set1_d.size() > 0 && set1flag)		    {			set1flag = false;			target = 0;			A.multMatrix(PCA1_d, C);			B.multMatrix(PCA1_d, D);		    }		    		    // use the transformation matrix of the		    // second data set		    //		    else if (set2_d.size() > 0 && set2flag)		    {			set2flag = false;			target = 1;			A.multMatrix(PCA2_d, C);			B.multMatrix(PCA2_d, D);		    }		    		    // use the transformation matrix of the		    // third data set		    //		    else if (set3_d.size() > 0 && set3flag)		    {			set3flag = false;			target = 2;			A.multMatrix(PCA3_d, C);			B.multMatrix(PCA3_d, D);		    }		    		    // use the transformation matrix of the		    // forth data set		    //		    else		    {			target = 3;			A.multMatrix(PCA4_d, C);			B.multMatrix(PCA4_d, D);		    }					    // find the distance between the pixel and		    // mean point		    //		    dist = MathUtil.distance(C.Elem[0][0], C.Elem[0][1], 					     D.Elem[0][0], D.Elem[0][1]);		    		    if (dist < smallestSoFar)		    {			associated = target;			smallestSoFar = dist;		    }		}				// put and entry in the output canvas array to		// indicate which class the current pixel is		// closest to		//		output_canvas_d[i][j] = associated;				// add a point to the vector of decision		// region points if the class that the current		// point is associated with is different for		// the class what the previous point was		// associated with i.e., a transition point		//		if (j > 0 && i > 0)	        {		    if (associated != output_canvas_d[i][j - 1] 			|| associated != output_canvas_d[i - 1][j])		    {			decision_regions_d.add(pixel);		    }		}	    }	} // end of the loop	    }        /**     *      * Computes the classification error for the data points given     *     */    public void computeErrors()    {		// declare local variables	//	String text;	double error;	int samples = 0;	int samples1 = 0;	int samples2 = 0;	int samples3 = 0;	int samples4 = 0;		int incorrect = 0;	int incorrect1 = 0;	int incorrect2 = 0;	int incorrect3 = 0;	int incorrect4 = 0;		DisplayScale scale = output_panel_d.disp_area_d.getDisplayScale();		// set scales	int outputWidth = output_panel_d.disp_area_d.getXPrecision();	int outputHeight = output_panel_d.disp_area_d.getYPrecision();	    	double incrementY = (scale.ymax-scale.ymin)/outputHeight;	double incrementX = (scale.xmax-scale.xmin)/outputWidth;	// compute the classification error for the first set	//	for (int i = 0; i < set1_d.size(); i++)	{	    	    MyPoint point = (MyPoint)set1_d.elementAt(i);	    samples1++;	    if ((point.x > scale.xmin && point.x < scale.xmax)		&& (point.y > scale.ymin && point.y < scale.ymax))	    {		if (output_canvas_d[(int)((point.x - scale.xmin) / incrementX)]		    [(int)((point.y - scale.ymin) / incrementY)] != 0)		{		    incorrect1++;		}	    }	}		if (set1_d.size() > 0)        {	    	    error = ((double)incorrect1 / (double)samples1) * 100.0;	    	    text =		new String(			   "       Results for class 0:\n"			   + "          Total number of samples: "			   + samples1			   + "\n"			   + "          Misclassified samples: "			   + incorrect1			   + "\n"			   + "          Classification error: "			   + MathUtil.setDecimal(error, 2)			   + "%");	    	    pro_box_d.appendMessage(text);	}		// compute the classification error for the second set	//	for (int i = 0; i < set2_d.size(); i++)        {	    	    MyPoint point = (MyPoint)set2_d.elementAt(i);	    samples2++;	    if ((point.x > scale.xmin && point.x < scale.xmax)		&& (point.y > scale.ymin && point.y < scale.ymax))	    {		if (output_canvas_d[(int)((point.x - scale.xmin) / incrementX)]		    [(int)((point.y - scale.ymin) / incrementY)] != 1)		{		    incorrect2++;		}	    }	}		if (set2_d.size() > 0)	{	    	    error = ((double)incorrect2 / (double)samples2) * 100.0;	    	    text =		new String(			   "       Results for class 1:\n"			   + "          Total number of samples: "			   + samples2			   + "\n"			   + "          Misclassified samples: "			   + incorrect2			   + "\n"			   + "          Classification error: "			   + MathUtil.setDecimal(error, 2)			   + "%");	    	    pro_box_d.appendMessage(text);	}		// compute the classification error for the third set	//	for (int i = 0; i < set3_d.size(); i++)        {	    	    MyPoint point = (MyPoint)set3_d.elementAt(i);	    samples3++;	    if ((point.x > scale.xmin && point.x < scale.xmax)		&& (point.y > scale.ymin && point.y < scale.ymax))	    {		if (output_canvas_d[(int)((point.x - scale.xmin) / incrementX)]		    [(int)((point.y - scale.ymin) / incrementY)] != 2)		{		    incorrect3++;		}	    }	}		if (set3_d.size() > 0)	{			    error = ((double)incorrect3 / (double)samples3) * 100.0;	    	    text =		new String(			   "       Results for class 2:\n"			   + "          Total number of samples: "			   + samples3			   + "\n"			   + "          Misclassified samples: "			   + incorrect3			   + "\n"			   + "          Classification error: "			   + MathUtil.setDecimal(error, 2)			   + "%");	    	    pro_box_d.appendMessage(text);	}		// compute the classification error for the forth set	//	for (int i = 0; i < set4_d.size(); i++)        {	    	    MyPoint point = (MyPoint)set4_d.elementAt(i);	    samples4++;	    if ((point.x > scale.xmin && point.x < scale.xmax)		&& (point.y > scale.ymin && point.y < scale.ymax))	    {		if (output_canvas_d[(int)((point.x - scale.xmin) / incrementX)]		    [(int)((point.y - scale.ymin) / incrementY)] != 3)	        {		    incorrect4++;		}	    }	}		if (set4_d.size() > 0)	{	    	    error = ((double)incorrect4 / (double)samples4) * 100.0;			    text =		new String(			   "       Results for class 3:\n"			   + "          Total number of samples: "			   + samples4			   + "\n"			   + "          Misclassified samples: "			   + incorrect4			   + "\n"			   + "          Classification error: "			   + MathUtil.setDecimal(error, 2)			   + "%");	    	    pro_box_d.appendMessage(text);	}		// compute the overall classification error	//	samples = samples1 + samples2 + samples3 + samples4;	incorrect = incorrect1 + incorrect2 + incorrect3 + incorrect4;	error = ((double)incorrect / (double)samples) * 100.0;		text =	    new String(		       "       Overall results:\n"		       + "          Total number of samples: "		       + samples		       + "\n"		       + "          Misclassified samples: "		       + incorrect		       + "\n"		       + "          Classification error: "		       + MathUtil.setDecimal(error, 2)		       + "%");		pro_box_d.appendMessage(text);	    }           /**    * Appends messages to the pro_box_d variable    */       public void printMatrices()    {	double a11, a12, a21, a22;	String text;		if (set1_d.size() > 0)	{	    pro_box_d.appendMessage("      Set 1");	    	    a11 = MathUtil.setDecimal(CPCA1_d.Elem[0][0], 2);	    a12 = MathUtil.setDecimal(CPCA1_d.Elem[0][1], 2);	    a21 = MathUtil.setDecimal(CPCA1_d.Elem[1][0], 2);	    a22 = MathUtil.setDecimal(CPCA1_d.Elem[1][1], 2);	    	    text = new String("      Covariance matrix:\n" +			      "         " + a11 + "    " + a12 + "\n" +			      "         " + a21 + "    " + a22);	    	    pro_box_d.appendMessage(text + "\n");	    	    a11 = MathUtil.setDecimal(PCA1_d.Elem[0][0], 2);	    a12 = MathUtil.setDecimal(PCA1_d.Elem[0][1], 2);	    a21 = MathUtil.setDecimal(PCA1_d.Elem[1][0], 2);	    a22 = MathUtil.setDecimal(PCA1_d.Elem[1][1], 2);	    	    text = new String("      Transformation matrix:\n" +			      "         " + a11 + "    " + a12 + "\n" +			      "         " + a21 + "    " + a22);	    	    pro_box_d.appendMessage(text + "\n");	}	if (set2_d.size() > 0)	{	    pro_box_d.appendMessage("      Set 2");	    	    a11 = MathUtil.setDecimal(CPCA2_d.Elem[0][0], 2);	    a12 = MathUtil.setDecimal(CPCA2_d.Elem[0][1], 2);	    a21 = MathUtil.setDecimal(CPCA2_d.Elem[1][0], 2);	    a22 = MathUtil.setDecimal(CPCA2_d.Elem[1][1], 2);	    	    text = new String("      Covariance matrix:\n" +			      "         " + a11 + "    " + a12 + "\n" +			      "         " + a21 + "    " + a22);	    	    pro_box_d.appendMessage(text + "\n");	    	    a11 = MathUtil.setDecimal(PCA2_d.Elem[0][0], 2);	    a12 = MathUtil.setDecimal(PCA2_d.Elem[0][1], 2);	    a21 = MathUtil.setDecimal(PCA2_d.Elem[1][0], 2);	    a22 = MathUtil.setDecimal(PCA2_d.Elem[1][1], 2);	    	    text = new String("      Transformation matrix:\n" +			      "         " + a11 + "    " + a12 + "\n" +			      "         " + a21 + "    " + a22);	    	    pro_box_d.appendMessage(text + "\n");	}	if (set3_d.size() > 0)	{	    pro_box_d.appendMessage("      Set 3");	    	    a11 = MathUtil.setDecimal(CPCA3_d.Elem[0][0], 2);	    a12 = MathUtil.setDecimal(CPCA3_d.Elem[0][1], 2);	    a21 = MathUtil.setDecimal(CPCA3_d.Elem[1][0], 2);	    a22 = MathUtil.setDecimal(CPCA3_d.Elem[1][1], 2);	    	    text = new String("      Covariance matrix:\n" +			      "         " + a11 + "    " + a12 + "\n" +			      "         " + a21 + "    " + a22);	    	    pro_box_d.appendMessage(text + "\n");	    	    a11 = MathUtil.setDecimal(PCA3_d.Elem[0][0], 2);	    a12 = MathUtil.setDecimal(PCA3_d.Elem[0][1], 2);	    a21 = MathUtil.setDecimal(PCA3_d.Elem[1][0], 2);	    a22 = MathUtil.setDecimal(PCA3_d.Elem[1][1], 2);	    	    text = new String("      Transformation matrix:\n" +			      "         " + a11 + "    " + a12 + "\n" +			      "         " + a21 + "    " + a22);	    	    pro_box_d.appendMessage(text + "\n");	}	if (set4_d.size() > 0)	{	    	    pro_box_d.appendMessage("      Set 4");	    	    a11 = MathUtil.setDecimal(CPCA4_d.Elem[0][0], 2);	    a12 = MathUtil.setDecimal(CPCA4_d.Elem[0][1], 2);	    a21 = MathUtil.setDecimal(CPCA4_d.Elem[1][0], 2);	    a22 = MathUtil.setDecimal(CPCA4_d.Elem[1][1], 2);	    	    text = new String("      Covariance matrix:\n" +			      "         " + a11 + "    " + a12 + "\n" +			      "         " + a21 + "    " + a22);	    	    pro_box_d.appendMessage(text + "\n");	    	    a11 = MathUtil.setDecimal(PCA4_d.Elem[0][0], 2);	    a12 = MathUtil.setDecimal(PCA4_d.Elem[0][1], 2);	    a21 = MathUtil.setDecimal(PCA4_d.Elem[1][0], 2);	    a22 = MathUtil.setDecimal(PCA4_d.Elem[1][1], 2);	    	    text = new String("      Transformation matrix:\n" +			      "         " + a11 + "    " + a12 + "\n" +			      "         " + a21 + "    " + a22);	    	    pro_box_d.appendMessage(text + "\n");	}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -