Learn R Programming

dml (version 1.1.0)

GdmFull: Global Distance Metric Learning

Description

Performs Global Distance Metric Learning (GDM) on the given data, learning a full matrix.

Usage

GdmFull(data, simi, dism, maxiter = 100)

Arguments

data
n * d data matrix. n is the number of data points, d is the dimension of the data. Each data point is a row in the matrix.
simi
n * 2 matrix describing the similar constrains. Each row of matrix is serial number of a similar pair in the original data. For example, pair(1, 3) represents the first observation is similar the 3th observation in the original data.
dism
n * 2 matrix describing the dissimilar constrains as simi. Each row of matrix is serial number of a dissimilar pair in the original data.
maxiter
numeric, the number of iteration.

Value

list of the GdmDiag results:
newData
GdmDiag transformed data
fullA
suggested Mahalanobis matrix
dmlA
matrix to transform data, square root of diagonalA
converged
whether the iteration-projection optimization is converged or not
For every two original data points (x1, x2) in newData (y1, y2):$(x2 - x1)' * A * (x2 - x1) = || (x2 - x1) * B ||^2 = || y2 - y1 ||^2$

Details

Put GdmFull function details here.

References

Steven C.H. Hoi, W. Liu, M.R. Lyu and W.Y. Ma (2003). Distance metric learning, with application to clustering with side-information.

Examples

Run this code
## Not run: 
# set.seed(123)
# library(MASS)
# library(scatterplot3d)
# 
# # generate simulated Gaussian data
# k = 100
# m <- matrix(c(1, 0.5, 1, 0.5, 2, -1, 1, -1, 3), nrow =3, byrow = T)
# x1 <- mvrnorm(k, mu = c(1, 1, 1), Sigma = m)
# x2 <- mvrnorm(k, mu = c(-1, 0, 0), Sigma = m)
# data <- rbind(x1, x2)
# 
# # define similar constrains
# simi <- rbind(t(combn(1:k, 2)), t(combn((k+1):(2*k), 2)))
# 
# temp <-  as.data.frame(t(simi))
# tol <- as.data.frame(combn(1:(2*k), 2))
# 
# # define disimilar constrains
# dism <- t(as.matrix(tol[!tol %in% simi]))
# 
# # transform data using GdmFull
# result <- GdmFull(data, simi, dism)
# newData <- result$newData
# # plot original data
# color <- gl(2, k, labels = c("red", "blue"))
# par(mfrow = c(2, 1), mar = rep(0, 4) + 0.1)
# scatterplot3d(data, color = color, cex.symbols = 0.6,
# 			  xlim = range(data[, 1], newData[, 1]),
# 			  ylim = range(data[, 2], newData[, 2]),
# 			  zlim = range(data[, 3], newData[, 3]),
# 			  main = "Original Data")
# # plot GdmFull transformed data
# scatterplot3d(newData, color = color, cex.symbols = 0.6,
# 			  xlim = range(data[, 1], newData[, 1]),
# 			  ylim = range(data[, 2], newData[, 2]),
# 			  zlim = range(data[, 3], newData[, 3]),
# 			  main = "Transformed Data")
# ## End(Not run)

Run the code above in your browser using DataLab