Как выбрать порог Chi Squared в выборе функции - PullRequest
0 голосов
/ 27 марта 2020

Об этом:

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

Я нашел этот код:

    import pandas as pd
    import numpy as np
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.feature_selection import chi2

    THRESHOLD_CHI = 5 # or whatever you like. You may try with
     # for threshold_chi in [1,2,3,4,5,6,7,8,9,10] if you prefer
     # and measure the f1 scores

    X = df['text']
    y = df['labels']

    cv = CountVectorizer()
    cv_sparse_matrix = cv.fit_transform(X)
    cv_dense_matrix = cv_sparse_matrix.todense()

    chi2_stat, pval = chi2(cv_dense_matrix, y)

    chi2_reshaped = chi2_stat.reshape(1,-1)
    which_ones_to_keep = chi2_reshaped > THRESHOLD_CHI
    which_ones_to_keep = np.repeat(which_ones_to_keep ,axis=0,repeats=which_ones_to_keep.shape[1])

Этот код вычисляет критерий хи-квадрат и должен сохранять лучшие характеристики в пределах выбранного порога. Мой вопрос: как выбрать theshold для баллов по критерию хи-квадрат?

1 Ответ

1 голос
/ 27 марта 2020

Чи-квадрат не имеет определенного диапазона c результата, поэтому заранее определить порог сложно. Обычно, что вы можете сделать, это отсортировать переменные в зависимости от их значений p, логика c состоит в том, что более низкие значения p лучше, потому что они подразумевают более высокую корреляцию между объектами и целевой переменной (мы хотим отбросить объекты, которые являются независимыми т.е. не предикторы целевой переменной). В этом случае вы все равно должны решить, сколько функций сохранить, и это гиперпараметр, который вы можете настроить вручную или даже лучше, используя поиск по сетке.

Помните, что вы можете избежать выбора вручную, sklearn реализует уже функцию SelectKBest , чтобы выбрать лучшие k функций на основе квадрата хи, вы можете использовать его следующим образом:

from sklearn.feature_selection import SelectKBest, chi2

X_new = SelectKBest(chi2, k=2).fit_transform(X, y)

Но если по какой-либо причине вы хотите положиться исключительно на необработанном значении chi2 вы можете рассчитать минимальное и максимальное значения между переменными, а затем разделить интервал на n шагов, чтобы протестировать поиск по сетке.

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