Saturation Filters

Share:

Description

Data complexity based filters for removing label noise from a dataset as a preprocessing step of classification. For more information, see 'Details' and 'References' sections.

Usage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
## S3 method for class 'formula'
saturationFilter(formula, data, ...)

## Default S3 method:
saturationFilter(x, noiseThreshold = NULL,
  classColumn = ncol(x), ...)

## S3 method for class 'formula'
consensusSF(formula, data, ...)

## Default S3 method:
consensusSF(x, nfolds = 10, consensusLevel = nfolds - 1,
  noiseThreshold = NULL, classColumn = ncol(x), ...)

## S3 method for class 'formula'
classifSF(formula, data, ...)

## Default S3 method:
classifSF(x, nfolds = 10, noiseThreshold = NULL,
  classColumn = ncol(x), ...)

Arguments

formula

A formula describing the classification variable and the attributes to be used.

data, x

Data frame containing the tranining dataset to be filtered.

...

Optional parameters to be passed to other methods.

noiseThreshold

The threshold for removing noisy instances in the saturation filter. Authors recommend values between 0.25 and 2. If it is set to NULL, the threshold is appropriately chosen according to the number of training instances.

classColumn

Positive integer indicating the column which contains the (factor of) classes. By default, the last column is considered.

nfolds

For consensusSF and classifSF, number of folds in which the dataset is split.

consensusLevel

For consensusSF, it sets the (minimum) number of 'noisy votes' an instance must get in order to be removed. By default, the nfolds-1 filters built over each instance must label it as noise.

Details

Based on theoretical studies about data complexity (Gamberger & Lavrac, 1997), saturationFilter removes those instances which most enable to reduce the CLCH (Complexity of the Least Complex Hypotheses) of the training dataset. The full method can be looked up in (Gamberger et al., 1999), and the previous step of literals extraction is detailed in (Gamberger et al., 1996).

consensusSF splits the dataset in nfolds folds, and applies saturationFilter to every combination of nfolds-1 folds. Those instances with (at least) consensusLevel 'noisy votes' are removed.

classifSF combines saturationFilter with a nfolds-folds cross validation scheme (the latter in the spirit of filters such as EF, CVCF). Namely, the dataset is split in nfolds folds and, for every combination of nfolds-1 folds, saturationFilter is applied and a classifier (we implement a standard C4.5 tree) is built. Instances from the excluded fold are removed according to this classifier.

Value

An object of class filter, which is a list with seven components:

  • cleanData is a data frame containing the filtered dataset.

  • remIdx is a vector of integers indicating the indexes for removed instances (i.e. their row number with respect to the original data frame).

  • repIdx is a vector of integers indicating the indexes for repaired/relabelled instances (i.e. their row number with respect to the original data frame).

  • repLab is a factor containing the new labels for repaired instances.

  • parameters is a list containing the argument values.

  • call contains the original call to the filter.

  • extraInf is a character that includes additional interesting information not covered by previous items.

References

Gamberger D., Lavrac N., Groselj C. (1999, June): Experiments with noise filtering in a medical domain. In ICML (pp. 143-151).

Gamberger D., Lavrac N., Dzeroski S. (1996, January): Noise elimination in inductive concept learning: A case study in medical diagnosis. In Algorithmic Learning Theory (pp. 199-212). Springer Berlin Heidelberg.

Gamberger D., Lavrac N. (1997): Conditions for Occam's razor applicability and noise elimination (pp. 108-123). Springer Berlin Heidelberg.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Next example is not run because saturation procedure is time-consuming.
## Not run: 
data(iris)
out1 <- saturationFilter(Species~., data = iris)
out2 <- consensusSF(Species~., data = iris)
out3 <- classifSF(Species~., data = iris)
print(out1)
print(out2)
print(out3)

## End(Not run)