#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. Я нашел решение своей проблемы, большое спасибо ! 🙂