используя энтропию из теории информации

Всем привет, как жизнь? еще один день в раю? Большой.

Сегодня мы рассмотрим уникальный способ выбора признаков с использованием взаимной информации.

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

Они есть:

  1. Статистика корреляции
    #Multi colineartiy — — — — — — — — — — — — — —
    corr_matrix = X.corr().abs()
    #выбираем верхний треугольник
    upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape),k=1).astype(np.bool))
    #находим объекты с корреляция больше 0,95
    to_drop = [столбец для столбца в upper.columns, если есть (upper[column]›0,95)]
    #удалить функции
    X.to_drop(to_drop, axis=1 ,inplace=Истина)
  2. Статистика взаимной информации
  3. Другие: модельно-ориентированная с использованием случайного леса, деревьев решений и т. д., но есть одна загвоздка: нам нужно обучить модель, прежде чем мы узнаем важность функции. Таким образом, это становится дорогостоящим в вычислительном отношении на производственном уровне. Помните это! это вопрос архитектора науки о данных.
  4. У меня есть несколько собственных :) Я назвал его Автоматическая оценка выбора признаков с использованиемдивергенции Брегмана, ссылка на статью: https://medium.com/@bobrupakroy/auto- оценить-выбор-функций-a1f74cbd119a
  5. Функции-оболочки. Доступны различные функции-оболочки, такие как SelectKBest, с большей гибкостью, подходящие для определенных сценариев.
  6. В стадии разработки: TVS — метод определения важности функций с использованием неконтролируемого обучения.

В центре внимания этой статьи будет выбор функции взаимной информации.

Выбор признаков взаимной информации
Взаимная информация из области теории информации — это применение прироста информации (обычно используемого при построении деревьев решений) для выбора признаков.

Взаимная информация рассчитывается между двумя переменными и измеряет снижение неопределенности для одной переменной при известном значении другой переменной.
Взаимная информация является простой при рассмотрении распределения двух дискретных (категориальных или порядковых) переменных, таких как входные и категориальные выходные данные. Тем не менее, его можно адаптировать для использования с числовыми входными и выходными данными. Взаимная информация измеряет падение энтропии при условии целевого значения.

Простым объяснением этой концепции является следующая формула:

MI(функция;цель) = энтропия(функция) — энтропия(функция|цель)
Показатель MI будет находиться в диапазоне от 0 до ∞.

Высокое значение Mi означает более тесную связь между функцией и целью, что указывает на важность функции для обучения модели. Однако более низкий показатель MI, такой как 0, указывает на слабую связь между функцией и целью.

Выбор функции взаимной информации для регрессора

Моделирование со всеми функциями

#model using all input features
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
# load the dataset
X, y = make_regression(n_samples=1000, n_features=100, n_informative=10, noise=0.1, random_state=1)
# split into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=1)
# fit the model
model = LinearRegression()
model.fit(X_train, y_train)
# evaluate the model
yhat = model.predict(X_test)
# evaluate predictions
mae = mean_absolute_error(y_test, yhat)
print('MAE: %.3f' % mae)
#0.08569191074140582

Моделирование с коррелированными функциями с K = 88. Здесь мы будем использовать функцию-оболочку SelectKBest с score_func = f_regression, аналогичную применению регрессионной модели с последующим получением значения важности функций.

#model using 88 features chosen with correlation
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_regression
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
 
# feature selection
def select_features(X_train, y_train, X_test):
 # configure to select a subset of features
 fs = SelectKBest(score_func=f_regression, k=88)
 # learn relationship from training data
 fs.fit(X_train, y_train)
 # transform train input data
 X_train_fs = fs.transform(X_train)
 # transform test input data
 X_test_fs = fs.transform(X_test)
 return X_train_fs, X_test_fs, fs
 
# load the dataset
X, y = make_regression(n_samples=1000, n_features=100, n_informative=10, noise=0.1, random_state=1)
# split into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=1)
# feature selection
X_train_fs, X_test_fs, fs = select_features(X_train, y_train, X_test)
# fit the model
model = LinearRegression()
model.fit(X_train_fs, y_train)
# evaluate the model
yhat = model.predict(X_test_fs)
# evaluate predictions
mae = mean_absolute_error(y_test, yhat)
#0.08569191074140582

Моделирование с функциями взаимной информации K=88,

здесь мы также использовали ту же функцию-оболочку SelectKBest, чтобы вернуть важные функции, но на этот раз мы используем score_func = Mutual_info_regression.

Теперь давайте применим то же самое простыми словами к набору данных.

Мы будем использовать набор данных ames.csv, доступный по адресу

https://github.com/rupak-roy/Mutual-Information-Feature-Selection

Далее мы быстро рассмотрим пример классификации взаимной информации.

Score_1: 0,9370629370629371

Score_2: 0,916083916083916

Счет_3: 0,8391608391608392

Счет_4: 0,916083916083916

Сделанный. Вот и все…………..

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

Еще раз спасибо за уделенное время. Если вам понравилась эта короткая статья, в моем среднем репозитории есть множество тем по расширенной аналитике, науке о данных и машинному обучению. https://medium.com/@bobrupakroy

Некоторые из моих альтернативных сайтов в Интернете Facebook, Instagram, Udemy, Blogger, Issuu, Slideshare, Scribd и другие.

Также доступно на Quora @ https://www.quora.com/profile/Rupak-Bob-Roy

Дайте мне знать, если вам нужно что-нибудь. Говорите Скоро.

Реализация Kaggle: https://www.kaggle.com/rupakroy/mutual-information-feature-selection-regression