Примечание
Перейти к концу, чтобы загрузить весь пример кода. или запустить этот пример в вашем браузере через JupyterLite или Binder
Анализ главных компонент (PCA) на наборе данных Ирис
В этом примере показана хорошо известная техника разложения, известная как Анализ главных компонент (PCA), на наборе данных Ирис.
Этот набор данных состоит из 4 признаков: длина чашелистика, ширина чашелистика, длина лепестка, ширина лепестка. Мы используем PCA для проекции этого 4-мерного пространства в 3-мерное пространство.
# Authors: The scikit-learn developers # SPDX-License-Identifier: BSD-3-Clause
Загрузка набора данных Ирис
Набор данных Ирис напрямую доступен как часть 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'])
График пар признаков набора данных Ирис
Сначала построим график пар признаков набора данных Ирис.
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 цветов ирисов в наборе данных, при этом цвет указывает на их тип (Сетоса, Версиколор и Вирджиника).
Вы уже можете увидеть закономерность в отношении типа Сетоса, который легко идентифицировать по его короткому и широкому чашелистику. Только рассматривая эти две размерности, ширину и длину чашелистика, все еще наблюдается перекрытие между типами Версиколор и Вирджиника.
Диагональ графика показывает распределение каждого признака. Мы наблюдаем, что ширина и длина лепестка являются наиболее дискриминационными признаками для трех типов.
Построение представления PCA
Давайте применим Анализ главных компонент (PCA) к набору данных Ирис, а затем построим ирисы на основе первых трех измерений PCA. Это позволит нам лучше различать три типа!
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 PCA dimensions",
xlabel="1st Eigenvector",
ylabel="2nd Eigenvector",
zlabel="3rd Eigenvector",
)
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 минут 3.051 секунды)
Связанные примеры
© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/decomposition/plot_pca_iris.html