sklearn中的SparseCoder是什么?又该如何使用

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,ARm×n,bRm×1
x ∈ R n × 1 x \in R^{n \times 1} xRn×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)                 
  • AT是矩阵A的转置,即shape为n x m。在机器学习领域,n是样本数目,m是特征数目
  • b是目标特征
  • x是求得的的组合系数。即x的值将A的每一列线性组合之后,可以得到b。
  • transform_alpha 是一个L1的惩罚项。
  • transform_algorithm是优化方法。
  • positive_code为true,则强制求出的x大于0。

SparseCoder的应用场景不多,因为本身无法考虑更多的约束,比如加入不等式,就不好求解了。
在3dmm人脸重建中,可以应用SparseCoder。
因为3dmm的公式中。就有求表情基系数的地方,而那里是线性方程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值