As you said above, the matrix M can be decomposed as the product of three matrices: U * S * V * . The geometric meaning is as follows: any transformation can be considered as a rotation sequence (V * ), scaling (S) and rotation again (U). Here's a good description and animation .
What is important to us? The matrix S is diagonal - all its values lying on the main diagonal are 0.
how
np.diag(s) array([[ 2.00604441, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ], [ 0. , 1.22160478, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ], [ 0. , 0. , 1.09816315, 0. , 0. , 0. , 0. , 0. , 0. , 0. ], [ 0. , 0. , 0. , 0.97748473, 0. , 0. , 0. , 0. , 0. , 0. ], [ 0. , 0. , 0. , 0. , 0.81374786, 0. , 0. , 0. , 0. , 0. ], [ 0. , 0. , 0. , 0. , 0. , 0.77634993, 0. , 0. , 0. , 0. ], [ 0. , 0. , 0. , 0. , 0. , 0. , 0.73250287, 0. , 0. , 0. ], [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.65854628, 0. , 0. ], [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.27985695, 0. ], [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.09252313]])
Geometrically - each value is a scale factor along a specific axis. For our purposes (classification and regression), these values show the effect of a particular axis on the overall result.
As you can see, these values are reduced from 2.0 to 0.093. One of the most important applications is the lightweight low-rank matrix approximation with a given accuracy. If you do not need ultra-precise decomposition (this is true for problems with ML), you can reset the lowest values and save only the important ones. Thus, you can step by step clarify your decision: evaluate the quality with the help of a test suite, reset the lowest values and repeat. As a result, you get an easy and reliable solution.

Here the good candidates to be reduced are 8 and 9, then 5-7, and as a last option, you can bring the model closer to only one value - first.