Added bidiag struct + decomp function

This commit is contained in:
Joakim Skogholt 2023-05-14 08:49:00 +02:00
parent 76eb148928
commit 46a6c0c238

View file

@ -22,6 +22,20 @@ struct TRSVD
end
struct TRBidiag
W::Matrix{Float64}
B::Bidiagonal{Float64, Vector{Float64}}
T::Matrix{Float64}
y::Vector{Float64}
mX::Matrix{Float64}
my::Float64
regType::String
regParam1::Float64
regMat::Matrix{Float64}
n::Int64
p::Int64
end
"""
### TO DO: ADD FRACTIONAL DERIVATIVE REGULARIZATION ###
@ -71,6 +85,28 @@ return regMat
end
"""
function TRBidiagDecomp(X, y, A=(minimum(size(X))-1), regType="L2", regParam1=0, regParam2=1e-14)
Calculates regularization matrix (using function "RegularizationMatrix"),
and centres and transforms data matrix according to "X / regMat".
Output is an object of type "TRBidiag" and is used as input to other TR functions.
"""
function TRBidiagDecomp(X, y, A=(minimum(size(X))-1), regType="L2", regParam1=0, regParam2=1e-14)
n, p = size(X);
mX = mean(X, dims=1);
X = X .- mX;
my = mean(y);
y = vec(y .- my);
regMat = regularizationMatrix(X; regType, regParam1, regParam2);
X = X / regMat;
_, W, B, T = bidiag2(X, y, A);
TRObj = TRBidiag(W, B, T, y, mX, my, regType, regParam1, regMat, n, p);
return TRObj
end
"""
function TRSVDDecomp(X, regType="L2", regParam1=0, regParam2=1e-14)