K-subspaces (KSS)
Theory / Background
Syntax
The following function runs KSS:
SubspaceClustering.kss — Function
kss(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 ofKinitial subspace basis matrices to use (eachUinit[k]should beD×d[k])
See also KSSResult.
The output has the following type:
SubspaceClustering.KSSResult — Type
KSSResult{
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