Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
probml
GitHub Repository: probml/pyprobml
Path: blob/master/notebooks/book1/20/pca_projected_variance.ipynb
1192 views
Kernel: Unknown Kernel
# pca 1d : visualize variacnce of projecton # Code is based on chapter 8 of # https://github.com/ageron/handson-ml2 import numpy as np import matplotlib.pyplot as plt try: from sklearn.decomposition import PCA except ModuleNotFoundError: %pip install -qq scikit-learn from sklearn.decomposition import PCA try: from probml_utils import savefig except ModuleNotFoundError: %pip install -qq git+https://github.com/probml/probml-utils.git from probml_utils import savefig angle = np.pi / 5 stretch = 5 m = 200 np.random.seed(3) X = np.random.randn(m, 2) / 10 X = X.dot(np.array([[stretch, 0], [0, 1]])) # stretch X = X.dot([[np.cos(angle), np.sin(angle)], [-np.sin(angle), np.cos(angle)]]) # rotate u1 = np.array([np.cos(angle), np.sin(angle)]) u2 = np.array([np.cos(angle - 2 * np.pi / 6), np.sin(angle - 2 * np.pi / 6)]) u3 = np.array([np.cos(angle - np.pi / 2), np.sin(angle - np.pi / 2)]) X_proj1 = X.dot(u1.reshape(-1, 1)) X_proj2 = X.dot(u2.reshape(-1, 1)) X_proj3 = X.dot(u3.reshape(-1, 1)) plt.figure(figsize=(8, 4)) plt.subplot2grid((3, 2), (0, 0), rowspan=3) plt.plot([-1.4, 1.4], [-1.4 * u1[1] / u1[0], 1.4 * u1[1] / u1[0]], "k-", linewidth=1) plt.plot([-1.4, 1.4], [-1.4 * u2[1] / u2[0], 1.4 * u2[1] / u2[0]], "k--", linewidth=1) plt.plot([-1.4, 1.4], [-1.4 * u3[1] / u3[0], 1.4 * u3[1] / u3[0]], "k:", linewidth=2) plt.plot(X[:, 0], X[:, 1], "bo", alpha=0.5) plt.axis([-1.4, 1.4, -1.4, 1.4]) plt.arrow(0, 0, u1[0], u1[1], head_width=0.1, linewidth=5, length_includes_head=True, head_length=0.1, fc="k", ec="k") plt.arrow(0, 0, u3[0], u3[1], head_width=0.1, linewidth=5, length_includes_head=True, head_length=0.1, fc="k", ec="k") plt.text(u1[0] + 0.1, u1[1] - 0.05, r"$v_1$", fontsize=22) plt.text(u2[0] + 0.1, u2[1], r"$v'$", fontsize=22) # KPM plt.text(u3[0] + 0.1, u3[1], r"$v_2$", fontsize=22) plt.xlabel("$x_1$", fontsize=18) plt.ylabel("$x_2$", fontsize=18, rotation=0) plt.grid(True) plt.subplot2grid((3, 2), (0, 1)) plt.plot([-2, 2], [0, 0], "k-", linewidth=1) plt.plot(X_proj1[:, 0], np.zeros(m), "bo", alpha=0.3) plt.gca().get_yaxis().set_ticks([]) plt.gca().get_xaxis().set_ticklabels([]) plt.axis([-2, 2, -1, 1]) plt.grid(True) plt.subplot2grid((3, 2), (1, 1)) plt.plot([-2, 2], [0, 0], "k--", linewidth=1) plt.plot(X_proj2[:, 0], np.zeros(m), "bo", alpha=0.3) plt.gca().get_yaxis().set_ticks([]) plt.gca().get_xaxis().set_ticklabels([]) plt.axis([-2, 2, -1, 1]) plt.grid(True) plt.subplot2grid((3, 2), (2, 1)) plt.plot([-2, 2], [0, 0], "k:", linewidth=2) plt.plot(X_proj3[:, 0], np.zeros(m), "bo", alpha=0.3) plt.gca().get_yaxis().set_ticks([]) plt.axis([-2, 2, -1, 1]) plt.xlabel("$z_1$", fontsize=18) plt.grid(True) plt.tight_layout() savefig("pca_projected_variance.pdf", dpi=300) plt.show()