SparseCoder其实是一个最优化求解方法。它所处理的对象是线性方程。
假设
A
x
=
b
,
A
∈
R
m
×
n
,
b
∈
R
m
×
1
Ax= b, A \in R^{m \times n}, b \in R^{m\times 1}
Ax=b,A∈Rm×n,b∈Rm×1
则
x
∈
R
n
×
1
x \in R^{n \times 1}
x∈Rn×1
现在想求x。则可以使用SparseCoder
上述问题可以等价为
a
r
g
m
i
n
x
∣
∣
x
1
.
a
1
⃗
+
x
2
.
a
2
⃗
+
.
.
.
x
n
.
a
n
⃗
−
b
∣
∣
argmin_x\quad ||x_1 . \vec{a1} + x_2 . \vec{a2} + ... x_n . \vec{a_n} - b||
argminx∣∣x1.a1+x2.a2+...xn.an−b∣∣
下面介绍用法。
from sklearn.decomposition import SparseCoder
coder = SparseCoder(dictionary=AT, transform_n_nonzero_coefs=None,
transform_alpha=1, transform_algorithm='lasso_lars' , positive_code=True)
x = coder.transform(b)
SparseCoder的应用场景不多,因为本身无法考虑更多的约束,比如加入不等式,就不好求解了。
在3dmm人脸重建中,可以应用SparseCoder。
因为3dmm的公式中。就有求表情基系数的地方,而那里是线性方程。