使用稀疏化(字典学习)工具spams做分类

spams简介

SPAMS (SPArse Modeling Software)是一个为解决各种稀疏估计问题的开源优化工具箱,其主页为http://spams-devel.gforge.inria.fr/index.html
可以解决以下问题:
①Dictionary learning and matrix factorization
(NMF, sparse PCA, …) 字典学习与矩阵分解,如(NMF非负矩阵分解,sparse PCA稀疏PCA,…)
②Solving sparse decomposition problems with LARS
(coordinate descent, OMP, SOMP, proximal methods 使用LARS、快速下降法、OMP(Orthogonal Matching Pursuit,正交匹配追踪)、SOMP等算法解决稀疏分解问题
③Solving structured sparse decomposition problems
(l1/l2, l1/linf, sparse group lasso, tree-structured regularization, structured sparsity with overlapping groups,…). 解决结构化稀疏分解问题
spams工具箱虽然很强大,但是并不是很容易上手,底层是C++写的,使用前还要首先进行编译。

字典学习

可以看这篇论文:
http://www.di.ens.fr/willow/pdfs/icml09.pdf
假设我们用一个M*N的矩阵表示数据集X,每一行代表一个样本,每一列代表样本的一个属性,一般而言,该矩阵是稠密的,即大多数元素不为0。
稀疏表示的含义是,寻找一个系数矩阵A(K*N)以及一个字典矩阵B(M*K),使得B*A尽可能的还原X,且A尽可能的稀疏。A便是X的稀疏表示。
字典分两种,一种是隐性字典,implicit dictionary,这种主要是由它们的算法表现出来的,而不是矩阵结构,比如wavelet,curvelet,contourlet,等等。另一种是通过机器学习来从样本中获取字典,这种字典表现为一种显性矩阵,explicit matrix,而算法是用来适应矩阵的,比如PCA,GPCA,MOD,K-SVD等等,这种字典的好处在于比前一种灵活,表现也好,坏处就是耗费时间和运算资源,另外复杂的约束限制了字典的大小以及需要处理的信号的维度。
字典学习的稀疏化表示求解的问题如下:
这里写图片描述
字典学习的示意图如下:
使用稀疏化(字典学习)工具spams做分类_第1张图片
给定一个字典和一个稀疏化矩阵,我就可以通过映射得到一个小的多的矩阵X,这就实现了降维。

spams做分类

那么如何使用字典学习做分类呢?
我们不妨看下spams提供的主要函数,经过挑选,选择lasso,函数形式和主要参数如下:
这里写图片描述
使用稀疏化(字典学习)工具spams做分类_第2张图片

其实字典学习不过是求得字典与最后表达的一种映射关系,对于分类问题,我们可以将字典设定为原始输入数据,将输出的X置为目标分类变量,那么我们就相当于要求解从原始数据到分类目标值的一种映射关系,这样就解决了分类问题,如下图所示:
使用稀疏化(字典学习)工具spams做分类_第3张图片

将原始数据作为字典,分类目标Y作为稀疏化表示,我们就可以求出α矩阵,这个矩阵代表的是一种映射关系。

此外,我门还可以使用lassoWeight方法:
使用稀疏化(字典学习)工具spams做分类_第4张图片
我们可以做类似使用,只不过相当于我们可以给每列特征加权重。具体的使用方法不再赘述。

你可能感兴趣的:(数据挖掘算法分析)