0
我正在進行分類任務,我的培訓文件是一個csv,它具有大約8GB(aporx 720萬行和212列)。首先,我的方法是將所有此csv文件在一個熊貓數據框中,然後用它作爲多維數組來訓練我的樸素貝葉斯分類器,但是當我嘗試合適的數據時,我得到了一個memory error
(我正在使用8GB ram和64位版本的python) 。嘗試適應分類器時的內存錯誤
之後,我嘗試將我的dataframe
分成5塊,然後使用partia_fit()
方法,但仍然耗盡內存。
這是到目前爲止我的代碼(目標值是從其他txt文件中提取):
from csv import DictReader
from sklearn.naive_bayes import MultinomialNB
import numpy
from pandas import*
target_values_train = []
with open('train.txt') as f:
reader = DictReader(f, delimiter='\t')
for row in reader:
target_values_train.append(int(row['human-generated']))
y_train = numpy.asarray(target_values_train)
y_train = y_train[:, numpy.newaxis]
tp = read_csv('train-indices.csv', iterator=True, chunksize=1000, delimiter=';', skiprows=1)
df_train = concat(tp, ignore_index=True)
del df_train['id']
print(df_train)
print(df_train.shape)
print(y_train.shape)
df1, df2, df3, df4 = np.array_split(df_train, 5)
y1, y2, y3, y4, y5=np.array_split(y_train, 5)
print(df1.shape)
print(df2.shape)
print(df3.shape)
clf = MultinomialNB()
clf.partial_fit(df1, y1)
clf.partial_fit(df2, y2)
clf.partial_fit(df3, y3)
clf.partial_fit(df4, y4)
clf.partial_fit(df5, y5)
任何建議是非常值得歡迎的。
爲什麼不將所有內容放在一個循環中,只存儲和讀取每個partial_fit所需的行? –
你真的需要訓練所有這些數據嗎?如果數據是同類的,你可以訓練符合記憶的數據部分,併產生好的分數。嘗試一下。如果它不會成立,你可以訓練和預測所有部分的訓練數據,然後簡單地進行預測並獲得更好的結果。 – CrazyElf
您可以嘗試在使用後立即刪除任何不需要的數據。 – CrazyElf