I am doing a matrix completion project. Assume that I have an incomplete matrix like
func1 func2 func3
prot1 0 0 1
prot2 1 0 1
prot3 0 0 0
I want to use Standard Matrix Completion to recover the matrix, like
func1 func2 func3
prot1 0.1 0.9 1
prot2 1 0.2 1
prot3 0.3 0.8 0.7
Standard Matrix Completion refers to
$$\min_{W, H} \frac{1}{2} \Vert W \Vert_F^2 + \frac{1}{2} \Vert H \Vert_F^2 + \frac{\lambda}{2} \Vert \Omega \circ (W H^T - Y) \Vert_F^2$$
and $X = WH^T$.
However, I find that the recovered matrix X is not range between 0 and 1, say (just an example, not the truth)
func1 func2 func3
prot1 -0.1 1.1 1
prot2 1 0.2 1
prot3 0.3 2.1 0.7
How can I restrict the range (here 0-1) of unobserved entries in X (in particular how can I implement it in Tensorflow)?
In general, you can add box constraints to the orginal problem to enforce this: \begin{align} \min_{W, H} \quad & \frac 1 2 \|W\|_F^2 + \frac 1 2 \|H\|_F^2 + \frac \lambda 2 \|\Omega \circ (WH^T - Y)\|_F^2, \\ \text{subject to} \quad & 0 \leq W_{i,:}^T H_{j,:} \leq 1, \; \forall i, j, \end{align} where $A_{i,:}$ denotes the $i$-th row of $A$, or equivalently \begin{align} \min_{W, H, X} \quad & \frac 1 2 \|W\|_F^2 + \frac 1 2 \|H\|_F^2 + \frac \lambda 2 \|\Omega \circ (WH^T - Y)\|_F^2, \\ \text{subject to} \quad & X = W H^T, \\ & 0 \leq X_{i,j} \leq 1, \; \forall i, j. \end{align} How these constraints can be implemented with TensorFlow I cannot comment.