Provide a separate implementation of PCA whitening similar to Whitening, and remove duplicated code:
|
function _invsqrtm!(C::AbstractMatrix{<:Real}) |
|
n = size(C, 1) |
|
size(C, 2) == n || error("C must be a square matrix.") |
|
E = eigen!(Symmetric(C)) |
|
U = E.vectors |
|
evs = E.values |
|
for i = 1:n |
|
@inbounds evs[i] = 1.0 / sqrt(sqrt(evs[i])) |
|
end |
|
rmul!(U, Diagonal(evs)) |
|
return U * transpose(U) |
|
end |
Note: double
sqrt application
|
C = rmul!(Z * transpose(Z), 1.0 / (n - 1)) |
|
Efac = eigen(C) |
|
ord = sortperm(Efac.values; rev=true) |
|
(v, P) = extract_kv(Efac, ord, k) |
|
W0 = rmul!(P, Diagonal(1 ./ sqrt.(v))) |
|
Z = W0'Z |
|
function _lda_whitening!(C::AbstractMatrix{T}, regcoef::T) where T<:Real |
|
n = size(C,1) |
|
E = eigen!(Symmetric(C)) |
|
v = E.values |
|
a = regcoef * maximum(v) |
|
for i = 1:n |
|
@inbounds v[i] = 1.0 / sqrt(v[i] + a) |
|
end |
|
return rmul!(E.vectors, Diagonal(v)) |
|
end |
Provide a separate implementation of PCA whitening similar to
Whitening, and remove duplicated code:MultivariateStats.jl/src/whiten.jl
Lines 148 to 159 in 99ee965
Note: double
sqrtapplicationMultivariateStats.jl/src/ica.jl
Lines 238 to 243 in 99ee965
MultivariateStats.jl/src/lda.jl
Lines 380 to 389 in 99ee965