Как получить значение «Word» в НЛП (TFIDF + логистическая регрессия) - PullRequest
1 голос
/ 30 сентября 2019

У меня есть функция для получения функции tfidf, например:

def get_tfidf_features(data, tfidf_vectorizer=None, ngram_range=(1,2)):
    """ Creates tfidf features and returns them as sparse matrix. If no tfidf_vectorizer is given, 
    the function will train one."""

    if tfidf_vectorizer is not None:
        tfidf = tfidf_vectorizer.transform(data.Comment_text)
    else:
        # only add words to the vocabulary that appear at least 200 times
        tfidf_vectorizer = TfidfVectorizer(min_df=700, ngram_range=ngram_range, stop_words='english')
        tfidf = tfidf_vectorizer.fit_transform(data.Comment_text)        

    tfidf = pd.SparseDataFrame(tfidf.toarray()).to_sparse()
    tfidf.applymap(lambda x: round(x, 4))
    tfidf_features = ['tfidf_' + word for word in tfidf_vectorizer.get_feature_names()]
    tfidf.columns = tfidf_features
    data = data.reset_index().join(tfidf).set_index('index')

    return data, tfidf_vectorizer, tfidf_features    

X_train, tfidf_vectorizer, tfidf_features = get_tfidf_features(X_train)

Я применил простую логистическую регрессию, подобную этой:

logit = LogisticRegression(random_state=0, solver='lbfgs', multi_class='ovr')
logit.fit(X_train.loc[:, features].fillna(0), X_train['Hateful_or_not'])
preds = logit.predict(X_test.loc[:, features].fillna(0))

Я получаю важность функции следующим образом:

 logit.coef_

Но это дает мне особенность важности "столбцов", а не слов

1 Ответ

1 голос
/ 01 октября 2019

logit.coef_ действительно дает вам коэффициент каждого слова особенность (или биграмма). Он вернет вам массив с len(features) элементами, где коэффициент слова в i-й позиции в features будет расположен в i-й позиции массива logit.coef_.

Пример:

features = ['love','hate','positive','negative']
logit.coef_ = [0.9, -1.2, 0.5, -0.75]

Коэффициент «любви» равен 0,9, «ненависти» равен -1,2 и т. Д. *

...