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(x, y, opts \\ [])

Fit model to data. Takes as arguments:

  • x - training samples, {num_samples, num_features} shaped tensor

  • y - targets, {num_samples, num_targets} shaped y 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 is 2.

  • :scale (boolean/0) - Whether to scale x and y. The default value is true.

Return Values

The function returns fitted estimator represented by struct with the following parameters:

  • :x_mean - tensor of shape {num_features} which represents x tensor mean values calculated along axis 0.

  • :y_mean - tensor of shape {num_targets} which represents x tensor mean values calculated along axis 0.

  • :x_std - tensor of shape {num_features} which represents x tensor standard deviation values calculated along axis 0.

  • :y_std - tensor of shape {num_targets} which represents y 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]
  ]
>

fit_transform(x, y, opts \\ [])

Learn and apply the dimensionality reduction.

The arguments are:

  • x - training samples, {num_samples, num_features} shaped tensor

  • y - targets, {num_samples, num_targets} shaped y 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 is 2.

  • :scale (boolean/0) - Whether to scale x and y. The default value is true.

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]
  ]
>

transform(model, x, y, opts \\ [])

Apply the dimensionality reduction. Takes as arguments:

  • fitted estimator struct which is return value of fit/3 function from this module

  • x - training samples, {num_samples, num_features} shaped tensor

  • y - targets, {num_samples, num_targets} shaped y 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 is 2.

  • :scale (boolean/0) - Whether to scale x and y. The default value is true.

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]
  ]
>