0
私は分類作業に取り組んでいます。私のトレーニングファイルは約8GB(aporx 720万行と212列)のcsvです。まず、私のアプローチはすべてのcsvファイルパンダのデータフレームで、それから多次元配列として私の素朴なベイズ分類器を訓練するのですが、私がmemory error
(私は8GBのRAMとPythonの64ビット版のマシンで作業しています) 。クラシファイアに合うときにメモリエラーが発生する
その後、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