(int minFeatures, int maxFeatures, DataSet dataSet, int folds)
| 137 | } |
| 138 | |
| 139 | private void search(int minFeatures, int maxFeatures, DataSet dataSet, int folds) |
| 140 | { |
| 141 | Random rand = RandomUtil.getRandom(); |
| 142 | int nF = dataSet.getNumFeatures(); |
| 143 | int nCat = dataSet.getNumCategoricalVars(); |
| 144 | |
| 145 | Set<Integer> available = new IntSet(); |
| 146 | ListUtils.addRange(available, 0, nF, 1); |
| 147 | catSelected = new IntSet(dataSet.getNumCategoricalVars()); |
| 148 | numSelected = new IntSet(dataSet.getNumNumericalVars()); |
| 149 | |
| 150 | Set<Integer> catToRemove = new IntSet(dataSet.getNumCategoricalVars()); |
| 151 | Set<Integer> numToRemove = new IntSet(dataSet.getNumNumericalVars()); |
| 152 | ListUtils.addRange(catToRemove, 0, nCat, 1); |
| 153 | ListUtils.addRange(numToRemove, 0, nF-nCat, 1); |
| 154 | |
| 155 | double[] bestScore = new double[]{Double.POSITIVE_INFINITY}; |
| 156 | |
| 157 | Object learner = regressor; |
| 158 | if (dataSet instanceof ClassificationDataSet) |
| 159 | learner = classifier; |
| 160 | |
| 161 | while (catSelected.size() + numSelected.size() < maxFeatures) |
| 162 | { |
| 163 | if (SFSSelectFeature(available, dataSet, |
| 164 | catToRemove, numToRemove, catSelected, numSelected, |
| 165 | learner, folds, rand, bestScore, minFeatures) < 0) |
| 166 | break; |
| 167 | |
| 168 | } |
| 169 | |
| 170 | this.finalTransform = new RemoveAttributeTransform(dataSet, catToRemove, numToRemove); |
| 171 | } |
| 172 | |
| 173 | /** |
| 174 | * |
no test coverage detected