3
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
# Load and prepare the data
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['target'] = iris.target
df['target_names'] = pd.Categorical.from_codes(iris.target,
iris.target_names)
# Standardize the features and perform PCA
X = df[iris.feature_names]
X_scaled = StandardScaler().fit_transform(X)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# Plot PCA results
plt.figure(figsize=(10, 8))
for target, target_name in zip(sorted(df['target'].unique()),
sorted(df['target_names'].unique())):
mask = df['target'] == target
plt.scatter(X_pca[mask, 0], X_pca[mask,
1], label=target_name, alpha=0.8)
plt.xlabel(f'PC1 ({pca.explained_variance_ratio_[0]:.2%}
variance)')
plt.ylabel(f'PC2 ({pca.explained_variance_ratio_[1]:.2%}
variance)')
plt.title('PCA of Iris Dataset')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
# Plot cumulative explained variance
plt.figure(figsize=(10, 6))
plt.plot(np.cumsum(pca.explained_variance_ratio_), 'bo-')
plt.xlabel('Number of Components')
plt.ylabel('Cumulative Explained Variance')
plt.title('Explained Variance vs. Number of Components')
plt.grid(True, alpha=0.3)
plt.show()
Comments
Post a Comment