亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Python 中從大型數據幀創建稀疏矩陣

在 Python 中從大型數據幀創建稀疏矩陣

慕容708150 2021-12-29 18:30:03
我試圖在回歸中使用稀疏矩陣,因為在添加虛擬變量后有超過 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])


我希望它能幫助你。如果您還有任何問題,請告訴我,我很樂意為您提供幫助。


查看完整回答
反對 回復 2021-12-29
?
慕慕森

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


查看完整回答
反對 回復 2021-12-29
  • 2 回答
  • 0 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號