Я пытаюсь построить модель, которая помогает в классификации отчетов, и у меня есть только один вход - два столбца, содержащие свободный текст: заголовок и описание. Я использовал TF-IDF для кодирования столбцов, и теперь у меня есть трехмерный массив в X:
- Столбцы: слова в названии и описании
- Строки: отчеты, и каждый отчет содержит два вектора типа float64, один представляет заголовок отчета, а другой - описание отчета.
Я думал о том, чтобы тренировать модель одной строкой из этого массива за раз: один заголовок + его относительное описание, а затем переобучаться с другой строкой и так далее. Но проблема в том, что в этом случае y (целевой столбец) содержит только значение, соответствующее входной строке выше, это означает, что y является одноэлементным массивом.
Итак, запустим этот код:
train = pd.read_csv('train.csv', encoding= 'ISO-8859-1' )
train = train.loc[train['target'].notna()]
#selecting the features
text = pd.DataFrame(train[['Title' , 'Description']])
# Create a new column 'category_id' with encoded categories
train['category_id']= train['target'].factorize()[0]
category_id_df = train[['target', 'category_id']].drop_duplicates()
tfidf = TfidfVectorizer(sublinear_tf=True, ngram_range=(1, 2), stop_words='english')
# We transform each text into a vector
title_features = tfidf.fit_transform(essai['Title']).toarray()
description_features = tfidf.fit_transform(essai['Description']).toarray()
features= list(zip(features1, features2))
labels = (np.array(train.category_id))
labels= labels.tolist()
#features= np.array(features)
X = features[0]
y= train.category_id[0]
from sklearn.ensemble import RandomForestClassifier
# Make a random forest and train
rf = RandomForestClassifier(n_estimators = 1000, n_jobs=-1 , random_state= 42, warm_start= True)
rf.fit(X, y)
возвращает эту ошибку:
ValueError: установка элемента массива с последовательностью.
, который возникает, когда он пытается приступить к примерке. Я искал решение, и оказалось, что X содержит векторы разной длины, и это не должно быть, поэтому я добавил оба вектора, чтобы они были одинаковой длины, и теперь у меня есть эта ошибка:
TypeError: Массив одноэлементного массива (0, dtype = int64) не может считаться допустимой коллекцией.
Кто-нибудь знает, как это исправить, пожалуйста?