Вероятностные прогнозы с использованием классификации гауссовского процесса

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

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

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

Введение

В этом практическом занятии мы изучим классификацию с использованием гауссовского процесса (GPC) с ядром RBF и различными вариантами гиперпараметров. Мы сгенерируем данные, обучим модель GPC с фиксированными и оптимизированными гиперпараметрами, а также построим постериорные распределения и ландшафт лог-маргинального правдоподобия. Мы также оценим точность и log-loss модели.

Советы по использованию ВМ

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/gaussian_process("Gaussian Processes") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/metrics("Metrics") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/gaussian_process -.-> lab-49143{{"Вероятностные прогнозы с использованием классификации гауссовского процесса"}} sklearn/metrics -.-> lab-49143{{"Вероятностные прогнозы с использованием классификации гауссовского процесса"}} ml/sklearn -.-> lab-49143{{"Вероятностные прогнозы с использованием классификации гауссовского процесса"}} end

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

Для этого практического занятия мы импортируем необходимые библиотеки.

import numpy as np
from matplotlib import pyplot as plt
from sklearn.metrics import accuracy_score, log_loss
from sklearn.gaussian_process import GaussianProcessClassifier
from sklearn.gaussian_process.kernels import RBF

Генерация данных

Мы сгенерируем данные с использованием NumPy. Мы сгенерируем 100 точек данных с равномерным распределением между 0 и 5. Мы установим порог в 2,5 и сгенерируем метки с использованием булевого выражения. Мы будем использовать первые 50 точек данных в качестве обучающих данных, а оставшиеся - в качестве тестовых данных.

train_size = 50
rng = np.random.RandomState(0)
X = rng.uniform(0, 5, 100)[:, np.newaxis]
y = np.array(X[:, 0] > 2.5, dtype=int)

Обучение модели

Мы обучим модель GPC с использованием как фиксированных, так и оптимизированных гиперпараметров. Мы выведем log-маргинальное правдоподобие, точность и log-loss моделей.

## Fixed Hyperparameters
gp_fix = GaussianProcessClassifier(kernel=1.0 * RBF(length_scale=1.0), optimizer=None)
gp_fix.fit(X[:train_size], y[:train_size])

## Optimized Hyperparameters
gp_opt = GaussianProcessClassifier(kernel=1.0 * RBF(length_scale=1.0))
gp_opt.fit(X[:train_size], y[:train_size])

## Results
print("Log Marginal Likelihood (initial): %.3f" % gp_fix.log_marginal_likelihood(gp_fix.kernel_.theta))
print("Log Marginal Likelihood (optimized): %.3f" % gp_opt.log_marginal_likelihood(gp_opt.kernel_.theta))
print("Accuracy: %.3f (initial) %.3f (optimized)" % (accuracy_score(y[:train_size], gp_fix.predict(X[:train_size])), accuracy_score(y[:train_size], gp_opt.predict(X[:train_size]))))
print("Log-loss: %.3f (initial) %.3f (optimized)" % (log_loss(y[:train_size], gp_fix.predict_proba(X[:train_size])[:, 1]), log_loss(y[:train_size], gp_opt.predict_proba(X[:train_size])[:, 1])))

Построение постериорных распределений

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

## Plot posteriors
plt.figure()
plt.scatter(X[:train_size, 0], y[:train_size], c="k", label="Train data", edgecolors=(0, 0, 0))
plt.scatter(X[train_size:, 0], y[train_size:], c="g", label="Test data", edgecolors=(0, 0, 0))
X_ = np.linspace(0, 5, 100)
plt.plot(X_, gp_fix.predict_proba(X_[:, np.newaxis])[:, 1], "r", label="Initial kernel: %s" % gp_fix.kernel_)
plt.plot(X_, gp_opt.predict_proba(X_[:, np.newaxis])[:, 1], "b", label="Optimized kernel: %s" % gp_opt.kernel_)
plt.xlabel("Feature")
plt.ylabel("Class 1 probability")
plt.xlim(0, 5)
plt.ylim(-0.25, 1.5)
plt.legend(loc="best")

Построение ландшафта log-маргинального правдоподобия

Мы построим ландшафт log-маргинального правдоподобия модели GPC с использованием различных вариантов гиперпараметров. Мы выделим гиперпараметры, использованные на предыдущем графике. Также мы подписываем графики.

## Plot LML landscape
plt.figure()
theta0 = np.logspace(0, 8, 30)
theta1 = np.logspace(-1, 1, 29)
Theta0, Theta1 = np.meshgrid(theta0, theta1)
LML = [[gp_opt.log_marginal_likelihood(np.log([Theta0[i, j], Theta1[i, j]])) for i in range(Theta0.shape[0])] for j in range(Theta0.shape[1])]
LML = np.array(LML).T
plt.plot(np.exp(gp_fix.kernel_.theta)[0], np.exp(gp_fix.kernel_.theta)[1], "ko", zorder=10)
plt.plot(np.exp(gp_opt.kernel_.theta)[0], np.exp(gp_opt.kernel_.theta)[1], "ko", zorder=10)
plt.pcolor(Theta0, Theta1, LML)
plt.xscale("log")
plt.yscale("log")
plt.colorbar()
plt.xlabel("Magnitude")
plt.ylabel("Length-scale")
plt.title("Log-marginal-likelihood")

Резюме

В этом практическом занятии мы изучили классификацию с использованием гауссовского процесса (Gaussian Process Classification, GPC) с ядром RBF и различными вариантами гиперпараметров. Мы сгенерировали данные, обучили модель GPC с фиксированными и оптимизированными гиперпараметрами, построили постериорные распределения и ландшафт log-маргинального правдоподобия. Мы также оценили точность и log-loss модели.