View Source Scholar.CrossDecomposition.PLSSVD (Scholar v0.4.0)
Partial Least Square SVD.
This transformer simply performs a SVD on the cross-covariance matrix.
It is able to project both the training data x
and the targets
y
. The training data x
is projected on the left singular vectors, while
the targets are projected on the right singular vectors.
Summary
Functions
Fit model to data. Takes as arguments:
Learn and apply the dimensionality reduction.
Apply the dimensionality reduction. Takes as arguments:
Functions
Fit model to data. Takes as arguments:
x
- training samples,{num_samples, num_features}
shaped tensory
- targets,{num_samples, num_targets}
shapedy
tensor
Options
:num_components
(pos_integer/0
) - The number of components to keep. Should be in[1, min(n_samples, n_features, n_targets)]
. The default value is2
.:scale
(boolean/0
) - Whether to scalex
andy
. The default value istrue
.
Return Values
The function returns fitted estimator represented by struct with the following parameters:
:x_mean
- tensor of shape{num_features}
which representsx
tensor mean values calculated along axis 0.:y_mean
- tensor of shape{num_targets}
which representsx
tensor mean values calculated along axis 0.:x_std
- tensor of shape{num_features}
which representsx
tensor standard deviation values calculated along axis 0.:y_std
- tensor of shape{num_targets}
which representsy
tensor standard deviation values calculated along axis 0.:x_weights
- tensor of shape{num_features, num_components}
the left singular vectors of the SVD of the cross-covariance matrix.:y_weights
- tensor of shape{num_components, num_targets}
the transposed right singular vectors of the SVD of the cross-covariance matrix.
Examples
iex> x = Nx.tensor([[0.0, 0.0, 1.0],
...> [1.0, 0.0, 0.0],
...> [2.0, 2.0, 2.0],
...> [2.0, 5.0, 4.0]])
iex> y = Nx.tensor([[0.1, -0.2],
...> [0.9, 1.1],
...> [6.2, 5.9],
...> [11.9, 12.3]])
iex> model = Scholar.CrossDecomposition.PLSSVD.fit(x, y)
iex> model.x_mean
#Nx.Tensor<
f32[3]
[1.25, 1.75, 1.75]
>
iex> model.y_std
#Nx.Tensor<
f32[2]
[5.467098712921143, 5.661198616027832]
>
iex> model.x_weights
#Nx.Tensor<
f32[3][2]
[
[0.521888256072998, -0.11256571859121323],
[0.6170258522033691, 0.7342619299888611],
[0.5889922380447388, -0.6694686412811279]
]
>
Learn and apply the dimensionality reduction.
The arguments are:
x
- training samples,{num_samples, num_features}
shaped tensory
- targets,{num_samples, num_targets}
shapedy
tensor
Options
:num_components
(pos_integer/0
) - The number of components to keep. Should be in[1, min(n_samples, n_features, n_targets)]
. The default value is2
.:scale
(boolean/0
) - Whether to scalex
andy
. The default value istrue
.
Return Values
Returns tuple with transformed data {x_transformed, y_transformed}
where:
x_transformed
is{num_samples, num_features}
shaped tensor.y_transformed
is{num_samples, num_features}
shaped tensor.
Examples
iex> x = Nx.tensor([[0.0, 0.0, 1.0],
...> [1.0, 0.0, 0.0],
...> [2.0, 2.0, 2.0],
...> [2.0, 5.0, 4.0]])
iex> y = Nx.tensor([[0.1, -0.2],
...> [0.9, 1.1],
...> [6.2, 5.9],
...> [11.9, 12.3]])
iex> {x, y} = Scholar.CrossDecomposition.PLSSVD.fit_transform(x, y)
iex> x
#Nx.Tensor<
f32[4][2]
[
[-1.397004246711731, -0.10283949971199036],
[-1.1967883110046387, 0.17159013450145721],
[0.5603229403495789, -0.10849219560623169],
[2.0334696769714355, 0.039741579443216324]
]
>
iex> y
#Nx.Tensor<
f32[4][2]
[
[-1.2260178327560425, -0.019306711852550507],
[-0.9602956175804138, 0.04015407711267471],
[0.3249155580997467, -0.04311027377843857],
[1.8613981008529663, 0.022262824699282646]
]
>
Apply the dimensionality reduction. Takes as arguments:
fitted estimator struct which is return value of
fit/3
function from this modulex
- training samples,{num_samples, num_features}
shaped tensory
- targets,{num_samples, num_targets}
shapedy
tensor
Options
:num_components
(pos_integer/0
) - The number of components to keep. Should be in[1, min(n_samples, n_features, n_targets)]
. The default value is2
.:scale
(boolean/0
) - Whether to scalex
andy
. The default value istrue
.
Return Values
Returns tuple with transformed data {x_transformed, y_transformed}
where:
x_transformed
is{num_samples, num_features}
shaped tensor.y_transformed
is{num_samples, num_features}
shaped tensor.
Examples
iex> x = Nx.tensor([[0.0, 0.0, 1.0],
...> [1.0, 0.0, 0.0],
...> [2.0, 2.0, 2.0],
...> [2.0, 5.0, 4.0]])
iex> y = Nx.tensor([[0.1, -0.2],
...> [0.9, 1.1],
...> [6.2, 5.9],
...> [11.9, 12.3]])
iex> model = Scholar.CrossDecomposition.PLSSVD.fit(x, y)
iex> {x, y} = Scholar.CrossDecomposition.PLSSVD.transform(model, x, y)
iex> x
#Nx.Tensor<
f32[4][2]
[
[-1.397004246711731, -0.10283949971199036],
[-1.1967883110046387, 0.17159013450145721],
[0.5603229403495789, -0.10849219560623169],
[2.0334696769714355, 0.039741579443216324]
]
>
iex> y
#Nx.Tensor<
f32[4][2]
[
[-1.2260178327560425, -0.019306711852550507],
[-0.9602956175804138, 0.04015407711267471],
[0.3249155580997467, -0.04311027377843857],
[1.8613981008529663, 0.022262824699282646]
]
>