Введение
В этом практическом занятии мы научимся строить графики вероятностей классов, вычисляемых 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. Затем мы проанализировали весовые коэффициенты вероятностей, подгоняя каждый классификатор на обучающем наборе и строя графики предсказанных вероятностей классов для первого примера в наборе данных.