Таким образом, у меня есть огромный набор данных для работы, он почти состоит из 1 200 000 строк, а количество целевых классов составляет около 20 000 меток.
Я выполняю классификацию текста по моим данным, поэтому я сначалаочистил его, а затем выполнил на нем векторизацию tfidf.
Проблема заключается в том, что всякий раз, когда я пытаюсь выбрать модель и подгонять данные, она выдает ошибку памяти
Мой текущий компьютер - Core i7с 16 ГБ ОЗУ
vectorizer = feature_extraction.text.TfidfVectorizer(ngram_range=(1, 1),
analyzer='word',
stop_words= fr_stopwords)
datavec = vectorizer.fit_transform(data.values.astype('U'))
X_train, X_test, y_train, y_test = train_test_split(datavec,target,test_size=0.2,random_state=0)
print(type(X_train))
print(X_train.shape)
Вывод: класс 'scipy.sparse.csr.csr_matrix' (963993, 125441)
clf.fit(X_train, y_train)
Здесь происходит ошибка памяти
Я пытался: 1 - взять выборку данных, но ошибка не исчезла.
2 - чтобы соответствовать множеству разных моделей, но работала только модель KNN (но с низкой точностьюоценка)
3 - для преобразования datavec в массив, но этот процесс также вызывает ошибку памяти
4 - для использования мультиобработки на разных моделях
5 - Iбыли через каждый подобный вопрос на SO, но еЕсли ответ был неясным или не относился к моей проблеме точно
Это часть моего кода:
vectorizer = feature_extraction.text.TfidfVectorizer(ngram_range=(1, 1),
analyzer='word',
stop_words= fr_stopwords)
df = pd.read_csv("C:\\Users\\user\\Desktop\\CLEAN_ALL_DATA.csv", encoding='latin-1')
classes = np.unique(df['BENEFITITEMCODEID'].str[1:])
vec = vectorizer.fit(df['NEWSERVICEITEMNAME'].values.astype('U'))
del df
clf = [KNeighborsClassifier(n_neighbors=5),
MultinomialNB(),
LogisticRegression(solver='lbfgs', multi_class='multinomial'),
SGDClassifier(loss="log", n_jobs=-1),
DecisionTreeClassifier(max_depth=5),
RandomForestClassifier(n_jobs=-1),
LinearDiscriminantAnalysis(),
LinearSVC(multi_class='crammer_singer'),
NearestCentroid(),
]
data = pd.Series([])
for chunk in pd.read_csv(datafile, chunksize=100000):
data = chunk['NEWSERVICEITEMNAME']
target = chunk['BENEFITITEMCODEID'].str[1:]
datavec = vectorizer.transform(data.values.astype('U'))
clf[3].partial_fit(datavec, target,classes = classes)
print("**CHUNK DONE**")
s = "this is a testing sentence"
svec = vectorizer.transform([s])
clf[3].predict(svec) --> memory error
clf[3].predict(svec).todense() --> taking a lot of time to finish
clf[3].predict(svec).toarrray() --> taking a lot of time to finish as well
Что-нибудь еще, что я мог попробовать?