используя энтропию из теории информации
Всем привет, как жизнь? еще один день в раю? Большой.
Сегодня мы рассмотрим уникальный способ выбора признаков с использованием взаимной информации.
Как правило, мы рассматриваем метод выбора признаков для числовых входных данных и числовой целевой переменной двумя способами.
Они есть:
- Статистика корреляции
#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=Истина) - Статистика взаимной информации
- Другие: модельно-ориентированная с использованием случайного леса, деревьев решений и т. д., но есть одна загвоздка: нам нужно обучить модель, прежде чем мы узнаем важность функции. Таким образом, это становится дорогостоящим в вычислительном отношении на производственном уровне. Помните это! это вопрос архитектора науки о данных.
- У меня есть несколько собственных :) Я назвал его Автоматическая оценка выбора признаков с использованиемдивергенции Брегмана, ссылка на статью: https://medium.com/@bobrupakroy/auto- оценить-выбор-функций-a1f74cbd119a
- Функции-оболочки. Доступны различные функции-оболочки, такие как SelectKBest, с большей гибкостью, подходящие для определенных сценариев.
- В стадии разработки: 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