我可以强制sklearn使用float32而不是float64吗

问题描述 投票:0回答:1

我需要一些有关数据类型、矩阵和 RAM 使用情况的帮助。我正在构建一个产品推荐系统,它将使用产品描述来查找类似产品并推荐它们。我在描述上使用 CountVectorizer 来查找语义相似的描述,对它们进行排名并建议相似的描述。

问题出现在计算余弦相似度矩阵时。我的初始数据帧有 47,046 行,所以我在本地电脑和 Colab 笔记本上都遇到了 RAM 问题。

检查 CountVectorizer 的计数矩阵,我发现它将其输出为 int64:

<47046x3607 sparse matrix of type '' 以压缩稀疏行格式存储 699336 个元素>

使用“count_matrix = count_matrix.astype(np.int32)”将其转换为 int32 没有问题,但是当从 sklearn 运行余弦相似性时,它仍然输出 float64 而不是 float32 (我通过使用较小的数据集进行测试证实了这一点,该数据集可以处理得很好)。

有什么办法强制使用float32吗?或者一种真正解决矩阵高 RAM 使用率的方法?

python scikit-learn ram cosine-similarity
1个回答
0
投票

有什么办法强制使用float32吗?

您可以将输入稀疏矩阵转换为 float32。在我的测试中,这会导致输出数组为 float32。

这是我写的测试程序。

import scipy
import sklearn.metrics
import numpy as np

rvs = scipy.stats.randint(low=0, high=10)

A = scipy.sparse.random(47046, 3607, density=0.0005, data_rvs=rvs.rvs, dtype=np.int64)
print("starting dtype", A.dtype)
print("output dtype", sklearn.metrics.pairwise.cosine_similarity(A, A).dtype)
A = A.astype(np.float32)
print("starting dtype", A.dtype)
print("output dtype", sklearn.metrics.pairwise.cosine_similarity(A, A).dtype)

输出:

starting dtype int64
output dtype float64
starting dtype float32
output dtype float32
© www.soinside.com 2019 - 2024. All rights reserved.