Spec-Zone.ru › scikit-learn

Примечание

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

Анализ главных компонент (PCA) на наборе данных Iris

В этом примере показан широко известный метод декомпозиции — анализ главных компонент (PCA) — на наборе данных Iris.

Этот набор данных содержит 4 признака: длина чашелистика, ширина чашелистика, длина лепестка и ширина лепестка. Мы используем PCA, чтобы спроецировать это 4-мерное пространство признаков в 3-мерное пространство.

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

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

Набор данных Iris входит в состав scikit-learn. Его можно загрузить с помощью функции load_iris. При параметрах по умолчанию возвращается объект Bunch, содержащий данные, целевые значения, названия признаков и названия целевых классов.

from sklearn.datasets import load_iris

iris = load_iris(as_frame=True)
print(iris.keys())
dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])

Графики пар признаков набора данных Iris

Сначала построим графики пар признаков набора данных Iris.

import seaborn as sns

# Rename classes using the iris target names
iris.frame["target"] = iris.target_names[iris.target]
_ = sns.pairplot(iris.frame, hue="target")
plot pca iris

Каждая точка на каждой диаграмме рассеяния соответствует одному из 150 цветков ириса в наборе данных; цвет обозначает их тип (Setosa, Versicolor и Virginica).

Уже заметна закономерность для типа Setosa: его легко распознать по коротким и широким чашелистикам. Если учитывать только эти два измерения — ширину и длину чашелистика, — типы Versicolor и Virginica всё ещё перекрываются.

На диагонали графика показано распределение каждого признака. Видно, что ширина и длина лепестка лучше всего различают три типа.

Построение представления PCA

Применим анализ главных компонент (PCA) к набору данных Iris, а затем построим график ирисов по первым трём главным компонентам. Это позволит лучше различать три типа!

import matplotlib.pyplot as plt

# unused but required import for doing 3d projections with matplotlib < 3.2
import mpl_toolkits.mplot3d  # noqa: F401

from sklearn.decomposition import PCA

fig = plt.figure(1, figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d", elev=-150, azim=110)

X_reduced = PCA(n_components=3).fit_transform(iris.data)
scatter = ax.scatter(
    X_reduced[:, 0],
    X_reduced[:, 1],
    X_reduced[:, 2],
    c=iris.target,
    s=40,
)

ax.set(
    title="First three principal components",
    xlabel="1st Principal Component",
    ylabel="2nd Principal Component",
    zlabel="3rd Principal Component",
)
ax.xaxis.set_ticklabels([])
ax.yaxis.set_ticklabels([])
ax.zaxis.set_ticklabels([])

# Add a legend
legend1 = ax.legend(
    scatter.legend_elements()[0],
    iris.target_names.tolist(),
    loc="upper right",
    title="Classes",
)
ax.add_artist(legend1)

plt.show()
First three principal components

PCA создаёт 3 новых признака, представляющих собой линейные комбинации 4 исходных признаков. Кроме того, это преобразование максимизирует дисперсию. Благодаря ему каждый вид можно определить, используя только первую главную компоненту.

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_pca_iris.ipynb

Download Python source code: plot_pca_iris.py

Download zipped: plot_pca_iris.zip

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

Сравнение двумерных проекций набора данных Iris с помощью LDA и PCA

Инкрементальный PCA

Разделяющая поверхность деревьев решений, обученных на наборе данных Iris

Построение графика многоклассового SGD на наборе данных Iris

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

Spec-Zone.ru

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