Сравнение F-теста и взаимной информации

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабе мы узнаем о различиях между статистиками F-теста для одномерных данных и взаимной информацией. Мы будем использовать библиотеку scikit-learn для выполнения F-теста и регрессии на основе взаимной информации для набора данных и сравним результаты.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/feature_selection("Feature Selection") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/feature_selection -.-> lab-49121{{"Сравнение F-теста и взаимной информации"}} ml/sklearn -.-> lab-49121{{"Сравнение F-теста и взаимной информации"}} end

Импорт библиотек

Начнем с импорта необходимых библиотек для этого лабара. В этом лабе мы будем использовать numpy, matplotlib и scikit-learn.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_selection import f_regression, mutual_info_regression

Создание набора данных

Мы создадим набор данных с 3 признаками, где первый признак имеет линейную зависимость от целевой переменной, второй признак имеет нелинейную зависимость от целевой переменной, а третий признак совершенно не имеет отношения. Для этого набора данных мы создадим 1000 образцов.

np.random.seed(0)
X = np.random.rand(1000, 3)
y = X[:, 0] + np.sin(6 * np.pi * X[:, 1]) + 0.1 * np.random.randn(1000)

Вычисление F-теста

Теперь мы вычислим показатель F-теста для каждого признака. F-тест охватывает только линейную зависимость между переменными. Мы нормализуем показатели F-теста, поделив их на максимальный показатель F-теста.

f_test, _ = f_regression(X, y)
f_test /= np.max(f_test)

Вычисление взаимной информации

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

mi = mutual_info_regression(X, y)
mi /= np.max(mi)

Построение графиков результатов

Теперь мы построим график зависимости целевой переменной от каждого признака, а также график показателей F-теста и взаимной информации для каждого признака.

plt.figure(figsize=(15, 5))
for i in range(3):
    plt.subplot(1, 3, i + 1)
    plt.scatter(X[:, i], y, edgecolor="black", s=20)
    plt.xlabel("$x_{}$".format(i + 1), fontsize=14)
    if i == 0:
        plt.ylabel("$y$", fontsize=14)
    plt.title("F-test={:.2f}, MI={:.2f}".format(f_test[i], mi[i]), fontsize=16)
plt.show()

Резюме

В этом практическом занятии мы изучили различия между статистикой F-теста для одномерных данных и взаимной информацией. Мы провели F-тест и регрессию на основе взаимной информации для набора данных и сравнили результаты. Мы обнаружили, что F-тест охватывает только линейную зависимость между переменными, в то время как взаимная информация может охватывать любую зависимость между переменными.