K-subspaces (KSS)
Theory / Background
Write up mathematical background here
Syntax
The following function runs KSS:
SubspaceClustering.kss
— Functionkss(X::AbstractMatrix{<:Real}, d::AbstractVector{<:Integer};
maxiters = 100,
rng = default_rng(),
Uinit = [randsubspace(rng, size(X, 1), di) for di in d])
Cluster the N
data points in the D×N
data matrix X
into K
clusters via the K-subspaces (KSS) algorithm with corresponding subspace dimensions d[1],...,d[K]
. Output is a KSSResult
containing the resulting cluster assignments c[1],...,c[N]
, subspace basis matrices U[1],...,U[K]
, and metadata about the algorithm run.
KSS seeks to cluster data points by their subspace by minimizing the following total cost
\[\sum_{i=1}^N \| X[:, i] - U[c[i]] U[c[i]]' X[:, i] \|_2^2\]
with respect to the cluster assignments c[1],...,c[N]
and subspace basis matrices U[1],...,U[K]
.
Keyword arguments
maxiters::Integer = 100
: maximum number of iterationsrng::AbstractRNG = default_rng()
: random number generator (used when reinitializing the subspace for an empty cluster)Uinit::AbstractVector{<:AbstractMatrix{<:AbstractFloat}} = [randsubspace(rng, size(X, 1), di) for di in d]
: vector ofK
initial subspace basis matrices to use (eachUinit[k]
should beD×d[k]
)
See also KSSResult
.
The output has the following type:
SubspaceClustering.KSSResult
— TypeKSSResult{
TU<:AbstractVector{<:AbstractMatrix{<:AbstractFloat}},
Tc<:AbstractVector{<:Integer},
T<:Real}
The output of kss
.
Fields
U::TU
: vector of subspace basis matricesU[1],...,U[K]
c::Tc
: vector of cluster assignmentsc[1],...,c[N]
iterations::Int
: number of iterations performedtotalcost::T
: final value of total cost functioncounts::Vector{Int}
: vector of cluster sizescounts[1],...,counts[K]
converged::Bool
: final convergence status
Examples
KSS with equal subspace dimensions
Write up example here
KSS with different subspace dimensions
Write up example here
KSS with reproducible random number generation
Write up example here
KSS with custom initialization
Write up example here
KSS with custom initialization coming from clusters
Write up example here where the subspace initialization is estimated from clusters