📄 euclideanmeasure.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 + -