Как обучить модель классификации с одним входом за один раз, вход, содержащий два вектора и соответствующий одному int64 в целевом столбце? - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь построить модель, которая помогает в классификации отчетов, и у меня есть только один вход - два столбца, содержащие свободный текст: заголовок и описание. Я использовал 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) не может считаться допустимой коллекцией.

Кто-нибудь знает, как это исправить, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...