{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "import matplotlib.pyplot as plt\n", "import matplotlib as mpl" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Data" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "points = [[0.71, 0.18, 2.50, 0.45, 0.03, \n", " 0.12, 0.30, 2.65, 0.90, 0.46], \n", " [0.14, 0.23, 2.30, 0.17, 0.44,\n", " 0.24, 0.03, 2.10, 0.92, 0.33]]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(10, 2)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = np.array(points).T\n", "data.shape" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(data[:, 0], data[:, 1], 'o')\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Move data using mean" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "x = data[:, 0]\n", "y = data[:, 1]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.83" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x_bar = round(x.mean(), 2)\n", "x_bar" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.69" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_bar = round(y.mean(), 2)\n", "y_bar" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-0.12, -0.65, 1.67, -0.38, -0.8 , -0.71, -0.53, 1.82, 0.07,\n", " -0.37])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scaled_x = x - x_bar\n", "scaled_x" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-0.55, -0.46, 1.61, -0.52, -0.25, -0.45, -0.66, 1.41, 0.23,\n", " -0.36])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scaled_y = y - y_bar\n", "scaled_y" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(scaled_x, scaled_y, 'o')\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Covariance matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$cov(x, y)=cov(y,x)=\\Sigma_{1}^{10}\\frac{(x_i-\\bar{x})(y_i-\\bar{y})}{10-1}$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.75957" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cov_xy = round(np.sum(scaled_x * scaled_y) / 9, 5)\n", "cov_xy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$cov(x, x)=var(x)=\\Sigma_{1}^{10}\\frac{(x_i-\\bar{x})(x_i-\\bar{x})}{10-1}$" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9166" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "var_x = round(np.sum(scaled_x * scaled_x) / 9, 5)\n", "var_x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$cov(y, y)=var(y)=\\Sigma_{1}^{10}\\frac{(y_i-\\bar{y})(y_i-\\bar{y})}{10-1}$" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.6942" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "var_y = round(np.sum(scaled_y * scaled_y) / 9, 5)\n", "var_y" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.9166 , 0.75956667],\n", " [0.75956667, 0.6942 ]])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.cov(x, y, ddof=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Eigenvectors of covariance matrix" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "e_vals, e_vecs = np.linalg.eig(np.cov(x, y, ddof=1))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1.57306331, 0.03773669])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e_vals" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.75658944, -0.65389022],\n", " [ 0.65389022, 0.75658944]])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e_vecs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "첫 번째 eigenvect를 선택한다." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.75658944, 0.65389022])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e_vecs[:, 0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Points on principal component" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.12, -0.55],\n", " [-0.65, -0.46],\n", " [ 1.67, 1.61],\n", " [-0.38, -0.52],\n", " [-0.8 , -0.25],\n", " [-0.71, -0.45],\n", " [-0.53, -0.66],\n", " [ 1.82, 1.41],\n", " [ 0.07, 0.23],\n", " [-0.37, -0.36]])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scaled_data = np.c_[scaled_x, scaled_y]\n", "scaled_data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Scaled data를 principal components에 투영시키면 새로운 points가 생성된다." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-0.45043035, -0.79257264, 2.31626762, -0.6275269 , -0.76874411,\n", " -0.8314291 , -0.83255995, 2.29897799, 0.20335601, -0.51533857])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_points = np.dot(scaled_data, e_vecs[:, 0])\n", "new_points" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visualization" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "origin = [0], [0]\n", "plt.plot(scaled_x, scaled_y, 'o')\n", "plt.quiver(*origin, e_vecs[:, 0], e_vecs[:, 1], color=['r','b','g'], scale=3)\n", "plt.grid()" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 두 eigenvector의 내적값은 0이다. 즉 90도 이다.\n", "np.dot(e_vecs[:, 0], e_vecs[:, 1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Sklearn을 사용하여 결과를 비교해보자." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "from sklearn.decomposition import PCA" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,\n", " svd_solver='auto', tol=0.0, whiten=False)" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pca = PCA(n_components=2)\n", "pca.fit(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Covariance matrix" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.9166 , 0.75956667],\n", " [0.75956667, 0.6942 ]])" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pca.get_covariance()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pricipal components위로 projection된 데이터" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.45043035, 0.33765737],\n", " [-0.79257264, -0.0769975 ],\n", " [ 2.31626762, -0.12611234],\n", " [-0.6275269 , 0.14494823],\n", " [-0.76874411, -0.33396481],\n", " [-0.8314291 , -0.1237968 ],\n", " [-0.83255995, 0.15278722],\n", " [ 2.29897799, 0.12328908],\n", " [ 0.20335601, -0.12824326],\n", " [-0.51533857, 0.03043282]])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pca.transform(data)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.7" } }, "nbformat": 4, "nbformat_minor": 2 }