Вероятности классов с использованием VotingClassifier

Beginner

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

Введение

В этом практическом занятии мы научимся строить графики вероятностей классов, вычисляемых VotingClassifier в Scikit-Learn. Мы будем использовать три различных классификатора: LogisticRegression, GaussianNB и RandomForestClassifier, и усреднять их предсказанные вероятности с использованием VotingClassifier. Затем мы визуализируем веса вероятностей путём подгонки каждого классификатора на наборе обучающих данных и строим графики предсказанных вероятностей классов для первого примера в наборе данных.

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

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

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

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

Инициализация классификаторов и датасета

Сначала мы инициализируем три классификатора и небольшой искусственный датасет. В качестве классификаторов мы будем использовать LogisticRegression, GaussianNB и RandomForestClassifier, а в качестве искусственного датасета — X и y.

import numpy as np
import matplotlib.pyplot as plt

from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier

clf1 = LogisticRegression(max_iter=1000, random_state=123)
clf2 = RandomForestClassifier(n_estimators=100, random_state=123)
clf3 = GaussianNB()
X = np.array([[-1.0, -1.0], [-1.2, -1.4], [-3.4, -2.2], [1.1, 1.2]])
y = np.array([1, 1, 2, 2])

Инициализация VotingClassifier

Затем мы инициализируем VotingClassifier с мягким голосованием с весами [1, 1, 5], что означает, что при вычислении усреднённой вероятности предсказанные вероятности RandomForestClassifier учитываются в пять раз больше, чем веса других классификаторов.

eclf = VotingClassifier(
    estimators=[("lr", clf1), ("rf", clf2), ("gnb", clf3)],
    voting="soft",
    weights=[1, 1, 5],
)

Предсказание вероятностей классов для всех классификаторов

Мы будем предсказывать вероятности классов для всех классификаторов с использованием функции predict_proba().

probas = [c.fit(X, y).predict_proba(X) for c in (clf1, clf2, clf3, eclf)]

Получение вероятностей классов для первого примера в наборе данных

Мы получим вероятности классов для первого примера в наборе данных и сохраним их в class1_1 и class2_1.

class1_1 = [pr[0, 0] for pr in probas]
class2_1 = [pr[0, 1] for pr in probas]

Построение графиков вероятностей классов

Мы построим графики вероятностей классов для каждого классификатора и VotingClassifier с использованием столбчатой диаграммы.

N = 4  ## количество групп
ind = np.arange(N)  ## позиции групп
width = 0.35  ## ширина столбца

fig, ax = plt.subplots()

## столбцы для классификаторов 1-3
p1 = ax.bar(ind, np.hstack(([class1_1[:-1], [0]])), width, color="green", edgecolor="k")
p2 = ax.bar(
    ind + width,
    np.hstack(([class2_1[:-1], [0]])),
    width,
    color="lightgreen",
    edgecolor="k",
)

## столбцы для VotingClassifier
p3 = ax.bar(ind, [0, 0, 0, class1_1[-1]], width, color="blue", edgecolor="k")
p4 = ax.bar(
    ind + width, [0, 0, 0, class2_1[-1]], width, color="steelblue", edgecolor="k"
)

## настройка графиков
plt.axvline(2.8, color="k", linestyle="dashed")
ax.set_xticks(ind + width)
ax.set_xticklabels(
    [
        "LogisticRegression\nвес 1",
        "GaussianNB\nвес 1",
        "RandomForestClassifier\nвес 5",
        "VotingClassifier\n(средние вероятности)",
    ],
    rotation=40,
    ha="right",
)
plt.ylim([0, 1])
plt.title("Вероятности классов для примера 1 разных классификаторов")
plt.legend([p1[0], p2[0]], ["класс 1", "класс 2"], loc="upper left")
plt.tight_layout()
plt.show()

Резюме

В этом практическом занятии мы научились строить графики вероятностей классов, вычисляемых VotingClassifier в Scikit-Learn. Мы использовали три различных классификатора, включая LogisticRegression, GaussianNB и RandomForestClassifier, и усреднили их предсказанные вероятности с использованием VotingClassifier. Затем мы проанализировали весовые коэффициенты вероятностей, подгоняя каждый классификатор на обучающем наборе и строя графики предсказанных вероятностей классов для первого примера в наборе данных.