哪个稀疏矩阵表示与 sklearn.svm.LinearSVC 一起使用

Posted

技术标签:

【中文标题】哪个稀疏矩阵表示与 sklearn.svm.LinearSVC 一起使用【英文标题】:Which sparse Matrix representation to use with sklearn.svm.LinearSVC 【发布时间】:2017-09-03 05:27:45 【问题描述】:

我有一个大型数据集(10 000 行),其中每一行(样本)由位列表(~200 000 位)表示。每个位代表样本中特征的缺失或存在.所以,这是一个大型 (10 000 x 200 000) 高维稀疏数据集

为了节省一些内存空间,对于每个样本,我只保存非零位的索引。 具有 7 个特征的向量示例:

[0, 0, 1, 0, 0, 1, 1] ===> [2, 5, 6]

我正在为所有数据集执行此操作。让结果为X10 000 可变大小向量)。初始数据集3x4的示例:

                 [[0,0,1,0],       [[2],
  initial_data=   [0,1,1,0],  ===>  [1,2],   = X
                  [0,1,0,1]]        [1,3]]

每一行都标有以下两个标签之一:malignantbenign。 一个线性支持向量分类模型(sklearn.svm.LinearSVC 中的那个)在X 表示的数据上进行训练。知道上述模型接受稀疏输入并且SciPy 中可能有七种表示:

csc_matrix:压缩稀疏列格式 csr_matrix:压缩稀疏行格式 bsr_matrix:块稀疏行格式 lil_matrix:列表格式列表 dok_matrix:键格式字典 coo_matrix:COOrdinate 格式(又名 IJV,三元组格式) dia_matrix:对角线格式

哪种表示对于训练模型更有效?以及如何有效地从X 传递到该表示?

【问题讨论】:

【参考方案1】:

csr 是要走的路,sklearn's sources 支持。摘录:

class LinearSVC(BaseEstimator, LinearClassifierMixin,
            _LearntSelectorMixin, SparseCoefMixin):
    ...
    ...
    X, y = check_X_y(X, y, accept_sparse='csr',
                     dtype=np.float64, order="C")

不建议使用 csr 和许多其他格式直接构建稀疏矩阵(添加东西/更改稀疏结构非常昂贵)。

使用 dok_matrix / lil_matrix 从您的数据构建一个稀疏矩阵(应该很简单),然后进行转换(在线性时间内完成)。

X = X.tocsr()

另外请记住,您传递的所有数据都在内部转换为 liblinear,sklearn 使用的外部库具有自己的数据结构。所以如果你传递了错误的格式;这是应该发生的一次性转换成本。 的训练过程不在乎!

【讨论】:

【参考方案2】:

所有格式都有to... 方法可以转换为其他格式。因此,您可以以一种格式构建并以另一种格式进行计算,而无需太多额外成本。

coo_matrix - 输入很容易理解和创建 - 只有 3 个相同长度的数组。 如果您已经有一个密集数组,只需将其设置为这种格式,它就会提取索引。

csr_matrix - 这是实现大多数计算的格式。 coo.tocsr(...) 被广泛使用。请注意,它可以使用 coo 样式的输入。要使用 indptr 输入样式,您必须了解更多有关格式的知识。

csc_matrix - 只是csr 的变体。它的转置排序。

lil_matrix - 这也很容易理解。并且对于增量构建矩阵来说是适度的。 不如对密集阵列的增量更改。

bsr_matrix - 真的是一种从一堆较小的矩阵中构建矩阵的方法。在内部使用coo 格式。适用于自然面向块的应用程序。

dok_matrix - 实际上是一个字典子类。可以增量使用,但仍然比使用类似键填充您自己的字典要慢。

dia_matrix - 允许您根据对角线定义矩阵。只是一种中间形式。仅当您的代码具有很强的对角线方面时才有用。

【讨论】:

以上是关于哪个稀疏矩阵表示与 sklearn.svm.LinearSVC 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

稀疏矩阵--三元组表示法和十字链表示法

稀疏表示字典学习和压缩感知(基本概念)

稀疏矩阵的表示法

哪个 SciPy 稀疏矩阵类最适合计算距离矩阵?

C#数据结构(4) 稀疏矩阵与稀疏方阵

稀疏矩阵