首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与sklearn.svm.LinearSVC一起使用的稀疏矩阵表示

与sklearn.svm.LinearSVC一起使用的稀疏矩阵表示
EN

Stack Overflow用户
提问于 2017-04-07 18:19:21
回答 2查看 3.1K关注 0票数 1

我有一个大数据集(10 000行),其中每一行(样本)都由一个位列表(~200 000位)表示,.Each位表示示例中缺少或存在该特性。所以,(**10 000 x 200 000**)是一个大型的高维稀疏数据集

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

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

我这么做是为了所有的数据集。将结果设为X (10 000可变大小向量)。初始数据集3x4的示例

代码语言:javascript
复制
                 [[0,0,1,0],       [[2],
  initial_data=   [0,1,1,0],  ===>  [1,2],   = X
                  [0,1,0,1]]        [1,3]]

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

  • csc_matrix:压缩稀疏列格式
  • csr_matrix:压缩稀疏行格式
  • bsr_matrix:块稀疏行格式
  • lil_matrix:列表格式
  • dok_matrix:密钥格式字典
  • coo_matrix: COOrdinate格式(又名IJV,triplet格式)
  • dia_matrix: DIAgonal格式

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-07 19:12:26

csr是一种可行的方法,得到了滑雪板来源的支持。节选:

代码语言:javascript
复制
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从您的数据构建一个稀疏矩阵(应该是简单的),然后进行转换(这是在线性时间完成的)。

代码语言:javascript
复制
X = X.tocsr()

还请记住,您传递的所有数据都是在内部转换为lib线性的,sklearn使用的外部库有它自己的数据结构。因此,如果您传递错误的格式,这是一个一次性的转换成本,应该发生。纯粹的训练--程序不在乎!

票数 4
EN

Stack Overflow用户

发布于 2017-04-07 19:40:57

所有格式都有可转换为其他格式的to...方法。所以你可以用一种格式构建,用另一种格式进行计算,而不需要太多额外的成本。

  • coo_matrix --它的输入很容易理解和创建--只有3个相同长度的数组。如果您已经有了一个密集数组,只需将其设置为这种格式,它就会提取索引。
  • csr_matrix --这是实现大多数计算的格式。coo.tocsr(...)被广泛应用。注意,它可以使用coo样式的输入。要使用indptr风格的输入,您必须了解更多关于格式的知识。
  • csc_matrix -- csr的一个变体。有点像它的转座子。
  • lil_matrix --这也很容易理解。而且对逐步构建矩阵来说也是相当好的。不如对密集数组进行增量更改。
  • bsr_matrix --实际上是一种从一堆较小的矩阵中构建矩阵的方法。内部使用coo格式。适用于自然面向块的应用程序。
  • dok_matrix -实际上是一个字典子类。可以增量使用,但仍比用类似键填充自己的字典要慢。
  • dia_matrix -允许您定义矩阵的对角线。只是一种中间格式。只有当您的代码具有强大的对角线方面时才有用。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43284717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档