我尝试在回归中使用稀疏矩阵,因为添加虚拟变量后有超过 40,000 个变量。为了做到这一点,我相信我需要为模型提供一个稀疏矩阵。但是,使用此处找到的代码无法将我的 pandas 数据框转换为矩阵:
Convert Pandas dataframe to Sparse Numpy Matrix directly
这是因为数据集太大,我遇到了内存错误。以下是我如何通过运行以下命令来复制问题的示例:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(0,40000,size=(1000000, 4)), columns=list('ABCD'))
df = pd.get_dummies(df,columns=['D'],sparse=True,drop_first=True)
df = df.values
我最终希望能够将数据帧(300 万条记录,49,000 列)转换为矩阵,因为我怀疑我可以创建一个稀疏矩阵并将其用于我的回归。这在较小的子集上效果很好,但我最终需要测试整个数据集。上面的例子立即产生一个“MemoryError”,所以我怀疑这是Python的一些限制,但我希望有一个解决方法。
最佳答案
稀疏矩阵是一种代价高昂的操作。使用 Spicy,创建大型稀疏矩阵非常困难,并且您的系统内存可能不支持。
我建议使用 Spark 库。这样你的数据集就会运行在不同的集群(RDD)上。下面是示例代码,
从 pyspark.mllib.linalg 导入向量
稀疏 = Vectors.sparse(3, [0, 2], [1.0, 3.0])
希望对你有帮助。如果您还有任何疑问,请告诉我,我很乐意为您提供帮助。
关于python - 在 Python 中从大型数据帧创建稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55526135/