Как работать со столбцами символов для случайного леса с помощью Sklearn

#python #scikit-learn #random-forest

Вопрос:

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

Таким образом, переменными моих функций будут заголовок и содержимое, а моей исследовательской переменной будет, например, «настроение» (отрицательное, положительное или нейтральное). Проблема в том, что у меня есть только столбец символов. Я не могу выполнить некоторую кодировку как одну горячую кодировку, потому что все необработанные разные, поэтому у нее будет много разных кодировок, так как есть строки.

Я не знаю, как поступить… Могу ли я сам указать исследовательскую переменную вручную для обучающего набора ? Если у вас есть какие-то указания для того, чтобы я продолжил свой проект, большое спасибо !!!

 df = pd.DataFrame(columns=["title", "content"], data=[["The Rise and Fall of Heidelberg Street","McDougall-Hunt a small neighborhood of single-..."]])
df.head()

title                                           content

The Rise and Fall of Heidelberg Street          McDougall-Hunt a small neighborhood of single-...
 

Комментарии:

1. Можете ли вы поделиться образцом своих данных (например df.head() )? Я не понимаю, что такое «колонка символов».

2. Конечно, я редактирую свой пост, тх !

Ответ №1:

Если вы хотите создать базовую линию, я бы посоветовал вам использовать TF-IDF TfidfTransformer для векторизованного представления вашего текста.

TF-IDF-это в основном статистический показатель, который оценивает, насколько слово соответствует документу в наборе документов.

Вы можете просто объединить заголовок и содержимое, а затем передать их по этому конвейеру:

 from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.linear_model import SGDClassifier
from sklearn.pipeline import Pipeline

df['text'] = df['title'] ' ' df['content']
X=df['text']
y=df['sentiment']
pipeline = Pipeline([
    ('vect', CountVectorizer()),
    ('tfidf', TfidfTransformer()),
    ('clf', SGDClassifier()),
])
pipeline.fit(X, y)
 

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

Комментарии:

1. Хорошо, большое спасибо ! Так нужно ли мне вручную классифицировать свой текст для последовательности данных ?

2. Если у вас нет значения настроения; да. В противном случае вы можете использовать пакет vaderSentiment для извлечения настроений вашего текста. Это пакет, который выполняет анализ лексики и настроений на основе правил.

Ответ №2:

вы можете преобразовать их в фиктивные переменные с помощью

 import pandas as pd
dummies = pd.get_dummies(df)
 

Комментарии:

1. Спасибо за ваш ответ! Проблема в том, что мой столбец «содержимое» отличается для каждого исходного кода, поэтому я думаю, что это будет проблемой для прогнозирования…

2. В этом случае столбец «содержимое» не сможет предоставить никакой дополнительной информации для модели и поэтому может быть удален.

3. В качестве альтернативы, если поле представляет собой своего рода поле со свободным текстом, и вас интересует информация, содержащаяся в нем, будет полезен подход TFIDIF, о котором говорилось выше.

4. Я нашел решение своей проблемы, большое спасибо ! 🙂