Package {dann}


Type: Package
Title: Discriminant Adaptive Nearest Neighbor Classification
Version: 1.2.0
Description: Discriminant Adaptive Nearest Neighbor Classification is a variation of k nearest neighbors where the shape of the neighborhood is data driven. The neighborhood is elongated along class boundaries and shrunk in the orthogonal direction. This package implements dann and sub_dann from Hastie (1996) https://web.stanford.edu/~hastie/Papers/dann_IEEE.pdf.
License: MIT + file LICENSE
Encoding: UTF-8
Imports: stats (≥ 3.5.3), tibble (≥ 2.1.1), ggplot2 (≥ 3.1.1), stringr (≥ 1.4.0), rlang (≥ 1.0.0), fpc (≥ 2.1-11.1), Rcpp (≥ 1.0.1), hardhat
RoxygenNote: 7.3.3
Suggests: testthat (≥ 3.0.0), rmarkdown (≥ 1.18), mlbench (≥ 2.1-1), dplyr (≥ 0.8.0.1), magrittr (≥ 1.5), recipes
LinkingTo: Rcpp, RcppArmadillo
Config/testthat/edition: 3
URL: https://github.com/gmcmacran/dann
BugReports: https://github.com/gmcmacran/dann/issues
NeedsCompilation: yes
Packaged: 2026-08-09 14:49:34 UTC; ixi_eulogy_ixi
Author: Greg McMahan [aut, cre]
Maintainer: Greg McMahan <gmcmacran@gmail.com>
Repository: CRAN
Date/Publication: 2026-08-22 13:40:02 UTC

Discriminant Adaptive Nearest Neighbor Classification

Description

Discriminant Adaptive Nearest Neighbor Classification

Usage

dann(x, ..., k = 5, neighborhood_size = max(floor(nrow(x)/5), 50), epsilon = 1)

Arguments

x

A matrix, data frame, formula, or recipe.

...

Additional parameters passed to methods.

k

The number of nearest neighbors used to classify a point. Identical to k in standard k nearest neighbors.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

epsilon

Softening parameter. Scales the identity matrix added to the between class covariance, which keeps the neighborhood from collapsing onto the class boundary. 1 matches the publication.

Details

This is an implementation of Hastie and Tibshirani's Discriminant Adaptive Nearest Neighbor Classification.

Value

An S3 class of type dann.


Discriminant Adaptive Nearest Neighbor Classification

Description

Discriminant Adaptive Nearest Neighbor Classification

Usage

## S3 method for class 'data.frame'
dann(
  x,
  y,
  k = 5,
  neighborhood_size = max(floor(nrow(x)/5), 50),
  epsilon = 1,
  ...
)

Arguments

x

A data frame.

y

A vector of outcomes. Numeric, character, and factor are all accepted.

k

The number of nearest neighbors used to classify a point. Identical to k in standard k nearest neighbors.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

epsilon

Softening parameter. Scales the identity matrix added to the between class covariance, which keeps the neighborhood from collapsing onto the class boundary. 1 matches the publication.

...

Additional parameters passed to methods.

Details

This is an implementation of Hastie and Tibshirani's Discriminant Adaptive Nearest Neighbor Classification.

Value

An S3 class of type dann.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")
y <- train$Y
x <- train[, 1:2]

dann(x, y)

Discriminant Adaptive Nearest Neighbor Classification

Description

Discriminant Adaptive Nearest Neighbor Classification

Usage

## Default S3 method:
dann(x, k = 5, neighborhood_size = max(floor(nrow(x)/5), 50), epsilon = 1, ...)

Arguments

x

An object for which no dann() method exists.

k

The number of nearest neighbors used to classify a point. Identical to k in standard k nearest neighbors.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

epsilon

Softening parameter. Scales the identity matrix added to the between class covariance, which keeps the neighborhood from collapsing onto the class boundary. 1 matches the publication.

...

Additional parameters passed to methods.

Details

This is an implementation of Hastie and Tibshirani's Discriminant Adaptive Nearest Neighbor Classification.

Value

An S3 class of type dann.


Discriminant Adaptive Nearest Neighbor Classification

Description

Discriminant Adaptive Nearest Neighbor Classification

Usage

## S3 method for class 'formula'
dann(
  formula,
  data,
  k = 5,
  neighborhood_size = max(floor(nrow(data)/5), 50),
  epsilon = 1,
  ...
)

Arguments

formula

A formula specifying the outcome and predictors. For example, Y ~ X1 + X2.

data

A data frame containing the variables in formula or in the recipe.

k

The number of nearest neighbors used to classify a point. Identical to k in standard k nearest neighbors.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

epsilon

Softening parameter. Scales the identity matrix added to the between class covariance, which keeps the neighborhood from collapsing onto the class boundary. 1 matches the publication.

...

Additional parameters passed to methods.

Details

This is an implementation of Hastie and Tibshirani's Discriminant Adaptive Nearest Neighbor Classification.

Value

An S3 class of type dann.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")

dann(Y ~ X1 + X2, train)

Discriminant Adaptive Nearest Neighbor Classification

Description

Discriminant Adaptive Nearest Neighbor Classification

Usage

## S3 method for class 'matrix'
dann(
  x,
  y,
  k = 5,
  neighborhood_size = max(floor(nrow(x)/5), 50),
  epsilon = 1,
  ...
)

Arguments

x

A matrix.

y

A vector of outcomes. Numeric, character, and factor are all accepted.

k

The number of nearest neighbors used to classify a point. Identical to k in standard k nearest neighbors.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

epsilon

Softening parameter. Scales the identity matrix added to the between class covariance, which keeps the neighborhood from collapsing onto the class boundary. 1 matches the publication.

...

Additional parameters passed to methods.

Details

This is an implementation of Hastie and Tibshirani's Discriminant Adaptive Nearest Neighbor Classification.

Value

An S3 class of type dann.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")
y <- as.numeric(train$Y)
x <- cbind(train$X1, train$X2)

dann(x, y)

Discriminant Adaptive Nearest Neighbor Classification

Description

Discriminant Adaptive Nearest Neighbor Classification

Usage

## S3 method for class 'recipe'
dann(
  x,
  data,
  k = 5,
  neighborhood_size = max(floor(nrow(data)/5), 50),
  epsilon = 1,
  ...
)

Arguments

x

A recipe from the recipes package.

data

A data frame containing the variables in formula or in the recipe.

k

The number of nearest neighbors used to classify a point. Identical to k in standard k nearest neighbors.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

epsilon

Softening parameter. Scales the identity matrix added to the between class covariance, which keeps the neighborhood from collapsing onto the class boundary. 1 matches the publication.

...

Additional parameters passed to methods.

Details

This is an implementation of Hastie and Tibshirani's Discriminant Adaptive Nearest Neighbor Classification.

Value

An S3 class of type dann.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)
library(recipes)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")

rec_obj <- recipe(Y ~ X1 + X2, data = train)

dann(rec_obj, train)

A helper for choosing sub_dann's numDim

Description

A helper for choosing sub_dann's numDim

Usage

graph_eigenvalues(
  x,
  ...,
  neighborhood_size = max(floor(nrow(x)/5), 50),
  weighted = FALSE,
  sphere = "mcd"
)

Arguments

x

A matrix, data frame, formula, or recipe.

...

Additional parameters passed to methods.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

weighted

Should the between class covariance matrices be weighted? FALSE matches the publication. Passed to fpc::ncoord().

sphere

Type of covariance matrix used to sphere the data. One of "mcd", "mve", "classical", or "none". Passed to fpc::ncoord().

Details

This function plots the eigenvalues found by fpc::ncoord() against their rank order. Judge how many eigenvalues are large and set sub_dann()'s numDim to that number. Keep neighborhood_size, weighted, and sphere consistent between this function and sub_dann() so the two look at the same subspace.

Value

A ggplot2 graph.


A helper for choosing sub_dann's numDim

Description

A helper for choosing sub_dann's numDim

Usage

## S3 method for class 'data.frame'
graph_eigenvalues(
  x,
  y,
  neighborhood_size = max(floor(nrow(x)/5), 50),
  weighted = FALSE,
  sphere = "mcd",
  ...
)

Arguments

x

A data frame.

y

A vector of outcomes. Numeric, character, and factor are all accepted.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

weighted

Should the between class covariance matrices be weighted? FALSE matches the publication. Passed to fpc::ncoord().

sphere

Type of covariance matrix used to sphere the data. One of "mcd", "mve", "classical", or "none". Passed to fpc::ncoord().

...

Additional parameters passed to methods.

Details

This function plots the eigenvalues found by fpc::ncoord() against their rank order. Judge how many eigenvalues are large and set sub_dann()'s numDim to that number. Keep neighborhood_size, weighted, and sphere consistent between this function and sub_dann() so the two look at the same subspace.

Value

A ggplot2 graph.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")

# Add 5 unrelated variables
train <- train %>%
  mutate(
    U1 = runif(300, -1, 1),
    U2 = runif(300, -1, 1),
    U3 = runif(300, -1, 1),
    U4 = runif(300, -1, 1),
    U5 = runif(300, -1, 1)
  )

y <- train$Y
x <- cbind(train[, 1:2], train[, 4:8])

graph_eigenvalues(x, y)

A helper for choosing sub_dann's numDim

Description

A helper for choosing sub_dann's numDim

Usage

## Default S3 method:
graph_eigenvalues(
  x,
  neighborhood_size = max(floor(nrow(x)/5), 50),
  weighted = FALSE,
  sphere = "mcd",
  ...
)

Arguments

x

An object for which no graph_eigenvalues() method exists.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

weighted

Should the between class covariance matrices be weighted? FALSE matches the publication. Passed to fpc::ncoord().

sphere

Type of covariance matrix used to sphere the data. One of "mcd", "mve", "classical", or "none". Passed to fpc::ncoord().

...

Additional parameters passed to methods.

Details

This function plots the eigenvalues found by fpc::ncoord() against their rank order. Judge how many eigenvalues are large and set sub_dann()'s numDim to that number. Keep neighborhood_size, weighted, and sphere consistent between this function and sub_dann() so the two look at the same subspace.

Value

A ggplot2 graph.


A helper for choosing sub_dann's numDim

Description

A helper for choosing sub_dann's numDim

Usage

## S3 method for class 'formula'
graph_eigenvalues(
  formula,
  data,
  neighborhood_size = max(floor(nrow(data)/5), 50),
  weighted = FALSE,
  sphere = "mcd",
  ...
)

Arguments

formula

A formula specifying the outcome and predictors. For example, Y ~ X1 + X2.

data

A data frame containing the variables in formula or in the recipe.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

weighted

Should the between class covariance matrices be weighted? FALSE matches the publication. Passed to fpc::ncoord().

sphere

Type of covariance matrix used to sphere the data. One of "mcd", "mve", "classical", or "none". Passed to fpc::ncoord().

...

Additional parameters passed to methods.

Details

This function plots the eigenvalues found by fpc::ncoord() against their rank order. Judge how many eigenvalues are large and set sub_dann()'s numDim to that number. Keep neighborhood_size, weighted, and sphere consistent between this function and sub_dann() so the two look at the same subspace.

Value

A ggplot2 graph.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")

# Add 5 unrelated variables
train <- train %>%
  mutate(
    U1 = runif(300, -1, 1),
    U2 = runif(300, -1, 1),
    U3 = runif(300, -1, 1),
    U4 = runif(300, -1, 1),
    U5 = runif(300, -1, 1)
  )

graph_eigenvalues(Y ~ X1 + X2 + U1 + U2 + U3 + U4 + U5, train)

A helper for choosing sub_dann's numDim

Description

A helper for choosing sub_dann's numDim

Usage

## S3 method for class 'matrix'
graph_eigenvalues(
  x,
  y,
  neighborhood_size = max(floor(nrow(x)/5), 50),
  weighted = FALSE,
  sphere = "mcd",
  ...
)

Arguments

x

A matrix.

y

A vector of outcomes. Numeric, character, and factor are all accepted.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

weighted

Should the between class covariance matrices be weighted? FALSE matches the publication. Passed to fpc::ncoord().

sphere

Type of covariance matrix used to sphere the data. One of "mcd", "mve", "classical", or "none". Passed to fpc::ncoord().

...

Additional parameters passed to methods.

Details

This function plots the eigenvalues found by fpc::ncoord() against their rank order. Judge how many eigenvalues are large and set sub_dann()'s numDim to that number. Keep neighborhood_size, weighted, and sphere consistent between this function and sub_dann() so the two look at the same subspace.

Value

A ggplot2 graph.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")

# Add 5 unrelated variables
train <- train %>%
  mutate(
    U1 = runif(300, -1, 1),
    U2 = runif(300, -1, 1),
    U3 = runif(300, -1, 1),
    U4 = runif(300, -1, 1),
    U5 = runif(300, -1, 1)
  )

y <- as.numeric(train$Y)
x <- cbind(train$X1, train$X2, train$U1, train$U2, train$U3, train$U4, train$U5)

graph_eigenvalues(x, y)

A helper for choosing sub_dann's numDim

Description

A helper for choosing sub_dann's numDim

Usage

## S3 method for class 'recipe'
graph_eigenvalues(
  x,
  data,
  neighborhood_size = max(floor(nrow(data)/5), 50),
  weighted = FALSE,
  sphere = "mcd",
  ...
)

Arguments

x

A recipe from the recipes package.

data

A data frame containing the variables in formula or in the recipe.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

weighted

Should the between class covariance matrices be weighted? FALSE matches the publication. Passed to fpc::ncoord().

sphere

Type of covariance matrix used to sphere the data. One of "mcd", "mve", "classical", or "none". Passed to fpc::ncoord().

...

Additional parameters passed to methods.

Details

This function plots the eigenvalues found by fpc::ncoord() against their rank order. Judge how many eigenvalues are large and set sub_dann()'s numDim to that number. Keep neighborhood_size, weighted, and sphere consistent between this function and sub_dann() so the two look at the same subspace.

Value

A ggplot2 graph.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)
library(recipes)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")

# Add 5 unrelated variables
train <- train %>%
  mutate(
    U1 = runif(300, -1, 1),
    U2 = runif(300, -1, 1),
    U3 = runif(300, -1, 1),
    U4 = runif(300, -1, 1),
    U5 = runif(300, -1, 1)
  )

rec_obj <- recipe(Y ~ X1 + X2 + U1 + U2 + U3 + U4 + U5, data = train)

graph_eigenvalues(rec_obj, train)

Discriminant Adaptive Nearest Neighbor Classification

Description

Discriminant Adaptive Nearest Neighbor Classification

Usage

## S3 method for class 'dann'
predict(object, new_data, type = "class", ...)

Arguments

object

A fitted model of class dann.

new_data

A data frame of predictors to score.

type

Type of prediction. One of "class" or "prob".

...

Not used.

Details

This is an implementation of Hastie and Tibshirani's Discriminant Adaptive Nearest Neighbor Classification.

Value

A data frame of predicted classes or class probabilities. Adheres to tidymodels standards.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")

test <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(test) <- c("X1", "X2", "Y")

model <- dann(Y ~ X1 + X2, train)
predict(model, test, "class")

predict(model, test, "prob")

Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Description

Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Usage

## S3 method for class 'sub_dann'
predict(object, new_data, type = "class", ...)

Arguments

object

A fitted model of class sub_dann.

new_data

A data frame of predictors to score.

type

Type of prediction. One of "class" or "prob".

...

Not used.

Details

An implementation of Hastie and Tibshirani's sub-dann in section 4.1 of Discriminant Adaptive Nearest Neighbor Classification.

dann's performance suffers when unrelated variables are included in the model. sub_dann first projects the predictors onto a lower dimensional subspace found by fpc::ncoord() and then fits dann on that subspace. Simulations show sub_dann generally performs better in this scenario.

Value

A data frame of predicted classes or class probabilities. Adheres to tidymodels standards.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")

test <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(test) <- c("X1", "X2", "Y")

model <- sub_dann(Y ~ X1 + X2, train)
predict(model, test, "class")

predict(model, test, "prob")

Print dann model

Description

Print dann model

Usage

## S3 method for class 'dann'
print(x, ...)

Arguments

x

A dann model.

...

Not used.

Value

The model, invisibly. Called for the side effect of printing.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")

model <- dann(Y ~ X1 + X2, train)
print(model)

Print sub_dann model

Description

Print sub_dann model

Usage

## S3 method for class 'sub_dann'
print(x, ...)

Arguments

x

A sub_dann model.

...

Not used.

Value

The model, invisibly. Called for the side effect of printing.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")

model <- sub_dann(Y ~ X1 + X2, train)
print(model)

Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Description

Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Usage

sub_dann(
  x,
  ...,
  k = 5,
  neighborhood_size = max(floor(nrow(x)/5), 50),
  epsilon = 1,
  weighted = FALSE,
  sphere = "mcd",
  numDim = ceiling(ncol(x)/2)
)

Arguments

x

A matrix, data frame, formula, or recipe.

...

Additional parameters passed to methods.

k

The number of nearest neighbors used to classify a point. Identical to k in standard k nearest neighbors.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

epsilon

Softening parameter. Scales the identity matrix added to the between class covariance, which keeps the neighborhood from collapsing onto the class boundary. 1 matches the publication.

weighted

Should the between class covariance matrices be weighted? FALSE matches the publication. Passed to fpc::ncoord().

sphere

Type of covariance matrix used to sphere the data. One of "mcd", "mve", "classical", or "none". Passed to fpc::ncoord().

numDim

Number of dimensions in the subspace dann is fit on. graph_eigenvalues() helps choose a value.

Details

An implementation of Hastie and Tibshirani's sub-dann in section 4.1 of Discriminant Adaptive Nearest Neighbor Classification.

dann's performance suffers when unrelated variables are included in the model. sub_dann first projects the predictors onto a lower dimensional subspace found by fpc::ncoord() and then fits dann on that subspace. Simulations show sub_dann generally performs better in this scenario.

Value

An S3 class of type sub_dann.


Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Description

Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Usage

## S3 method for class 'data.frame'
sub_dann(
  x,
  y,
  k = 5,
  neighborhood_size = max(floor(nrow(x)/5), 50),
  epsilon = 1,
  weighted = FALSE,
  sphere = "mcd",
  numDim = ceiling(ncol(x)/2),
  ...
)

Arguments

x

A data frame.

y

A vector of outcomes. Numeric, character, and factor are all accepted.

k

The number of nearest neighbors used to classify a point. Identical to k in standard k nearest neighbors.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

epsilon

Softening parameter. Scales the identity matrix added to the between class covariance, which keeps the neighborhood from collapsing onto the class boundary. 1 matches the publication.

weighted

Should the between class covariance matrices be weighted? FALSE matches the publication. Passed to fpc::ncoord().

sphere

Type of covariance matrix used to sphere the data. One of "mcd", "mve", "classical", or "none". Passed to fpc::ncoord().

numDim

Number of dimensions in the subspace dann is fit on. graph_eigenvalues() helps choose a value.

...

Additional parameters passed to methods.

Details

An implementation of Hastie and Tibshirani's sub-dann in section 4.1 of Discriminant Adaptive Nearest Neighbor Classification.

dann's performance suffers when unrelated variables are included in the model. sub_dann first projects the predictors onto a lower dimensional subspace found by fpc::ncoord() and then fits dann on that subspace. Simulations show sub_dann generally performs better in this scenario.

Value

An S3 class of type sub_dann.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")
y <- train$Y
x <- train[, 1:2]

sub_dann(x, y)

Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Description

Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Usage

## Default S3 method:
sub_dann(
  x,
  k = 5,
  neighborhood_size = max(floor(nrow(x)/5), 50),
  epsilon = 1,
  weighted = FALSE,
  sphere = "mcd",
  numDim = ceiling(ncol(x)/2),
  ...
)

Arguments

x

An object for which no sub_dann() method exists.

k

The number of nearest neighbors used to classify a point. Identical to k in standard k nearest neighbors.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

epsilon

Softening parameter. Scales the identity matrix added to the between class covariance, which keeps the neighborhood from collapsing onto the class boundary. 1 matches the publication.

weighted

Should the between class covariance matrices be weighted? FALSE matches the publication. Passed to fpc::ncoord().

sphere

Type of covariance matrix used to sphere the data. One of "mcd", "mve", "classical", or "none". Passed to fpc::ncoord().

numDim

Number of dimensions in the subspace dann is fit on. graph_eigenvalues() helps choose a value.

...

Additional parameters passed to methods.

Details

An implementation of Hastie and Tibshirani's sub-dann in section 4.1 of Discriminant Adaptive Nearest Neighbor Classification.

dann's performance suffers when unrelated variables are included in the model. sub_dann first projects the predictors onto a lower dimensional subspace found by fpc::ncoord() and then fits dann on that subspace. Simulations show sub_dann generally performs better in this scenario.

Value

An S3 class of type sub_dann.


Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Description

Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Usage

## S3 method for class 'formula'
sub_dann(
  formula,
  data,
  k = 5,
  neighborhood_size = max(floor(nrow(data)/5), 50),
  epsilon = 1,
  weighted = FALSE,
  sphere = "mcd",
  numDim = ceiling(ncol(data)/2),
  ...
)

Arguments

formula

A formula specifying the outcome and predictors. For example, Y ~ X1 + X2.

data

A data frame containing the variables in formula or in the recipe.

k

The number of nearest neighbors used to classify a point. Identical to k in standard k nearest neighbors.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

epsilon

Softening parameter. Scales the identity matrix added to the between class covariance, which keeps the neighborhood from collapsing onto the class boundary. 1 matches the publication.

weighted

Should the between class covariance matrices be weighted? FALSE matches the publication. Passed to fpc::ncoord().

sphere

Type of covariance matrix used to sphere the data. One of "mcd", "mve", "classical", or "none". Passed to fpc::ncoord().

numDim

Number of dimensions in the subspace dann is fit on. graph_eigenvalues() helps choose a value.

...

Additional parameters passed to methods.

Details

An implementation of Hastie and Tibshirani's sub-dann in section 4.1 of Discriminant Adaptive Nearest Neighbor Classification.

dann's performance suffers when unrelated variables are included in the model. sub_dann first projects the predictors onto a lower dimensional subspace found by fpc::ncoord() and then fits dann on that subspace. Simulations show sub_dann generally performs better in this scenario.

Value

An S3 class of type sub_dann.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")

sub_dann(Y ~ X1 + X2, train)

Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Description

Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Usage

## S3 method for class 'matrix'
sub_dann(
  x,
  y,
  k = 5,
  neighborhood_size = max(floor(nrow(x)/5), 50),
  epsilon = 1,
  weighted = FALSE,
  sphere = "mcd",
  numDim = ceiling(ncol(x)/2),
  ...
)

Arguments

x

A matrix.

y

A vector of outcomes. Numeric, character, and factor are all accepted.

k

The number of nearest neighbors used to classify a point. Identical to k in standard k nearest neighbors.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

epsilon

Softening parameter. Scales the identity matrix added to the between class covariance, which keeps the neighborhood from collapsing onto the class boundary. 1 matches the publication.

weighted

Should the between class covariance matrices be weighted? FALSE matches the publication. Passed to fpc::ncoord().

sphere

Type of covariance matrix used to sphere the data. One of "mcd", "mve", "classical", or "none". Passed to fpc::ncoord().

numDim

Number of dimensions in the subspace dann is fit on. graph_eigenvalues() helps choose a value.

...

Additional parameters passed to methods.

Details

An implementation of Hastie and Tibshirani's sub-dann in section 4.1 of Discriminant Adaptive Nearest Neighbor Classification.

dann's performance suffers when unrelated variables are included in the model. sub_dann first projects the predictors onto a lower dimensional subspace found by fpc::ncoord() and then fits dann on that subspace. Simulations show sub_dann generally performs better in this scenario.

Value

An S3 class of type sub_dann.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")
y <- as.numeric(train$Y)
x <- cbind(train$X1, train$X2)

sub_dann(x, y)

Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Description

Discriminant Adaptive Nearest Neighbor With Subspace Reduction

Usage

## S3 method for class 'recipe'
sub_dann(
  x,
  data,
  k = 5,
  neighborhood_size = max(floor(nrow(data)/5), 50),
  epsilon = 1,
  weighted = FALSE,
  sphere = "mcd",
  numDim = ceiling(ncol(data)/2),
  ...
)

Arguments

x

A recipe from the recipes package.

data

A data frame containing the variables in formula or in the recipe.

k

The number of nearest neighbors used to classify a point. Identical to k in standard k nearest neighbors.

neighborhood_size

The number of nearest neighbors used to estimate the between and within class covariance matrices that shape the neighborhood.

epsilon

Softening parameter. Scales the identity matrix added to the between class covariance, which keeps the neighborhood from collapsing onto the class boundary. 1 matches the publication.

weighted

Should the between class covariance matrices be weighted? FALSE matches the publication. Passed to fpc::ncoord().

sphere

Type of covariance matrix used to sphere the data. One of "mcd", "mve", "classical", or "none". Passed to fpc::ncoord().

numDim

Number of dimensions in the subspace dann is fit on. graph_eigenvalues() helps choose a value.

...

Additional parameters passed to methods.

Details

An implementation of Hastie and Tibshirani's sub-dann in section 4.1 of Discriminant Adaptive Nearest Neighbor Classification.

dann's performance suffers when unrelated variables are included in the model. sub_dann first projects the predictors onto a lower dimensional subspace found by fpc::ncoord() and then fits dann on that subspace. Simulations show sub_dann generally performs better in this scenario.

Value

An S3 class of type sub_dann.

Examples

library(dann)
library(mlbench)
library(magrittr)
library(dplyr)
library(recipes)

set.seed(1)
train <- mlbench.circle(300, 2) %>%
  tibble::as_tibble()
colnames(train) <- c("X1", "X2", "Y")

rec_obj <- recipe(Y ~ X1 + X2, data = train)

sub_dann(rec_obj, train)