Как получить важность функции в логистической регрессии с использованием весов?

У меня есть набор отзывов с меткой класса положительный/отрицательный. Я применяю логистическую регрессию к этому набору данных отзывов. Во-первых, я конвертирую в Bag of words. Здесь sorted_data['Text'] — это отзывы, а final_counts — это разреженная матрица.

count_vect = CountVectorizer() 
final_counts = count_vect.fit_transform(sorted_data['Text'].values)
standardized_data = StandardScaler(with_mean=False).fit_transform(final_counts)

разделить набор данных на поезд и тест

X_1, X_test, y_1, y_test = cross_validation.train_test_split(final_counts, labels, test_size=0.3, random_state=0)
X_tr, X_cv, y_tr, y_cv = cross_validation.train_test_split(X_1, y_1, test_size=0.3)

Я применяю алгоритм логистической регрессии следующим образом

optimal_lambda = 0.001000
log_reg_optimal = LogisticRegression(C=optimal_lambda)

# fitting the model
log_reg_optimal.fit(X_tr, y_tr)

# predict the response
pred = log_reg_optimal.predict(X_test)

# evaluate accuracy
acc = accuracy_score(y_test, pred) * 100
print('\nThe accuracy of the Logistic Regression for C = %f is %f%%' % (optimal_lambda, acc))

Мои веса

weights = log_reg_optimal.coef_ .   #<class 'numpy.ndarray'>

array([[-0.23729528, -0.16050616, -0.1382504 , ...,  0.27291847,
         0.35857267,  0.41756443]])
(1, 38178) #shape of weights

Я хочу получить важность функции, т.е. 100 лучших функций, которые имеют большой вес. Может ли кто-нибудь сказать мне, как их получить?


person merkle    schedule 22.07.2018    source источник
comment
Почему бы вам не взять абсолют weights, а затем сохранить топ-100 ??   -  person seralouk    schedule 22.07.2018
comment
Ага. Мне также нужны первые 100 слов с большим весом.   -  person merkle    schedule 22.07.2018


Ответы (2)


Один из способов исследовать «влияние» или «важность» данного признака/параметра в модели линейной классификации — рассмотреть величину коэффициенты.

Это самый простой подход. Другие методы определения важности признаков или влияния параметров могут дать больше информации, например использование p-значений, оценок начальной загрузки, различных "дискриминационных индексов", и т. д.


Здесь вы стандартизировали данные, поэтому используйте непосредственно это:

weights = log_reg_optimal.coef_
abs_weights = np.abs(weights)

print(abs_weights)

Если вы посмотрите на исходный weights, то отрицательный коэффициент означает, что более высокое значение соответствующего признака подталкивает классификацию к отрицательному классу.


ИЗМЕНИТЬ 1

Пример, показывающий, как получить имена функций:

import numpy as np

#features names
names_of_variables =np.array(['a','b','c','d'])

#create random weights and get the magnitude
weights = np.random.rand(4)
abs_weights = np.abs(weights)

#get the sorting indices
sorted_index = np.argsort(abs_weights)[::-1]

#check if the sorting indices are correct
print(abs_weights[sorted_index])

#get the index of the top-2 features
top_2 = sorted_index[:2]

#get the names of the top 2 most important features
print(names_of_variables[top_2])
person seralouk    schedule 22.07.2018

Если вы используете модель логистической регрессии, вы можете использовать метод рекурсивного исключения признаков (RFE), чтобы выбрать важные признаки и отфильтровать избыточные признаки из списков предикторов. Эта функция доступна в библиотеке scikit-learn. Вы можете перейти по следующей ссылке, чтобы получить подробную информацию: https://machinelearningmastery.com/feature-selection-machine-learning-python/

Этот метод ранжирует функции на основе важности, и вы можете выбрать первые n функций, необходимых для дальнейшего анализа.

person Gaurav Sitaula    schedule 24.07.2018