Гауссовский_Наивный_Байес_Объяснение_Визуальный_Гид_с_Примерами_Кода_для_Начинающих

Гауссовский наивный байесовский классификатор: визуальный гид с примерами кода для начинающих

Взгляд на мир машинного обучения – это как случайный поход по простой, но загадочной тропе, в которой вас поджидает множество интересных открытий. Одна из главных остановок на этом покорительном пути — алгоритм Gaussian Naive Bayes. Все просто, как один-два-три, и в то же время волшебно! Это как частичка швейцарского сыра на вашем столе: простота в сочетании с мощью — идеальный старт для начинающих. Давайте же разберёмся, как работает этот чудо-алгоритм и какое место он занимает в мире классификации данных.

Основные Принципы Gaussian Naive Bayes

Представьте, что вы – детектив с лупой в руке, разгадывающий тайны различных классов данных. Первый подсказок, который мы получаем — это два ключевых предположения, на которых держится наш маленький арсенал.

Независимость признаков

Вы не поверите, но Gaussian Naive Bayes строит свою логику на простой мысли: все признаки — как неподкупные свидетели, которые не общаются между собой. Это значит, что влияние одного признака на наш любимый класс не зависит от всех остальных. Каждому своему признаку нужно верить, как верному другу: он не предаст!

Нормальное распределение

Теперь представьте, что у нас на руках мечта статистиков — нормальное распределение. Этот красивый колокол (Гауссово распределение) показывает, как данные ведут себя вокруг своего среднего. Каждый признак в каждом классе считается, как если бы он был под влиянием этого прекрасного закона природы. Каждый признак можно охарактеризовать с помощью двух простых чисел: среднего ((\mu)) и стандартного отклонения ((\sigma)). Да, это выглядит сложно, но это как мини-мастерство в понимании сути.

Механизм Работы

Давайте по порядку. Как же наш детектив переводит догадки в реальные действия? Разберёмся на примерах!

1. Подготовка Данных

Каждому проекту нужна своя основа, и в нашем случае – это подготовленные данные. Чтобы не путаться, рекомендуется разделить данные на обучающую и тестовую выборки. Это как учиться играть на гитаре — сначала учитесь, а потом показываете результаты на сцене!

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.5, shuffle=False)

Простота этой строки кода — как знакомый вам музыкальный аккорд.

2. Расчет Средних и Стандартных Отклонений

Следующим шагом является расчёт средних и стандартных отклонений. Эти параметры помогут нам построить нормальные распределения для каждого признака в каждом классе. Это как условно развести чёрное и белое на холсте: средние значения добавляют цвета, а стандартные отклонения — объем.

# Расчет средних и стандартных отклонений для каждого класса и признака
mean_values = X_train.groupby(y_train).mean()
std_values = X_train.groupby(y_train).std()

Когда вы увидите, как вся эта математика складывается воедино, вы поймете: каждый класс рассказывает свою историю!

3. Расчет Вероятностей

Теперь наступила кульминация. Нужно рассчитать вероятность для новой инстанции — нашего нового "подсмотренного" объекта. Самая первая задача — это приорная вероятность класса. Затем, используя нашу новую инстанцию, рассчитываем PDF (функцию плотности нормального распределения) для каждого признака в каждом классе.

Код:
from scipy.stats import norm

def calculate_class_probability_products(X_train, y_train, X_new, feature_names):
    probability_products = {}
    for cls in np.unique(y_train):
        prior_prob = len(y_train[y_train == cls]) / len(y_train)
        feature_probs = []
        for feature in feature_names:
            mean = mean_values.loc[cls, feature]
            std = std_values.loc[cls, feature]
            prob = norm.pdf(X_new[0, feature_names.index(feature)], loc=mean, scale=std)
            feature_probs.append(prob)
        product = prior_prob * np.prod(feature_probs)
        probability_products[cls] = product
    return probability_products

X_new = np.array([-1.28, 1.115, 0.84, 0.68]).reshape(1, -1)
prob_products = calculate_class_probability_products(X_train, y_train, X_new, X.columns)

4. Классификация

И, наконец, к кульминации нашего праздника! Сравниваем классы — класс с наибольшей вероятностью объявляется победителем, словно тот, кто первым добрался до финишной линии!

predicted_class = max(prob_products, key=prob_products.get)

Сглаживание и Нестабильность

Может показаться, что всё гладко, но наш алгоритм знаком со своими подводными камнями. Для избежания числовой нестабильности он использует сглаживание. Это как добавление капельки масла к суперспособности — чтобы всё работало плавно!

Пример Применения

А теперь, давайте создадим несколько искусственных данных, и наблюдать, как наш детектив будет распутывать эту историю.

import numpy as np
import pandas as pd

# Создание данных для трех классов
FeNO_0 = np.random.normal(20, 19, 200)
FeNO_1 = np.random.normal(40, 20, 200)
FeNO_2 = np.random.normal(60, 20, 200)

FEV1_0 = np.random.normal(4.65, 1, 200)
FEV1_1 = np.random.normal(3.75, 1.2, 200)
FEV1_2 = np.random.normal(2.85, 1.2, 200)

BD_0 = np.random.normal(150, 49, 200)
BD_1 = np.random.normal(201, 50, 200)
BD_2 = np.random.normal(251, 50, 200)

# Создание DataFrame
df = pd.DataFrame({
    'FeNO': np.concatenate([FeNO_0, FeNO_1, FeNO_2]),
    'FEV1': np.concatenate([FEV1_0, FEV1_1, FEV1_2]),
    'BD': np.concatenate([BD_0, BD_1, BD_2]),
    'dx': np.repeat([0, 1, 2], 200)
})

Класс – это то, что мы выстраиваем! Давайте позволим нашему алгоритму поработать с этими данными и увидеть, на что он способен.

Обучение и Оценка Модели

from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score

gnb = GaussianNB()
gnb.fit(X_train, y_train)
y_pred = gnb.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

Согласно результатам, наш детектив с лупой отлично справился с этой задачей – эффективность модели на высоте!

Заключение

Подводя итоги, Gaussian Naive Bayes стоит на пьедестале среди простых, но мощных инструментов машинного обучения. Он пленяет своей простотой, скоростью и психологией данных, делая его незаменимым для новаторов и специалистов.

Так что, ребята, не упустите возможность постигнуть этот алгоритм и превратитесь из простых изучающих в настоящих мастеров классификации. Не забывайте, что обучение – это путешествие. А наши нейросети — верные спутники!

Призыв к Действию

Хотите быть в курсе последних новостей о нейросетях и автоматизации? Подпишитесь на наш Telegram-канал: @neuroko.

наса-откладывает-запуск-европа-клиппер-к-юпитеру-на-14-октября-на-фоне-проверок-после-урагана Предыдущая запись NASA откладывает запуск зонда к Европе на 14 октября из-за проверок после урагана.
BetConstruct_получает_румынскую_лицензию_на_удаленные_азартные_игры_Б2С_для_казино_и_фиксированных_ставок Следующая запись BetConstruct получает румынскую лицензию на дистанционное проведение азартных игр для казино и ставок с фиксированными коэффициентами.