我試圖在回歸中使用稀疏矩陣,因為在添加虛擬變量后有超過 40,000 個變量。為了做到這一點,我相信我需要為模型提供一個稀疏矩陣。但是,無法使用此處找到的代碼將我的 Pandas 數據幀轉換為矩陣:這是因為數據集太大,我遇到了內存錯誤。這是我如何通過運行以下命令來復制問題的示例:import numpy as npimport pandas as pddf = 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我最終希望能夠將數據框(具有 49,000 列的 300 萬條記錄)轉換為矩陣,因為我懷疑我可以創建一個稀疏矩陣并將其用于我的回歸。這在較小的子集上效果很好,但我最終需要測試整個數據集。上面的例子立即產生了一個“MemoryError”,所以我懷疑這是一些 Python 限制,但我希望有一個解決方法。
2 回答

縹緲止盈
TA貢獻2041條經驗 獲得超4個贊
稀疏矩陣是代價高昂的操作。使用 Spicy,創建大型稀疏矩陣非常困難,并且您的系統內存可能不支持。
我建議使用 Spark 庫。這樣您的數據集將運行在不同的集群 (RDD) 上。下面是示例代碼,
from pyspark.mllib.linalg import Vectors
sparse = Vectors.sparse(3, [0, 2], [1.0, 3.0])
我希望它能幫助你。如果您還有任何問題,請告訴我,我很樂意為您提供幫助。

慕慕森
TA貢獻1856條經驗 獲得超17個贊
你可以這樣做:
import numpy as np
import pandas as pd
import scipy.sparse
N = 40000
M = 1000000
df = pd.DataFrame(np.random.randint(0, N, size=(M, 4)), columns=list('ABCD'))
v = df['D'].values
sp = scipy.sparse.coo_matrix((np.ones_like(v), (np.arange(len(v)), v)), shape=[len(v), N])
print(sp.shape)
# (1000000, 40000)
print(sp.getnnz())
# 1000000
添加回答
舉報
0/150
提交
取消