/*
* Created on Jan 30, 2006
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package transformations;
import java.io.FileReader;
import fileIO.*;
import weka.core.*;
import weka.attributeSelection.PrincipalComponents;
public class PowerSearch {
public static double MIN=-4, MAX=4, INCREMENT=0.125;
//First rows is all ones
//Last row is for transformed attribute
public static double transformRegressor(double[][] data, double[] response, int pos)
{
//1. Get values of the attribute of interest.
double[] originalData= new double[data[pos].length];
double[] transformedData= new double[originalData.length];
for(int i=0;i<originalData.length;i++)
{
originalData[i]=data[pos][i];
// if(i<10)
// System.out.println(" data "+i+" = "+data[pos][i]+" response = "+response[i]);
}
data[pos]=transformedData;
LinearModel l;
double alpha, s,minAlpha=0,minSSE=Double.MAX_VALUE;
for(alpha=MIN;alpha<=MAX;alpha+=INCREMENT)
{
if(alpha==0)
{
for(int j=0;j<originalData.length;j++)
transformedData[j]=Math.log(originalData[j]);
}
else
{
for(int j=0;j<originalData.length;j++)
transformedData[j]=Math.pow(originalData[j],alpha);
}
l=new LinearModel(data,response);
l.fitModel();
s=l.findStats();
// System.out.println(" Alpha = "+alpha+" SSE = "+s);
if(s<minSSE)
{
minAlpha=alpha;
minSSE=s;
}
}
if(minAlpha==MIN || minAlpha==MAX)
minAlpha=1;
return minAlpha;
}
public static double[] transform(double[] x, double power)
{
double[] newX= new double[x.length];
for(int i=0;i<x.length;i++)
newX[i]=Math.pow(x[i],power);
return newX;
}
public static void main(String[] args)
{
Instances data=null;
try{
FileReader r = new FileReader("C:/Research/Code/Archive Generator/src/weka/addOns/BoxTidwellTest2.arff");
data = new Instances(r);
data.setClassIndex(data.numAttributes()-1);
}catch(Exception e)
{
System.out.println("Error loading file "+e);
}
double[] powers=new double[data.numAttributes()-1];
// data=transformRegressor(data,0,powers);
// data=transformRegressor(data,2,powers);
// data=transformRegressor(data,1,powers);
System.out.println(" Final powers =");
for(int i=0;i<powers.length;i++)
System.out.println(i+" ="+powers[i]);
OutFile r = new OutFile("C:/Research/Code/Archive Generator/src/weka/addOns/BoxTidwellResults2.arff");
r.writeLine(data.toString());
}
}