Как действовать, чтобы подогнать модель, когда набор данных содержит некоторые текстовые строки и числовые данные.

Вопрос или проблема

Я пытаюсь подогнать набор данных к модели. После масштабирования и удаления ненужных данных набор данных выглядит примерно так:

seconds_log minutes_log country_enc changing description Другие переменные признаков
14.0058 0.693147 1 Ложь Красное мигание … Числовые данные
3.401197 3.401197 0 Правда Белое вращение .. Числовые данные

Таким образом, все признаки имеют численные значения, а последний признак “описание” – это длинные тексты. Обратите внимание, что моя целевая переменная – “country_enc”, а остальные столбцы – это переменные признаков. Значения описания нельзя игнорировать. Поэтому я векторизую данные, используя “TfidfVectorizer”.

Мой вопрос: после векторизации столбца описания, что бы я ни получил, как мне объединить это с остальной частью набора данных и затем разделить на тестовую и обучающую модель?

Я вижу несколько примеров в Google, где они говорят;

combined_data = np.hstack((desc_tfidf.toarray(), original_dataframe_without_description))
print (combined_data)

Если я посмотрю на эти комбинированные данные, это numpy.ndarray. Это не очень помогает для подачи в модель классификации.

На основе Комбинировать Sklearn TFIDF с дополнительными данными, если я конвертирую разреженную матрицу в массив и конкатенирую с остальной частью фрейма данных (с содержащимися в нем всеми числовыми значениями), я вижу, что генерируется несколько NaN данных, что и ожидается. Я уже завершил предварительную обработку данных, так что делать это снова – это неправильно.

Я уверен, что это не правильный способ. Может кто-то подсказать, как продвигаться дальше?

Ответ или решение

Чтобы корректно обучить модель, используя набор данных, в котором присутствуют как текстовые строки, так и числовые данные, потребуется следовать нескольким шагам. Давайте разберем этот процесс на примере вашего набора данных, где целевая переменная — "country_enc", а остальные столбцы являются признаками, среди которых есть долгие текстовые описания.

1. Векторизация текстовых данных

Ваша идея использовать TfidfVectorizer для векторизации столбца "description" вполне разумна. После этого векторизованный текст будет представлен в виде разреженной матрицы, что отлично подходит для большинства алгоритмов машинного обучения. Перед тем как комбинировать эту векторизованную матрицу с остальными данными, убедитесь в том, что векторизация выполнена корректно.

Пример кода для векторизации:

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
import numpy as np

# Предполагаем, что у вас есть DataFrame original_dataframe с вашими данными
vectorizer = TfidfVectorizer()
desc_tfidf = vectorizer.fit_transform(original_dataframe['description'])

2. Преобразование разреженной матрицы в плотный формат

Разреженная матрица, возвращаемая TfidfVectorizer, может быть преобразована в плотный формат (если позволяет размер) для дальнейшего объединения с остальными числовыми данными.

# Преобразование разреженной матрицы в плотный формат, если размер не слишком велик
desc_tfidf_dense = desc_tfidf.todense()  # Или desc_tfidf.toarray() для получения массива

3. Объединение данных

Теперь вам нужно объединить полученную матрицу с другими признаками вашего датафрейма, исключая столбец "description":

# Убираем столбец "description" из оригинального DataFrame
original_dataframe_without_description = original_dataframe.drop(columns=['description'])

# Объединяем данные
combined_data = np.hstack((desc_tfidf_dense, original_dataframe_without_description.values))

4. Создание датафрейма из комбинированных данных

Чтобы упростить дальнейшие операции, вы можете создать новый DataFrame из объединенных данных, связав его с целевой переменной.

# Создаем новый DataFrame
combined_df = pd.DataFrame(combined_data)

# Добавляем целевую переменную
combined_df['country_enc'] = original_dataframe['country_enc'].values

5. Разделение данных на обучающий и тестовый наборы

С помощью train_test_split из библиотеки sklearn вы можете разделить данные на обучающую и тестовую выборки:

from sklearn.model_selection import train_test_split

# Определяем X (все признаки) и y (целевую переменную)
X = combined_df.drop(columns=['country_enc'])
y = combined_df['country_enc']

# Разделяем данные на обучающий и тестовый наборы
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

6. Обучение модели

Теперь вы готовы обучить вашу модель, используя X_train и y_train. Например, если вы используете классификатор, это может выглядеть следующим образом:

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier()
model.fit(X_train, y_train)

Заключение

Этот подход позволяет вам эффективно комбинировать текстовую информацию с числовыми данными для любой модели машинного обучения. Убедитесь, что ваши данные должным образом обработаны и нормализованы перед финальным обучением модели.

Следуя данным шагам, вы сможете избежать проблем, связанных с NaN значениями и разными форматами данных, а также создать стабильную модель, которую можно использовать для предсказаний.

Оцените материал
Добавить комментарий

Капча загружается...