Ансамбль классификаторов-цепочек

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

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

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

Введение

В этом практическом занятии показано, как использовать классификаторную цепочку на мультиметкированном наборе данных. Алгоритм классификаторной цепи представляет собой модификацию метода преобразования проблемы для мультиметкированной классификации. Этот метод использует корреляцию между классами, строя цепочку бинарных классификаторов. Каждая модель получает предсказания предыдущих моделей в цепи в качестве признаков. Мы будем использовать набор данных yeast, в котором содержится 2417 точек данных, каждая из которых имеет 103 признака и 14 возможных меток. Каждая точка данных имеет по крайней мере одну метку. В качестве базовой линии мы сначала обучаем логистическую регрессию для каждой из 14 меток. Чтобы оценить производительность этих классификаторов, мы делаем предсказания на отложенной тестовой выборке и вычисляем показатель Джаккара для каждой выборки.

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

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49079{{"Ансамбль классификаторов-цепочек"}} end

Загрузка набора данных yeast

X, Y = fetch_openml("yeast", version=4, return_X_y=True, parser="pandas")
Y = Y == "TRUE"
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)

Обучение независимой модели логистической регрессии для каждого класса

base_lr = LogisticRegression()
ovr = OneVsRestClassifier(base_lr)
ovr.fit(X_train, Y_train)
Y_pred_ovr = ovr.predict(X_test)
ovr_jaccard_score = jaccard_score(Y_test, Y_pred_ovr, average="samples")

Обучение ансамбля классификаторов-цепочек логистической регрессии

chains = [ClassifierChain(base_lr, order="random", random_state=i) for i in range(10)]
for chain in chains:
    chain.fit(X_train, Y_train)

Y_pred_chains = np.array([chain.predict(X_test) for chain in chains])
chain_jaccard_scores = [
    jaccard_score(Y_test, Y_pred_chain >= 0.5, average="samples")
    for Y_pred_chain in Y_pred_chains
]

Взять среднее предсказание для всех цепочек

Y_pred_ensemble = Y_pred_chains.mean(axis=0)
ensemble_jaccard_score = jaccard_score(
    Y_test, Y_pred_ensemble >= 0.5, average="samples"
)

Построить графики показателей сходства Жаккара

model_scores = [ovr_jaccard_score] + chain_jaccard_scores
model_scores.append(ensemble_jaccard_score)

model_names = (
    "Independent",
    "Chain 1",
    "Chain 2",
    "Chain 3",
    "Chain 4",
    "Chain 5",
    "Chain 6",
    "Chain 7",
    "Chain 8",
    "Chain 9",
    "Chain 10",
    "Ensemble",
)

x_pos = np.arange(len(model_names))

fig, ax = plt.subplots(figsize=(7, 4))
ax.grid(True)
ax.set_title("Classifier Chain Ensemble Performance Comparison")
ax.set_xticks(x_pos)
ax.set_xticklabels(model_names, rotation="vertical")
ax.set_ylabel("Jaccard Similarity Score")
ax.set_ylim([min(model_scores) * 0.9, max(model_scores) * 1.1])
colors = ["r"] + ["b"] * len(chain_jaccard_scores) + ["g"]
ax.bar(x_pos, model_scores, alpha=0.5, color=colors)
plt.tight_layout()
plt.show()

Резюме

В этом практическом занятии показано, как использовать алгоритм Classifier Chain для построения ансамбля классификаторов-цепочек логистической регрессии для использования корреляций между классами. Показатель сходства Жаккара для каждой цепи, как правило, больше, чем у набора независимых логистических моделей. Наконец, мы построили ансамбль классификаторов-цепочек путем усреднения бинарных прогнозов цепочек и применили порог в 0,5. Показатель сходства Жаккара ансамбля был больше, чем у независимых моделей, и имел тенденцию превышать показатель каждой цепи в ансамбле.