/***********************************************************************
This file is part of KEEL-software, the Data Mining tool for regression,
classification, clustering, pattern mining and so on.
Copyright (C) 2004-2010
F. Herrera (herrera@decsai.ugr.es)
L. S�nchez (luciano@uniovi.es)
J. Alcal�-Fdez (jalcala@decsai.ugr.es)
S. Garc�a (sglopez@ujaen.es)
A. Fern�ndez (alberto.fernandez@ujaen.es)
J. Luengo (julianlm@decsai.ugr.es)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/
**********************************************************************/
package keel.Algorithms.UnsupervisedLearning.AssociationRules.IntervalRuleLearning.ARMMGA;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
import org.core.Files;
public class DataB {
int n_variables, partitions;
int[] nIntervals;
Intervals [][] dataBase;
public DataB() {
}
public DataB(int nIntervals, myDataset train) {
double mark, value, rank;
double[][] ranks = train.getRanks();
this.n_variables = train.getnVars();
this.nIntervals = new int[this.n_variables];
this.dataBase = new Intervals[this.n_variables][];
for (int i = 0; i < this.n_variables; i++) {
rank = Math.abs(ranks[i][1] - ranks[i][0]);
if (train.isNominal(i)) this.nIntervals[i] = (int) rank + 1;
else this.nIntervals[i] = nIntervals;
this.dataBase[i] = new Intervals[this.nIntervals[i]];
if (train.isNominal(i)) {
for (int j = 0; j < this.nIntervals[i]; j++) {
this.dataBase[i][j] = new Intervals();
value = ranks[i][0] + j;
this.dataBase[i][j].x0 = this.dataBase[i][j].x1 = value;
}
}
else {
mark = rank / (this.nIntervals[i]);
for (int j = 0; j < this.nIntervals[i]; j++) {
this.dataBase[i][j] = new Intervals();
value = ranks[i][0] + mark * j;
this.dataBase[i][j].x0 = this.setValue(value, ranks[i][0]);
value = ranks[i][0] + mark * (j + 1);
this.dataBase[i][j].x1 = this.setValue(value, ranks[i][1]);
}
}
}
}
public int numVariables() {
return (this.n_variables);
}
public int numIntervals(int variable) {
return (this.nIntervals[variable]);
}
public int[] getnIntervals() {
return (this.nIntervals);
}
public Intervals getInterval(int variable, int inter) {
return (this.dataBase[variable][inter]);
}
public boolean isCovered (int variable, int interval, double value) {
return (this.dataBase[variable][interval].isCovered(value));
}
private double setValue(double val, double tope) {
if (val > -1E-4 && val < 1E-4) return (0);
if (val > tope - 1E-4 && val < tope + 1E-4) return (tope);
return (val);
}
}