CP decomposition
The CP (canonical polyadic) decomposition writes a tensor as a sum of simple, rank-1 tensors: T = sum over r of a_r (x) b_r (x) c_r for an order-3 tensor. Each term is an outer product of one vector per mode, and the number of terms is the rank you are aiming for. It is the most direct generalization of the singular value decomposition, which writes a matrix as a sum of rank-1 pieces u_r*sigma_r*v_r^T.
Its most remarkable property is essential uniqueness. For matrices, the rank-1 decomposition is wildly non-unique: you can rotate the singular vectors among equal singular values, or mix factors however you like as long as the product is preserved. For tensors of order 3 or more, a CP decomposition with few enough terms is unique up to the unavoidable freedoms of scaling each vector and reordering the terms — Kruskal's theorem gives a precise condition.
That uniqueness is why CP is a workhorse in data analysis: when a tensor genuinely arises as a sum of rank-1 patterns (a few hidden 'factors' acting across modes), CP can recover those factors without the rotational ambiguity that plagues matrix factor analysis. This underlies blind source separation, chemometrics (fluorescence spectroscopy), and latent-variable models.
The honest caveats. The minimal CP rank is exactly the (hard, NP-hard) tensor rank, so you usually fit an assumed rank rather than find the true one. The best rank-r approximation may not even exist, because the set of rank-r tensors is not closed (the border-rank phenomenon), so fitting algorithms can diverge with factor norms blowing up while their cancellation improves the fit. Use it, but watch for these instabilities.
CP sums rank-1 outer products across all modes — the order-3 echo of the SVD.
Contrast with SVD: an SVD always exists, is essentially unique (up to sign/rotation in degenerate cases), and gives the best low-rank fit. CP often is unique where SVD is not, but may fail to have a best fit. The trade is uniqueness for existence guarantees.