I am trying to implement the algorithm described in reference 1 using cvxpy
. However I am struggling to constrain the matrix $Z_j$ as described in equations (33-35). Citing the paper ($\bar{\mu_j}$ is just a vector):
Remaining constraint on $R_j$ is:
$$Z_j= \left[ \begin{matrix} 1 && (\bar{\mu_j})^{'} \\ \bar{\mu_j} && U \end{matrix} \right]$$
where $U$ must be $\bar{\mu_j}(\bar{\mu_j})^{'}$. since the constraint is not linear, we relax it such that:
$$U-\bar{\mu_j}(\bar{\mu_j})^{'}\succeq 0$$
by the property that:
$$Z_j\succeq0 \Leftrightarrow U-\bar{\mu_j}(\bar{\mu_j})^{'}\succeq0$$
where $Z_j \succeq 0$ denotes that $Z_j$ is positive semi-definite matrix.
I tried to force this structure by doing the following:
u = cvx.Variable(D)
U = u*u.T
Zj = cvx.bmat([[1, u.T], [u, U]])
However cvxpy
complains that u*u.T
is incorrect:
UserWarning: Forming a nonconvex expression (affine)*(affine).
And solver fails:
cvxpy.error.DCPError: Problem does not follow DCP rules
It appears that outer product of two vectors cannot be implemented as such. Any ideas on how to enforce this constraint?
References
- Yun, Sungrack, and Chang D. Yoo. "Loss-scaled large-margin Gaussian mixture models for speech emotion classification." IEEE Transactions on Audio, Speech, and Language Processing 20.2 (2012): 585-59