Примечание
Перейти в конец, чтобы скачать полный код примера или запустить его в браузере через 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")

Каждая точка на каждой диаграмме рассеяния соответствует одному из 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()

PCA создаёт 3 новых признака, представляющих собой линейные комбинации 4 исходных признаков. Кроме того, это преобразование максимизирует дисперсию. Благодаря ему каждый вид можно определить, используя только первую главную компоненту.
Общее время выполнения скрипта: (0 минут 2.126 секунды)
Связанные примеры
© 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