Non-Negative Matrix and Tensor Factorizations
Developped in collaboration with Advestis (Github)
from adnmtf import NMF
import numpy as np
w = np.array([[1, 2],
[3, 4],
[5, 6],
[7, 8],
[9, 10],
[11, 12]])
h = np.array([[0.1, 0.2, 0.3, 0.4, 0.5, 0.6],
[0.9, 0.8, 0.7, 0.6, 0.5, 0.4]])
m0 = w.dot(h)
my_nmfmodel = NMF(n_components=2)
estimator_ = my_nmfmodel.fit_transform(m0)
estimator_ = my_nmfmodel.predict(estimator_)
In this example, the matrix to be factorized is generated by the dot product of:
W | |
---|---|
1 | 2 |
3 | 4 |
5 | 6 |
7 | 8 |
9 | 10 |
11 | 12 |
and |
H | |||||
---|---|---|---|---|---|
0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 |
0.9 | 0.8 | 0.7 | 0.6 | 0.4 | 0.4 |
- NMF instantiates a NMF class with 2 components.
- fit_transform calls the functions below in the given order:
- nmtf_base module: non_negative_factorization, nmf_init, r_ntf_solve
- nmtf_core module: ntf_solve, ntf_solve_simple, ntf_update
- predict derives from fit_transform outputs ordered sample and feature indexes for future use in ordered heatmaps. predict calls nmf_predict and build_clusters in the nmtf_base module
from adnmtf import NTF
import pandas as pd
DATA_PATH = ...
df = pd.read_csv(DATA_PATH)
m0 = df.values
n_blocks = 5
my_ntfmodel = NTF(n_components=5)
estimator_ = my_ntfmodel.fit_transform(m0, n_blocks)
estimator_ = my_ntfmodel.predict(estimator_)
In this example, the tensor to be factorized is read in file data_ntf.csv. The tensor has 5 layers in the 3rd dimension and is formatted as a table with 5 blocks concatenated horizontally.
- NTF instantiates a NTF class with 5 components.
- fit_transform calls the functions below in the given order:
- nmtf_base module: non_negative_tensor_factorization, ntf_init, r_ntf_solve
- nmtf_core module: ntf_solve, ntf_solve_simple, ntf_update
- predict derives from fit_transform outputs ordered sample and feature indexes for future use in ordered heatmaps. predict calls nmf_predict and build_clusters in the nmtf_base module