Как получить лучшие функции для классификаторов tf-idf? - PullRequest
3 голосов
/ 21 марта 2020

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

comments это список строк.

def classify(classifiers, folder="tfidf-classifiers"):
    comments = get_comments()
    labels = get_labels()

    tfidf_vector = TfidfVectorizer(tokenizer=tokenizer, lowercase=False)
    stats = {}
    for i in classifiers:
        classifier = i()
        pipe = Pipeline(
            [('vectorizer', tfidf_vector), ('feature_selection', SelectKBest(chi2)), ('classifier', classifier)])

        result = cross_val_predict(pipe, comments, labels, cv=KFold(n_splits=10, shuffle=True))

        cm = confusion_matrix(result, labels, [information, non_information])
        saveHeatmap(cm, i.__name__, folder)

        report = classification_report(labels, result, digits=3, target_names=['no', 'yes'], output_dict=True)

        stats[i.__name__] = report
    return stats

Я искал по inte rnet и нашел это:

 pipe.named_steps['feature_selection'].get_support()

Но я не могу этого сделать, так как я не вызов fit на конвейере. Я использую конвейер здесь:

 result = cross_val_predict(pipe, comments, labels, cv=KFold(n_splits=10, shuffle=True))

Как я могу получить лучшие K имен элементов?

Мне нужен простой список слов, которые «помогли большинству» классификаторов, выполняющих свои работа ...

1 Ответ

0 голосов
/ 25 марта 2020

из НЛП в Python: получение имен слов из SelectKBest после векторизации

from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(df["Notes"])

from sklearn.feature_selection import chi2
chi2score = chi2(X,df['AboveAverage'])[0]

wscores = zip(vectorizer.get_feature_names(),chi2score)
wchi2 = sorted(wscores,key=lambda x:x[1]) 
topchi2 = zip(*wchi2[-20:])
show=list(topchi2)

Вы можете легко изменить оценку с помощью f_classif или других.

...