使用稀疏稀疏矩阵和numpy数组训练sklearn ML模型

时间:2019-08-05 16:25:50

标签: python numpy scikit-learn scipy concatenation

仅是为了解释一些用例,A是具有tf-idf值的稀疏矩阵,而B是具有数据附加特征的数组。

我已经划分为训练集和测试集,因此示例中的AB仅与训练集有关。我(想)在这段代码之后对测试集做同样的事情。

我想将这些矩阵/数组连接起来,因为然后我想将它们传递给sklearn ML模型以对其进行训练,因此我认为不能单独传递它们。

所以我尝试这样做:

C = np.concatenate((A, B.T), axis=1)

其中A是<class 'scipy.sparse.csr.csr_matrix'>,B是<class 'numpy.ndarray'>

但是,当我尝试执行此操作时,出现以下错误:

ValueError: zero-dimensional arrays cannot be concatenated

另外,我认为`np.concatenate` a numpy array with a sparse matrix的想法不是很好,因为

  1. 基本上不可能将稀疏数组A转换为密集数组,因为它太大了
  2. 如果将完全密集的数组B转换为稀疏数组,我会丢失(或实际上不是?)信息

将稀疏和完全密集的由行连接的数组传递给sklearn ML模型的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

  1. 您可以从scipy使用hstack.header { grid-area: header; background-color: red; display: grid; grid-template-areas: 'headerLeft rest headerRight'; grid-template-columns: 10% 1fr 30%; padding: 5px; } .header p { margin: 0px; } .headerRight { grid-area: headerRight; } .headerRight p { float: right; }会将两个矩阵都转换为scipy coo_matrix,将它们合并并默认返回一个coo_matrix。

  2. 将密集数组转换为稀疏数组时,不会丢失任何信息。稀疏矩阵只是紧凑的数据存储格式。另外,除非为<div class="layout"> <div class="header"> <div class="headerRight"> <p style="margin: 0px 0px 0px 1px;"><img src="https://i.imgur.com/V2aWxOK.png" style="height: 13vh" /></p> <p><img src="https://i.imgur.com/V2aWxOK.png" style="height: 13vh" /></p> <p style="margin: 0px 5px 0px 0px">Ola</p> <br /> <p style="margin: 0px 5px 0px 0px">Ola</p> </div> </div> </div>的参数hstack指定一个值,否则所有内容均为upcasted。因此,那里也没有数据丢失的可能性。

进一步,如果您打算从sklearn使用Logistic回归,则稀疏矩阵必须采用 csr 格式,dtype方法才能正常工作。

以下代码应适合您的用例

hstack