60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
"""
|
|
=========================================================
|
|
PCA example with Iris Data-set
|
|
=========================================================
|
|
|
|
Principal Component Analysis applied to the Iris dataset.
|
|
|
|
See `here <https://en.wikipedia.org/wiki/Iris_flower_data_set>`_ for more
|
|
information on this dataset.
|
|
|
|
"""
|
|
|
|
# Code source: Gaël Varoquaux
|
|
# License: BSD 3 clause
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
# unused but required import for doing 3d projections with matplotlib < 3.2
|
|
import mpl_toolkits.mplot3d # noqa: F401
|
|
import numpy as np
|
|
|
|
from sklearn import datasets, decomposition
|
|
|
|
np.random.seed(5)
|
|
|
|
iris = datasets.load_iris()
|
|
X = iris.data
|
|
y = iris.target
|
|
|
|
fig = plt.figure(1, figsize=(4, 3))
|
|
plt.clf()
|
|
|
|
ax = fig.add_subplot(111, projection="3d", elev=48, azim=134)
|
|
ax.set_position([0, 0, 0.95, 1])
|
|
|
|
|
|
plt.cla()
|
|
pca = decomposition.PCA(n_components=3)
|
|
pca.fit(X)
|
|
X = pca.transform(X)
|
|
|
|
for name, label in [("Setosa", 0), ("Versicolour", 1), ("Virginica", 2)]:
|
|
ax.text3D(
|
|
X[y == label, 0].mean(),
|
|
X[y == label, 1].mean() + 1.5,
|
|
X[y == label, 2].mean(),
|
|
name,
|
|
horizontalalignment="center",
|
|
bbox=dict(alpha=0.5, edgecolor="w", facecolor="w"),
|
|
)
|
|
# Reorder the labels to have colors matching the cluster results
|
|
y = np.choose(y, [1, 2, 0]).astype(float)
|
|
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap=plt.cm.nipy_spectral, edgecolor="k")
|
|
|
|
ax.xaxis.set_ticklabels([])
|
|
ax.yaxis.set_ticklabels([])
|
|
ax.zaxis.set_ticklabels([])
|
|
|
|
plt.show()
|