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

📄 euclideanmeasure.java

📁 代码是一个分类器的实现,其中使用了部分weka的源代码。可以将项目导入eclipse运行
💻 JAVA
字号:
package com.lqy.GEP;
import weka.core.*;

public class EuclideanMeasure extends EuclideanDistance{
	private Chromosome kernel;
	public void setKernel(Chromosome argC){
		argC.updateSIPDT(this);//SIPDT是应该放在欧几里得度量中,每次setKernel时更新?
		this.kernel=argC;
		
	}
	public EuclideanMeasure(Instances argI){
		super(argI);
	}
	public double InnerProduct(Instance argA,Instance argB){//原空间的内积
		/*
	//	System.out.print("dd");
		Instance tempI=new Instance(argA.numAttributes());
		for(int i=0;i<tempI.numAttributes();i++)
			tempI.setValue(i, 0.0d);
		double tempDistAI=this.distanceInOriginalSpace(argA, tempI,Double.MAX_VALUE);//<X-0,X-0>=||X||^2
		
		double tempDistBI=this.distanceInOriginalSpace(argB, tempI,Double.MAX_VALUE);//<Y-0,Y-0>=||Y||^2
		double tempDistAB=this.distanceInOriginalSpace(argA, argB, Double.MAX_VALUE);//<X-Y,X-Y>=||X-Y||^2
		
		return (tempDistAI+tempDistBI-tempDistAB)*0.5d; //<X-Y,X-Y>=<X,X>+<Y,Y>-2*<X,Y>
		*/
		
		 double result = 0;
     //    System.out.print("dd");
		    // we can do a fast dot product
		    int n1 = argA.numValues();
		    int n2 = argB.numValues();
		    int classIndex = argA.numAttributes()-1;
		    for (int p1 = 0, p2 = 0; p1 < n1 && p2 < n2;) {
		      int ind1 = argA.index(p1);
		      int ind2 = argB.index(p2);
		      if (ind1 == ind2) {
			if (ind1 != classIndex) {
			  result += argA.valueSparse(p1) * argB.valueSparse(p2);
			}
			p1++;
			p2++;
		      } else if (ind1 > ind2) {
			p2++;
		      } else {
			p1++;
		      }
		    }
		    return (result);
		    
	}
	
	public double calculateDistance(Instance argA,Instance argB){
		//EuclideanDistance tempED=new EuclideanDistance(this.getInstances());
		//System.out.print("nal");
		
	//	double tempAA=kernel.evaluation(this, argA, argA);
	//	double tempBB=kernel.evaluation(this, argB, argB);
		double tempAB=kernel.evaluation(this, argA, argB);
		
		
		double tempR=2*(this.kernel.SIPDT-tempAB);
	//	double tempR=2-2*tempAB;
		return Double.isInfinite(tempR)||Double.isNaN(tempR)?Double.MAX_VALUE:tempR;
	}
	public double distanceInOriginalSpace(Instance argA,Instance argB,double argD){//原空间中的距离
	//	System.out.print("original");
		if(argA.equals(argB))
			return 0;
		return super.distance(argA, argB,argD);
		//Object x=new Object();
		
	}
	/*
	public double distance(Instance argA, Instance argB, double cutOffValue) { //debug method pls remove after use
	    return this.calculateDistance(argA, argB);
	}
	public double distance(Instance argA, Instance argB, double cutOffValue, boolean print){
		return this.calculateDistance(argA, argB);
	}
	*/
	/*
	 * 
	 * */
	public double distance(Instance argA, Instance argB,double argD){
		//System.out.println(argA.toString()+" "+argB.toString());
		//double x=Math.sqrt(this.calculateDistance(argA, argB));
		//System.out.println(x);
	//	System.out.print("sfds");
		if(argA.equals(argB))
			return 0;
		
		return Math.sqrt(this.calculateDistance(argA, argB));
	}
}

⌨️ 快捷键说明

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