Spec-Zone.ru › scikit-learn

Примечание

Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере через JupyterLite или Binder.

Построение графиков для разных классификаторов SVM на наборе данных ирисов

Сравнение различных линейных классификаторов SVM на двумерной проекции набора данных ирисов. Мы рассматриваем только первые два признака этого набора данных:

  • Длина чашелистика
  • Ширина чашелистика

В этом примере показано, как построить поверхность решений и отобразить опорные векторы для четырёх классификаторов SVM с разными ядрами.

Линейные модели LinearSVC() и SVC(kernel='linear') дают немного различающиеся границы решений. Это может быть следствием следующих различий:

  • LinearSVC минимизирует квадратичную функцию потерь с шарниром, тогда как SVC минимизирует обычную функцию потерь с шарниром.
  • LinearSVC использует многоклассовую стратегию «один против всех» (также известную как «один против остальных»), тогда как SVC использует многоклассовую стратегию «один против одного».

Обе линейные модели имеют линейные границы решений (пересекающиеся гиперплоскости), тогда как нелинейные модели с ядрами (полиномиальным или гауссовым RBF) имеют более гибкие нелинейные границы решений, форма которых зависит от типа ядра и его параметров.

Примечание

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

SVC with linear kernel, LinearSVC (linear kernel), SVC with RBF kernel, SVC with polynomial (degree 3) kernel
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

import matplotlib.pyplot as plt
import numpy as np

from sklearn import datasets, svm
from sklearn.inspection import DecisionBoundaryDisplay

# Import some data to play with.
iris = datasets.load_iris()
# Take the first two features. We could avoid this by using a two-dim dataset.
X = iris.data[:, :2]
y = iris.target

# We create an instance of SVM and fit out data. We do not scale our
# data since we want to plot the support vectors.
C = 1.0  # SVM regularization parameter
models = (
    svm.SVC(kernel="linear", C=C),
    svm.LinearSVC(C=C, max_iter=10000),
    svm.SVC(kernel="rbf", gamma=0.7, C=C),
    svm.SVC(kernel="poly", degree=3, gamma="auto", C=C),
)
models = (clf.fit(X, y) for clf in models)

# Title for the plots
titles = (
    "SVC with linear kernel",
    "LinearSVC (linear kernel)",
    "SVC with RBF kernel",
    "SVC with polynomial (degree 3) kernel",
)

# Set-up 2x2 grid for plotting.
fig, sub = plt.subplots(2, 2)
plt.subplots_adjust(wspace=0.4, hspace=0.4)

for clf, title, ax in zip(models, titles, sub.flatten()):
    disp = DecisionBoundaryDisplay.from_estimator(
        clf,
        X,
        response_method="predict",
        multiclass_colors="coolwarm",
        alpha=0.8,
        ax=ax,
        xlabel=iris.feature_names[0],
        ylabel=iris.feature_names[1],
    )

    # Plot the support vectors.
    # For LinearSVC we compute the support vectors from the decision function, see
    # https://scikit-learn.org/dev/auto_examples/svm/plot_linearsvc_support_vectors.html
    if hasattr(clf, "support_"):
        support_vector_indices = clf.support_
    else:
        decision_function = clf.decision_function(X)
        support_vector_indices = (np.abs(decision_function) <= 1 + 1e-15).nonzero()[0]
    ax.scatter(
        X[support_vector_indices, 0],
        X[support_vector_indices, 1],
        c=y[support_vector_indices],
        cmap=plt.cm.coolwarm,
        edgecolors="k",
    )

    ax.set_xticks(())
    ax.set_yticks(())
    ax.set_title(title)

plt.show()

Общее время выполнения скрипта: (0 минут 0.235 секунды)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_iris_svc.ipynb

Download Python source code: plot_iris_svc.py

Download zipped: plot_iris_svc.zip

Связанные примеры

Построение графика опорных векторов в LinearSVC

SVM с пользовательским ядром

Параметры SVM с RBF-ядром

SVM-Anova: SVM с одномерным отбором признаков

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/svm/plot_iris_svc.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API