# How to make sure matrix completion can generate a matrix with values in expected range?

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)?

• Please fix the formatting in your post using LaTex. – orlp Apr 14 '19 at 16:52
• Add non-negativity constraints. – Yuval Filmus Apr 14 '19 at 19:22
• @YuvalFilmus How can I add non-negativity constraints in Tensorflow? Besides, how can I restrict the value less than 1? – Lizhi Liu Apr 15 '19 at 0:29
• Your "incomplete" matrix looks quite complete to me. – Rodrigo de Azevedo Apr 15 '19 at 16:23
• What do W, H and T represent? What is their shape? What are their properties? – Martin Thoma Apr 15 '19 at 16:35