Как извлечь коэффициенты для функций TF-IDF? - PullRequest
1 голос
/ 03 июля 2019

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

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

Итак, мой конвейер - сначала векторизовать мой текстовый столбец,а затем использовать регрессию гребня.Но после того, как я построю этот конвейер, как мне извлечь коэффициенты в именах объектов векторизатора?

import pandas as pd
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split

# This is my toy data 
d = {'text': ["I am a a string", "And I am a string", "I, too am string", "And me", "Me too"], 
     'target': [3, 4, 14, 6, 7]}
df = pd.DataFrame(d)

X_train, X_test, y_train, y_test= train_test_split(df['text'], df['target'], 
                                                   test_size=0.3, random_state=42)


# Here is a vectorizer 
vect = TfidfVectorizer(stop_words='english')
X_train_vect = vect.fit_transform(X_train)

# Here is a ridge regressor
model = Ridge(random_state=42)
model.fit(X_train_vect, y_train)

# Now we make a pipeline
pipe = Pipeline([('vect',vect),('model',model)])
y_pred = pipe.predict(X_test)

Как бы мне было извлечь слова как коэффициенты отсюда?Например: "I am": 0.05 или что-то еще

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Вы не используете pipeline лучшим образом. Вы можете сделать .fit(), используя сам конвейер, следующим образом.

# Here is a vectorizer 
vect = TfidfVectorizer(stop_words='english')

# Here is a ridge regressor
model = Ridge(random_state=42)

# Now we make a pipeline
pipe = Pipeline([('vect',vect),('model',model)])
pipe.fit(X_train, y_train)
pipe.predict(X_test)

# array([8.07176068, 7.21966856])

Теперь, чтобы узнать коэффициенты, соответствующие каждой функции, используйте:

# for sklearn >= 0.21.0
list(zip(pipe['vect'].get_feature_names(), pipe['model'].coef_ ))

# for sklearn < 0.21.0
list(zip(pipe.named_steps.vect.get_feature_names(), pipe.named_steps.model.coef_ ))
0 голосов
/ 03 июля 2019
idf = vect.idf_
print (dict(zip(vect.get_feature_names(), idf)))

Это должно сделать это.

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