Files
FYS-STK4155/doc/MathFoundationML/PythonCode_KernelPCA.ipynb
T
Morten Hjorth-Jensen 69cf4fa816 adding notes
2024-01-07 17:01:32 +01:00

257 lines
79 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Nonlinear/Kernel PCA Example#"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Half-Moon Data##"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from sklearn.datasets import make_moons\n",
"X, y = make_moons(n_samples=100, random_state=123)\n",
"\n",
"plt.figure(figsize=(8,6))\n",
"\n",
"plt.scatter(X[y==0, 0], X[y==0, 1], color='red', alpha=0.5)\n",
"plt.scatter(X[y==1, 0], X[y==1, 1], color='blue', alpha=0.5)\n",
"\n",
"plt.title('A nonlinear 2Ddataset')\n",
"plt.ylabel('y coordinate')\n",
"plt.xlabel('x coordinate')\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Linear PCA with Two Principal Components##"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.decomposition import PCA\n",
"\n",
"scikit_pca = PCA(n_components=2)\n",
"X_spca = scikit_pca.fit_transform(X)\n",
"\n",
"plt.figure(figsize=(8,6))\n",
"plt.scatter(X_spca[y==0, 0], X_spca[y==0, 1], color='red', alpha=0.5)\n",
"plt.scatter(X_spca[y==1, 0], X_spca[y==1, 1], color='blue', alpha=0.5)\n",
"\n",
"plt.title('First 2 principal components after Linear PCA')\n",
"plt.xlabel('PC1')\n",
"plt.ylabel('PC2')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. Linear PCA with One Principal Component##"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"scikit_pca = PCA(n_components=1)\n",
"X_spca = scikit_pca.fit_transform(X)\n",
"\n",
"plt.figure(figsize=(8,6))\n",
"plt.scatter(X_spca[y==0, 0], np.zeros((50,1)), color='red', alpha=0.5)\n",
"plt.scatter(X_spca[y==1, 0], np.zeros((50,1)), color='blue', alpha=0.5)\n",
"\n",
"plt.title('First principal component after Linear PCA')\n",
"plt.xlabel('PC1')\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. Kernel PCA with Radial Basis Function (RBF) Kernel and Two Principal Components##\n",
"\n",
"The radial basis function kernel is \n",
"$$\n",
"k(x,y) = \\exp(-\\gamma \\|x-y\\|^2).\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgEAAAGDCAYAAACydsMvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dfbwkVX3n8c93eJDnYXiQp2GECIYgjkiuiIlRXGWXQZLBq2tgETFMIGSXNSZODCtrQlZNCJnNKhs2SMSAD0ERL0JYiCKImFWEi8FRRAIoXEZGQJgZQEUe5rd/VF2mbk8/VPft7nr6vl+v+7rdXdXV53TVOefX55yqUkRgZmZmzbOg6ASYmZlZMRwEmJmZNZSDADMzs4ZyEGBmZtZQDgLMzMwaykGAmZlZQzkIGCFJT0r6paLTMQhJ75P0sSFsZyjfgaSzJX1qvtux/CTtIekmSU9I+p9Fp6cuJL1T0r8UnY5eJJ0o6Utj/LxrJZ2cPu74HQ2SLkn3SXrjMNJZNw4ChiA9wH6eNnizf3tHxA4R8YMBtnekpDU91vljSd9NK+gfSvrjwXOwuYj4i4j43SFsZ6DvwPLJc6zMw2nAT4CdIuI9km6UNO9jIivd5lNpmfmJpClJe2WWny3pmUy5ulPSWzLLj5S0saXs/VOHz7pY0gczz18qaa2k9wwzT/MhaT9JkcnLfZLOzCyXpHelZf+nktZI+pykl7Vs5+x0O4cPmpaI+HRE/Pv55KfPz1sWEZfkWG9OutJ8HjDa1NWXg4Dh+c20wZv9e7DbypK2mOfnCXgHsAg4GjhD0vHz3GayYWnLYWzHKu9FwPdiSFcU63LMnxEROwAHADsAq1qWf3a2XAHvBj4laY/M8gdbyt5v5kjLocBXgA9FRF+9HGMqHzun+T0B+FNJR6evfwT4A+BdwC7AS4AvAG/KpE/AScBjwMljSGtjDaEeL5yDgBHKRqjpr5C/k3SNpJ8Cr5d0jKTvpb/mfyRppaTtgWuBvbO9Cq3bjohzI+JbEfFsRNwFXAn8eod0zP66OE3Sg62/ftJfDZdL+pSkx4F3ZrvfM+8/WdJM+ovtrMz7t1AyfHBvmpfbJO3b4Tu4QNJ16XpflfSizHY+IukBSY+n2/iNPr7r5ZJuT99772ylKWlvSVdJekzSPZJObcn359J8PyHpO5JeIum/SXo4TUv2F8eNkv5S0i2SNki6UtIumeW/JekOSevTdX8ls+y+dP+uTt/7WUnbZJYfm6Z/vaSvS1ra672djhVJh0uaTr+LhyT9TYfvbJGkqyU9Imld+njx7L4iaUDem273/wG/Afxt+vxv0/UOSvfnY5LukvS2zPY3O+a77cOIWE/SoB3aZZ0vAk8AL+62rW6U/Dr+MvC+iJjNxwJJZ6bHzqOSLpvdt5njf4WkGeAGpd3Vklal390PJS3LfMZCSRcpKWs/kvRBDdBgRMQ3gDuAQyQdCPwX4ISIuCEifhERP0t/GZ+TedtvAHuTBAvHS9q6w/ewt5IezOwx/Iq0fG+lli75fsqn2tRtmWWdymrHniZJf51+3wuz6ZJ0U7rKt9Pj8re7fqF039fp8s9J+nFa1m6S9NLMsnb1eNeyXXoR4b95/gH3AW9s83oAB6SPLwY2kDTUC4BtgLXAb6TLFwGHpY+PBNb08fkC/hU4vcPy/dK0XApsD7wMeGQ2zcDZwDPAcWnatk1f+1TL+/8+XfZy4BfAr6TL/xj4DvDLaVpeDuza4Tt4Angt8AKSXzX/kknn24FdgS2B9wA/BrbJpPFTHfJ3ePrdHpWmfx/goHTZV4H/k37fh6b5fkNmm08B/yH9zE8APwTOArYCTgV+mPmcG4EfAYek3+PnM9/RS4CfpmnYCngvcA+wdeYYuYWkct4FuHN2fwGHAQ8DrwK2IGl87wNekOO9R9JyrADfAE5KH+8AHNHhe9sVeAuwHbAj8DngC5nlFwMfbMn/72aebw88APxO+v0dRjJ88NJOx3ybNDy/zTQ9XwauzCx/fr+THFtvAtaT/FJum/8u5eRi4Eskv5BPaln2buBmYDHJsflR4NKW4/8TaZ63Bd5JUmZOTffZ7wMPAkrf84V0G9sDL0z33++ly95J5rjvUFa3TPP768DPgDcApwP358jnRcBlJMfho8Bkl3VvAE7NPP9r4IJ26aRL+Wyz3U51W7eymj0W3gn8S7rO3wNfBLbrkK7n65g8dXS3fZ0uP4WkPLwA+DBwe8sx1FqP30eH8lmFv8ITUIe/9CB4kqRyWk9akbJ5A/iJlvfNAL9HMuaaff1I+gsC/hz4Nmmj0Wb5bMVyUOa1c4GL0sdnAze1vOdsNg8CFmeW3wIcnz6+C1je4bNbv4PPZJbtADwH7NvhveuAl7emp816HwX+V5vX9023v2Pmtb8ELs5s87rMst9M9+MW6fMd0/TPNjg3Audk1j8YeJqkEXg/cFlm2QKSgOHIzDHy9pbvf7ay/TvgAy1pvwt4XY73bnasADelx8RufR7HhwLrMs8vpnsQ8NvA19rsiz/rdMy3+cwbSRq5Del3fTuwpOU4fJqkXP0s3Z/vbSkrG9lU9tYDb+vwWRcDj5MEeru1LLuTNDhMn+9F0shvyabj/5cyy98J3JN5vl26zp7AHiRB8raZ5ScAX8m8t1cQsJ7k+L8TeFe67Czg5h7f53ZpHo/L7I8ru6z/u8AN6WORBHWv7ZXO1vLZZlmnuq1tWW09vtLP/ibwWZJge+uW734+QUDHfd3mfTun21/Y6ZimS/mswp+HA4bnuIjYOf07rsM6D7Q8fwtwDHC/kq7xV/f7oZLOIJkb8KaI+EWP1bOffz9J5Nopbe38OPP4ZySNOCSN7b053j/ncyLiSZJfZXsDSHqPkolfGyStBxYCu+XYZqfP3xt4LCKeyLx2P8mvj1kPZR7/HPhJRDyXeQ6b8jkn/em2tkrTuHf6fDZvG9N1s5/V6ft7EfCedChgfZr3fZm7fzq9t50VJD0T35d0q6Rj260kaTtJH5V0v5JhoJuAnfvotn4R8KqWdJ9I0hDOynNcvSsiFgJLSX41Lm5ZfllarrYjGQZ4h6Tfyyx/MFP2do6Iy7p81vnArcB1kha15OWKTD7uJAk4snMPWvPy/D6JiJ+lD3dIt7UVsDazvY+S9AjktVtELIqIX4mI89LXHiVpsLp5M/AscE36/NPAMkm7d1j/cuDVSoYcX0vS4H2t3Yp9ls9OdVs/dcUBwHLgzyPi6ZzvmT3LYHZ47MQ2q3Tc10qGNs9JhwoeJ2ngYW4+2x3T/ZTPUnEQMF4x50nErRGxnKRy+AJJF95m63Ui6RTgTJKoNs8M8X0zj5eQdF+2TVufHiD/GO3zaZC0A0n32YPp+OKfAG8DFkXEziS/DjWPz38Q2EXSjpnXlpD8Qh9U63f4DEkX+IMklQvw/OSsfXN+1gMkE9SyDdl2EXFpjvdutt8i4u6IOIHkuPor4HIl8wdavYdkCOdVEbETSSMAnb/z1s96APhqS7p3iIjf75a+jhmJ+A7wQeD89Ptrt859JPMgek7+6+A5kkBlBviipJ3S1x8AlrXkZZuIyO6/vHl5gKQnYLfMtnaKiJf2emMP1wOLJU10WedkkgZoRtKPSYZ4tiLpidhMJPMwvkRS7v4TSbf4Zvnst3x2qdv6qSvuJBlqulbSL+d8D5GcZTA7SfTTbVbptq//E0ng8UaSIGe/9D3ZfM6nriwdBwEFkbS1kvNdF0bEMyRdeLO/QB8CdpW0sMv7TwT+Ajgq8p+C9/70199LSQrXZ+eRhayPAR+QdKASSyXt2mHdYyS9RslkpQ8A34yIB0i63p8lGbPfUtKfAjt12Eari4DfkfSGdNLPPpIOSrf7deAvlUykW0ryK7ldxZDX2yUdLGk74H8Al6c9B5cBb0rTsBVJA/uL9PN7+XvgdEmvSr+/7SW9qSV46WSzY0XS2yXtnvZGrE9ffq7Ne3ck6e1Yn06M+rMcn5W95sPVwEsknaRkItlWkl6pzITIAVxC0nD8VruFSiYuHk0yWW4gaXn7jyTB2zVpgHQB8CGlE1Ul7S5p+YDbX0vSsP5PSTulx+SLJb1u0DSn272bZH7LpUpOjdw6Pa6PVzLRbR+SuQPHkgztHEoyP+ev6H6WwD+S9Ca+JX3cTu7y2aNua1tWu+T5UuB9wJcldQoeWo/LXrrt6x1Jyu2jJEMrf9HHdivJQUCxTgLuS7udTieZeENEfJ9kEt8P0i6rzc4OIPnFtCtwa6br64Ien/dVkslq1wOrImJYFwL5G5JG8EskBf4ikslT7fwjSWPzGPCrJL/KIJn4cy3wbyTd6k+RryuZiLiFJKj5XyS/Tr7Kpl/lJ5BE8w8CV5CMV1+XO2eb+yTJuOCPSSYFvStNw10k++9/kzQuv0ly2mjPbsyImCaZYPa3JOOs95CMe/bU4Vg5GrhD0pMkky+Pj4in2rz9wyT76SckE6X+ucfHfQR4q5LZ8Oelwyz/Hjie5Pv9MUmD84I8ae+Qn6eB80jmWMz67dljnKQr//+RzHkYWPo5kyTH2T8BFwJXAV+S9ATJ9/GqeXzEO4Ctge+R7NPL6d2Vn8e7SI6T80kCvHtJhgD+iaQ+uT0ivhQRP579I/k+l0o6pMM2rwIOBB6KiG93WKff8tmpbutWVtuK5NoB/4PkrIz92qxyNnBJevy/rc3yVh+h877+BEn+fkSy727Osb1Km53JajWWFpwfAltFxLMFpuNikkls/72oNMyHpBtJJifO+0qKZmZl4J4AMzOzhnIQYGZm1lAeDjAzM2so9wSYmZk1lIMAMzOzhqrl3eJ222232G+//YpOhpmZ2VjcdtttP4mITleG7KiWQcB+++3H9PR00ckwMzMbC0n3915rcx4OMDMzaygHAWZmZg3lIMDMzKyhHASYmZk1lIMAMzOzhnIQYGZm1lAOAszMzBrKQUBO73//+3nZy17Glltuydlnnz1n2Y033siCBQvYYYcdnv+75JJLikmomZlZTrW8WNAoHHDAAZx77rlccMEFbZfvvfferFmzZsypMjMzG1zungBJh0n6V0lPSPqcpM9K+mC6bJGkqyU9Imld+nhx5r03SvqgpK9LelLSP0naVdKnJT0u6VZJ+2XWD0n/WdLd6ed9QNKLJX0jXf8ySVt3+uynn356eN9Q6uSTT2bZsmXsuOOOQ992KaxeDWefDaeckvxfvbroFJlZQ7j6KU6uICBtcK8ALgZ2AS4F3tyynX8AXgQsAX4O/G3LZo4HTgL2AV4MfCN9zy7AncCftax/NPCrwBHAe4ELgROBfYFDgBM6ffbMzEzHvBx77LHsvPPObf+OPfbYPF9HWw8//DB77LEH+++/P3/4h3/IT3/604G3NXS9Stjq1bBqFaxbB4sXJ/9XrXJJNLORy1P9OEgYnbw9AUeQDB2cFxHPRMQUcMvswoh4NCI+HxE/i4gngA8Br2vZxj9ExL0RsQG4Frg3Ir4cEc8CnwNe0bL+X0XE4xFxB/Bd4EsR8YPM+1/R6bOffPLJjhm5+uqrWb9+fdu/q6++OufXMddBBx3E7bffztq1a7nhhhu47bbb+KM/+qOBtjV0eUrY1BQsWpT8LViw6fHU1NztuBSaWZ96VR29qh//RhmtvEHA3sCPIiIyrz0w+0DSdpI+Kul+SY8DNwE7S9ois/5Dmcc/b/N8h5bPzLV+u89+7rnneO6553Jmbf723HNPDj74YBYsWMD+++/Pueeey+WXXz62z+8qTwM/MwMLF85938KFyevgUmhmA8lTdfSqfvJUYTa4vEHAWmAfScq8tm/m8XuAXwZeFRE7Aa9NX8+uPyptP3tuvLLJsmXL5sziz/4tW7ZsKAmS1PHzR6ZTuN2rhAEsWQIbNsxdZ8OG5HVwKTSzgeSpOnpVP3mqMHdUDi5vEPAN4DngDElbSloOHJ5ZviPJr/P1knZh8/H9Uerrs6+99lqefPLJtn/XXnttx/c988wzPPXUU2zcuJFnn32Wp5566vnehhtvvJGZmRkiggceeIAzzzyT5cuXDzGLPXQLt3uVMIDJyeQ969bBxo2bHk9OJsvzlMJsWlwazRqhV3HPU3X0qn56VWHuqJyfXEFARDwNTAIrgPXA24GrgV+kq3wY2Bb4CXAz8M9DT2lnY/nsU089lW233ZZLL72UD33oQ2y77bZ88pOfBOBb3/oWr371q9l+++35tV/7NQ455BDOO++8USSjvW7hdq8SBrB0KaxcmbxnzZrk/8qVyeuQL5AAl0azBslT3PNUHb2qn15VmDsq50eDdltL+iZwQUT8w3CTNH8TExMxPT1ddDLG55RTklK4IBPTbdyYlKiPfzwplVNTSfi9ZElSemZLWB6zpX3RoiSM37AhKYXZkgrJT4F165L1Zs0+b7nAkplVW57inrfq6KVbFdar+msKSbdFxES/78t9sSBJrwPuIvnFfSKwlPH+4rdOlizZvDRmw+2lS/srca1mQ/VsKVyxYvNtzswkpTGr07CBmVVanuKet+ropVsV1qv6s+76uWLgLwOXkczKvxd4a0SsHUmqbHPdQuHJySTchrnh9ooVw/v8PIGES6NZY+Qt7vP9DdJLr+pvvh2hdTfwcECZ1W44IE+fWhmO9Lx9f2VIq5l1lKeIDqurf5TpLVMaR23Q4QAHAVVQpbH2XrVHk0qlWQX1U0TLHs9Xqeqcr5HPCbACVWmsvVffX3YqL2z6PzVVrtrDrKH6KaKj7uqfrypVnUXxrYSrIO8pelXQzzUHzGzs6lRE61R1joqDgCrIc65/VbhUmpVanYponarOUXEQUAW9rqZRJS6VZqVWpyJap6pzVDwxsGzKPtNmGJqQR7MKa0oRrVM+fXZARmWDAM+c31ydSqlZwVycNqlbdTtoEODhgDLxRbDn8r0IzIbGxWkuV7cJBwFlUqdpucPgUmo2NC5Oc7m6TTgIKJM6TcsdBpdSs6FxcZrL1W3CQUCZ1Gla7jC4lJoNjYvTXK5uEw4CysTns8zlUmo2NC5Oc7m6TfjsACs3T2c2GxoXp/qq5L0DJB0NfATYAvhYRJzTsnw58AFgI/As8O6I+JexJ9SKU/aLk5tViIuTtSosCJC0BXA+cBSwBrhV0lUR8b3MatcDV0VESFoKXAYcNP7UjoBDcjOzUmpS9VxkT8DhwD0R8QMASZ8BlgPPBwER8WRm/e2BeoxdZK9SkT1ht4kDUsPSpFJr1sKH//A0rXoucmLgPsADmedr0tfmkPRmSd8H/i9wypjSNlo+YXe4fBUUazAf/sPVtOq5yCBAbV7b7Jd+RFwREQcBx5HMD2i/Mek0SdOSph955JEhJnMEfMLucDWt1Jpl+PAfrqZVz0UGAWuAfTPPFwMPdlo5Im4CXixptw7LL4yIiYiY2H333Yeb0mHzCbvD1bRSa5bhw3+4mlY9FxkE3AocKGl/SVsDxwNXZVeQdIAkpY8PA7YGHh17SofNJ+wOV9NKrVmGD//halr1XFgQEBHPAmcAXwTuBC6LiDsknS7p9HS1twDflXQ7yZkEvx11uLCBr1IxXE0rtWYZPvyHq2nVsy8WZPXg6dHWYD78rZIXCzIbGl8FxRrMh78NyvcOMDMzaygHAWZmZg3l4YBx8ICdmVml1bUa98TAUcteg3LhwuTcnXXr6j3dtOzqWpqtVnyYlkcVqvFBJwZ6OGDUfDmvcvE1Vq0CfJiWS52rcQcBo+bLeZVLnUuz1YYP03KpczXuIGDUfDmvcqlzabba8GFaLnWuxh0EjJov51UudS7NVhs+TMulztW4g4BRa9o1KMuuzqXZasOHabnUuRr32QHWPJ52bRXgw9T64csGm+Xla6xaBfgwtXHwcICZmVlDOQgwMzNrKAcBZmZmDeU5AcPm2TxmZrVXl6reZwcMUxUuMG39qUtJt8L5UKqPMlb1vndAGfhan/XiC7jbkPhQqpc6VfUOAobJ1/qslzqVdCuUD6V6qVNV7yBgmHytz3qpU0m3QvlQqpc6VfUOAobJ1/qslzqVdCuUD6V6qVNV7yBgmOp8gekmqlNJt0L5UKqXOlX1PjvArBtP6bYh8aFko+R7B5iNgi/gbkPiQ8nKyMMBZmZmDeUgwMzMrKEcBJiZmTWUgwAzM7OGchBgZmbWUD47YL583o+ZWeNVtSnwdQLmo4y3krJiVbUmsIF4dxuUoynwXQSL4LuCWJZvFdco3t02q8pNgYOA+fBdQSyryjWB9c2722ZVuSkoNAiQdLSkuyTdI+nMNstPlLQ6/fu6pJcXkc6OfFcQy6pyTWB98+62WVVuCgoLAiRtAZwPLAMOBk6QdHDLaj8EXhcRS4EPABeON5U9+K4gllXlmsD65t1ts6rcFBTZE3A4cE9E/CAingY+AyzPrhARX4+IdenTm4HFY05jd3W6lZTNX5VrAuubd7fNqnJTUNjZAZLeChwdEb+bPj8JeFVEnNFh/ZXAQbPrt1l+GnAawJIlS371/vvvH03CzbrxdPFG8e62sqjiXQTV5rW2EYmk1wMrgNd02lhEXEg6XDAxMVG/8x6tGnyruEbx7raqKzIIWAPsm3m+GHiwdSVJS4GPAcsi4tExpc3MzKz2ipwTcCtwoKT9JW0NHA9clV1B0hJgCjgpIv6tgDSamZnVVmE9ARHxrKQzgC8CWwAfj4g7JJ2eLr8A+FNgV+D/SAJ4dpAxDzMzM9ucLxtsZmZWcb5ssJmZmfXFdxEchM8LMjOzLqrSTLgnoF++a4iZmXVRpWbCPQH9yt41BDb9n5oqZ5hn5VWVnwoN491i81WlZsI9Af3yXUNsGKr0U6FBvFtsGKrUTDgI6JfvGmLD4PvQlpJ3iw1DlZoJBwH98l1DbBiq9FOhQbxbbBiq1Ew4COhXlW8XZeVRpZ8KDeLdYsNQpWbCEwMH4buG2HxNTiaDzZD81NywIfmpsGJFselqOO8WG5aqNBPuCTArQpV+KjSId4s1jXsCzIpSlZ8KDePdYk3ingAzM7OGchBgZmbWUA4CzMzMGspBgJmZWUM5CDAzM2soBwFmZmYN5VME8/KtxczMrE9lbzoUEUWnYegmJiZienp6eBucvbXYokVzLyPmq4jYuJS9Jik5f31WhHE2HZJui4iJft/n4YA8fGsxK5Lvbzsv/vqsKFVoOhwE5OFbi1mRqlCTlJi/PitKFZoOBwF5+NZiVqQq1CQl5q/PilKFpsNBQB5Vujm01U8VapIS89dnRalC0+EgIA/fWsyKVIWapMT89VlRqtB0+OwAsyrw9PZ58ddndTfo2QG+ToBZFfj+tvPir8+sPQ8HmJmZNZSDADMzs4ZyEGBmZtZQDgLMzMwaykGAmZlZQzkIMDMza6hCTxGUdDTwEWAL4GMRcU7L8oOAfwAOA86KiFXjT6VZhTTohPgGZdVsZArrCZC0BXA+sAw4GDhB0sEtqz0GvAtw42/WS4Nul9egrJqNVJE9AYcD90TEDwAkfQZYDnxvdoWIeBh4WNKbikliyj85rAqyt8uDTf+npmp3vDYoq1YTZW1GipwTsA/wQOb5mvS1cvFPDquKBt0ur0FZtRooczNSZBCgNq8NfCMDSadJmpY0/cgjj8wjWS18M3KrigbdLq9BWbUaKHMzUmQQsAbYN/N8MfDgoBuLiAsjYiIiJnbfffd5J+55/slhVdGg2+U1KKtWA2VuRooMAm4FDpS0v6StgeOBqwpMT3v+yWFVUYX7lg5Jg7JqNVDmZqSwiYER8aykM4Avkpwi+PGIuEPS6enyCyTtCUwDOwEbJb0bODgiHh9bQicnk8EbSEK3DRuSnxwrVowtCWa5Neh2eQ3KqlVcmZsRRQw8DF9aExMTMT09PbwNlnVap5mZVcKomxFJt0XERL/vK/RiQZXhnxxmZjYPZW1GfNlgMzOzhnIQYGZm1lAOAszMzBrKQYCZmVlDOQgwMzNrKAcBZmZmDeUgwMzMrKEcBJiZmTWUgwAzM7OG8hUDu/Hlgs3MbEjK2KS4J6CT1auTOz6sWweLFyf/V61KXjczM+tDWZsUBwGdTE0l9yddtAgWLNj0eGqq6JSZmVnFlLVJcRDQycxMcs/HrIULk9fNzMz6UNYmxUFAJ0uWJDd9ztqwIXndzMysD2VtUhwEdDI5mQzarFsHGzduejw5WXTKzMysYsrapDgI6GTpUli5Mhm0WbMm+b9yZfFTOc3MrHLK2qT4FMFuli4tfg+ZmVktlLFJcU+AmZlZQzkIMDMzaygHAWZmZg3lIMDMzKyhHASYmZk1lIMAMzOzhnIQYGZm1lAOAszMzBrKQYCZmVlD+YqB3axendzncWYmucvD5GT5LvdkZmaVUbZmxT0BnaxeDatWJXd4WLw4+b9qVfK6mZlZn8rYrPQMAiTtJOnFbV6v90/iqankDg+LFsGCBZseT00VnTIzM6ugMjYrXYMASW8Dvg98XtIdkl6ZWXzxKBNWuJkZWLhw7msLFyavm5mZ9amMzUqvnoD3Ab8aEYcCvwN8UtLs3Y810pQVbckS2LBh7msbNiSvm5mZ9amMzUqvIGCLiFgLEBG3AK8HzpL0LiBGnbhCTU4mAzbr1sHGjZseT072fq+ZmVmLMjYrvYKAJ7LzAdKA4EhgOfDS+X64pKMl3SXpHklntlkuSeely1dLOmy+n5nb0qWwcmUyYLNmTfJ/5UqfHWBmZgMpY7PS6xTB36el2z8inpB0NPC2+XywpC2A84GjgDXArZKuiojvZVZbBhyY/r0K+Lv0/3gsXepG38zMhqZszUqvnoCfAnu0ef0I4OZ5fvbhwD0R8YOIeBr4DEkPQ9Zy4BORuBnYWdJe8/xcMzMzo3cQ8GHgiTav/zxdNh/7AA9knq9JX+t3HTMzMxtAryBgv4jY7DIGETEN7DfPz253dkHrZMM86yQrSqdJmpY0/cgjj8wzaWZmZvXXKwjYpsuybef52WuAfTPPFwMPDrAOABFxYURMRMTE7rvvPs+kmZmZ1V+vIOBWSae2vihpBXDbPD/7VuBASftL2ho4HriqZZ2rgHekZwkcAWyYPWXRzMzM5qfX2QHvBq6QdCKbGv0JYGvgzfP54Ih4VtIZwBeBLYCPR8Qdkk5Pl18AXAMcA9wD/IzkgkVmZmY2BIrofc0fSa8HDkmf3hERN4w0Vc/AKw4AABQ6SURBVPM0MTER09PTRSfDzMxsLCTdFhET/b6va0+ApG2A04EDgO8AF0XEs4Ml0czMzMqk15yAS0i6/79DcuGeVSNPkZmZmY1FrzkBB0fEywAkXQTcMvokmZmZ2Tj0CgKemX2QTuQbcXJKZvXq5EbPMzPJbZ4mJ8t1vUczM6uMMjYpvYYDXi7p8fTvCWDp7GNJj48jgYVZvRpWrUpu8bR4cfJ/1arkdTMzsz6UtUnpGgRExBYRsVP6t2NEbJl5vNO4ElmIqankFk+LFsGCBZseT00VnTIzM6uYsjYpvXoCmmtmBhYunPvawoXJ62ZmZn0oa5PiIKCTJUtgw4a5r23YkLxuZmbWh7I2KQ4COpmcTAZt1q2DjRs3PZ6cLDplZmZWMWVtUhwEdLJ0KaxcmQzarFmT/F+5svipnGZmVjllbVJ6nSLYbEuXFr+HzMysFsrYpLgnwMzMrKEcBJiZmTWUgwAzM7OGchBgZmbWUA4CzMzMGspBgJmZWUM5CDAzM2soBwFmZmYN5SDAzMysoXzFwF5Wr07u9Tgzk9zpYXKyfJd8MjOz0itjc+KegG5Wr4ZVq5K7PCxenPxftSp53czMLKeyNicOArqZmkru8rBoESxYsOnx1FTRKTMzswopa3PiIKCbmRlYuHDuawsXJq+bmZnlVNbmxEFAN0uWwIYNc1/bsCF53czMLKeyNicOArqZnEwGbtatg40bNz2enCw6ZWZmViFlbU4cBHSzdCmsXJkM3KxZk/xfubL46ZxmZlYpZW1OfIpgL0uXFr+XzMys8srYnLgnwMzMrKEcBJiZmTWUgwAzM7OGchBgZmbWUA4CzMzMGqqQswMk7QJ8FtgPuA94W0Ssa7Pex4FjgYcj4pBxptGsEUp2R5OSJces9orqCTgTuD4iDgSuT5+3czFw9LgSZdYoJbujScmSY9YIRQUBy4FL0seXAMe1WykibgIeG1eizBqlZHc0KVlyzBqhqCBgj4hYC5D+f+F8NyjpNEnTkqYfeeSReSfQrPZKdkeTkiXHrBFGNidA0peBPdssOmsUnxcRFwIXAkxMTMTQP8CDlVY3S5Ykfe6LFm16rcA7mpQsOWZDU+bmY2Q9ARHxxog4pM3flcBDkvYCSP8/PKp0DIUHK62OSnZHk5Ilx2woyt58FDUccBVwcvr4ZODKgtKRjwcrrY5KdkeTkiXHbCjK3nwUdQOhc4DLJK0AZoD/CCBpb+BjEXFM+vxS4EhgN0lrgD+LiIvGntqZmSSEy/JgpdVBye5oUrLkmM1b2ZuPQoKAiHgUeEOb1x8Ejsk8P2Gc6erIg5VmZjaAsjcfvmJgHh6sNDOzAZS9+XAQkIcHK83MbABlbz6KmhNQPR6sNDOzAZS5+XBPgJmZWUM5CDAzM2soDweY1UGZL0k2Yg3Outm8uSfArOrKfkmyEWpw1s2GwkGAWdWV/ZJkI9TgrJsNhYMAs6pr8O33Gpx1s6FwEGBWdUuWJJcgyyrTJclGqMFZNxsKBwFmVVf2S5KNUIOzbjYUioii0zB0ExMTMT09PZqNeyqylVGDj8sGZ91KbpzHpqTbImKi7/c5COjD7FTkRYuSgccNG5KfHWW6BqSZmRVu3M3FoEGAhwP64anIZmaWQ1WaCwcB/fBUZDMzy6EqzYWDgH54KrKZmeVQlebCQUA/PBXZzMxyqEpz4SCgH2W/MbSZmZVCVZoL30CoX2W+MbSZmZVGFZoL9wSYmZk1lHsCzMrIV8AZGX+1Zpu4J8CsbHx/3JHxV2s2l4MAs7KpylVGKshfrdlcDgLMyqYqVxmpIH+1ZnM5CDArm6pcZaSC/NWazeUgwKxsqnKVkQryV2s2l+8iOB+eZmyj4mNrZPzV2igVdXz5VsIZYwkCfFthMzPLKLJZ8K2Ex83TjM3MLKOKzYKDgEF5mrGZmWVUsVlwEDAoTzM2M7OMKjYLDgIG5WnGZmaWUcVmoZAgQNIukq6TdHf6f1GbdfaV9BVJd0q6Q9IfFJHWjqpyn0gzMxuLKjYLhZwdIOlc4LGIOEfSmcCiiPiTlnX2AvaKiG9J2hG4DTguIr7Xa/tjO0XQzMysBAY9O6CouwguB45MH18C3AjMCQIiYi2wNn38hKQ7gX2AnkGAWSn5BPVK8m6zOitqTsAeaSM/29i/sNvKkvYDXgF8c+QpMxsF376ukrzbrO5G1hMg6cvAnm0WndXndnYAPg+8OyIe77LeacBpAEvKPBXTmil7AjFs+j815Z+VJebdZnU3siAgIt7YaZmkhyTtFRFr07H/hzustxVJAPDpiOh6uYWIuBC4EJI5AYOn3GwEZmaSn5JZZT+B2LzbrPaKGg64Cjg5fXwycGXrCpIEXATcGRF/M8a0mQ1fFU8gNu82q72igoBzgKMk3Q0clT5H0t6SrknX+XXgJODfSbo9/TummOSazVMVTyA27zarPd9AaJg8jdi68fFRSd5t1k1Zjg/fRTCjkCDAdxU0M2uUMlX7votg0ap4+ygzMxtYHap9BwHDUsXbR5mZ2cDqUO07CBgWTyM2M2uUOlT7DgKGxdOIzcwapQ7VvoOAYani7aPMzGxgdaj2i7qBUD0tXVqtvW/zU5Zzg6w0fEg0T9WrffcEmA3Cd5axFj4krIocBJgNog7nBtlQ+ZCwKnIQYDaIOpwbZEPlQ8KqyEGA2SDqcG6QDZUPCasiBwFmg6jDuUE2VD4krIp874BR8lThevP+tRY+JOqvrPvYNxDKKEUQUKY7S5iZ2byVuVr3DYTKxlOFzcxqpY7VuoOAUfFUYTOzWqljte4gYFQ8VdjMrFbqWK07CBgVTxU2M6uVOlbrDgJGpQ53ljAzs+fVsVr3DYRGqep3lmiisp7/Y7Xkw6166latuyfAbJbvAGNj5MPNysBBgNmsOp7/Y6Xlw83KwEGA2aw6nv9jpeXDzcrAQYDZrDqe/2Ol5cPNysATA8fNM4HKa3IyGZSFudcEXbGi2HRZLflwK78mVNfuCRgnzwQqtzqe/2Ol5cOt3JpSXbsnYJyyM4Fg0/+pKZf8sqjb+T9Waj7cyqsp1bV7AsbJM4HMzCqhKdW1g4Bx8kwgM7NKaEp17eGAcfJMoGI0YXaP1Z4P4/FqSnXtnoBx8kyg8WvK7B6rNR/G49eU6to9AePmmUDj1ZTZPVZrPoyL0YTq2j0BVm9Nmd1jtebD2EalkCBA0i6SrpN0d/p/UZt1tpF0i6RvS7pD0p8XkVaruKbM7rFa82Fso1JUT8CZwPURcSBwffq81S+AfxcRLwcOBY6WdMQY0zheq1fD2WfDKack/z3YNxyTk8kA6rp1sHHjpseTk0WnzCw3H8aj1eTqt6ggYDlwSfr4EuC41hUi8WT6dKv0L8aTvDHzrJ/RacrsHqs1H8aj0/Tqt6iJgXtExFqAiFgr6YXtVpK0BXAbcABwfkR8c4xpHB/P+hmtJszusdrzYTwaTa9+RxYESPoysGebRWfl3UZEPAccKmln4ApJh0TEdzt83mnAaQBLqjZQNjOThKBZnvVjZjZyTa9+RxYERMQbOy2T9JCkvdJegL2Ah3tsa72kG4GjgbZBQERcCFwIMDExUa1hgyVLkj6oRZn5kZ71052vnGLWkYtHfk2vfouaE3AVcHL6+GTgytYVJO2e9gAgaVvgjcD3x5bCcfKsn/40fRDPrAsXj/40vfotKgg4BzhK0t3AUelzJO0t6Zp0nb2Ar0haDdwKXBcRVxeS2lHzrJ/+ZAfxFizY9HhqquiUmRXOxaM/Ta9+C5kYGBGPAm9o8/qDwDHp49XAK8actOJ41k9+TR/EM+vCxaN/Ta5+fdngsvPg3uaaPohn1oWLR2euTjfnywaXmQf32mv6IJ5ZFy4e7bk6bc9BQJl5cK+9pg/imXXh4tGeq9P2PBxQZh7c66zJg3hmPbh4bM7VaXsOAsqsiYN7HrQzG5smFbcmVqd5eDigzJo2uOdBO7OxaVpxa1p1mpd7AspsdnAvG6qvWLEpVK9bGN/0i3ibjVFdi1unarFXddpUDgLKrtPg3mwYv2jR3DC+yjOAPGhnNjZ1LG69qkXPldichwOqqo5TXZcsSQbpsjxoZzYSdSxudawWR809AVVVtTA+z9DF5GQStkOSlw0bklB+xYrxp9es5vopblUZeaxatVgG7gmoqiqF8XlnIPkEZ7OxyVvcqjSBsErVYlm4J6CqeoXxZQrd+5mB5EE7s7HJU9zKNoGwW9XmzsT+uSegqrqF8eMM3VevhrPPhlNOSf63+4yZmaREZrmPzqwS8hbfPFXBfPWq2tyZ2D/3BFRZpzA+T+g+jJ6CvGco+CodZpWVp/gO82SlblVTnqrNnYn9cU9AHfUK3fP2FPQK7fNOxfVVOswqK0/x7WdWfrdqpVfV5E7F4XMQUEe9ZsfkKbF5AoW8JdJ9dGaVlaf49jNk0K1a6VU1eeLf8Hk4oI56zY7Jcx5Nnn63frr53UdnVlm9im/eqqBXtdKravLEv+FzT0Ad9Qrd84TTeUJ7d/ObGfmrgl7VSq+qyZ2Kw+eegLrqFrrnCafzhPa+GLeZkb8q6FWt5Kma3Kk4XIqIotMwdBMTEzE9PV10Msqt19kB2em+2dLosNvMBpSnWinTJU6qRNJtETHR9/scBFhHLo1mNmSuVkZj0CDAwwHWmfvdzGzIXK2UiycGmpmZNZSDADMzs4ZyEGBmZtZQDgLMzMwaykGAmZlZQzkIMDMzaygHAWZmZg3lIMDMzKyhHASYmZk1lIMAMzOzhqrlvQMkPQHcVXQ6Rmg34CdFJ2KE6py/OucN6p2/OucNnL8q2w3YPiJ27/eNdb13wF2D3EihKiRNO3/VVOe8Qb3zV+e8gfNXZWne9hvkvR4OMDMzaygHAWZmZg1V1yDgwqITMGLOX3XVOW9Q7/zVOW/g/FXZwHmr5cRAMzMz662uPQFmZmbWQy2CAEm7SLpO0t3p/0Vd1t1C0r9KunqcaZyPPPmTtI2kWyR9W9Idkv68iLT2K2fe9pX0FUl3pnn7gyLSOoi8x6akj0t6WNJ3x53Gfkk6WtJdku6RdGab5ZJ0Xrp8taTDikjnoHLk7yBJ35D0C0kri0jjfOTI34npflst6euSXl5EOgeRI2/L03zdLmla0muKSOegeuUvs94rJT0n6a09NxoRlf8DzgXOTB+fCfxVl3X/CPhH4Oqi0z3M/AECdkgfbwV8Ezii6LQPKW97AYelj3cE/g04uOi0Dyt/6bLXAocB3y06zT3yswVwL/BLwNbAt1v3BXAMcG16TB4BfLPodA85fy8EXgl8CFhZdJpHkL9fAxalj5dVZf/lzNsObBoGXwp8v+h0DzN/mfVuAK4B3tpru7XoCQCWA5ekjy8Bjmu3kqTFwJuAj40pXcPSM3+ReDJ9ulX6V4UJH3nytjYivpU+fgK4E9hnbCmcn1zHZkTcBDw2rkTNw+HAPRHxg4h4GvgMSR6zlgOfSI/Jm4GdJe017oQOqGf+IuLhiLgVeKaIBM5Tnvx9PSLWpU9vBhaPOY2DypO3JyNtKYHtqUYdOStP2QP4r8DngYfzbLQuQcAeEbEWkgaDJFJv58PAe4GN40rYkOTKXzrUcTvJzr8uIr45xjQOKu++A0DSfsArSHo6qqCv/FXAPsADmedr2Dwgy7NOWVU57Xn0m78VJL06VZArb5LeLOn7wP8FThlT2oahZ/4k7QO8Gbgg70Yrc8VASV8G9myz6Kyc7z8WeDgibpN05DDTNgzzzR9ARDwHHCppZ+AKSYdEROFjzMPIW7qdHUgi3HdHxOPDSNswDCt/FaE2r7X+msqzTllVOe155M6fpNeTBAFVGTfPlbeIuIKkfnwt8AHgjaNO2JDkyd+HgT+JiOekdqtvrjJBQER03FGSHpK0V0SsTbsd23WD/DrwW5KOAbYBdpL0qYh4+4iS3Jch5C+7rfWSbgSOBgoPAoaRN0lbkQQAn46IqREldSDD3HcVsAbYN/N8MfDgAOuUVZXTnkeu/ElaSjJsuiwiHh1T2uarr30XETdJerGk3SKiCvcUyJO/CeAzaQCwG3CMpGcj4gudNlqX4YCrgJPTxycDV7auEBH/LSIWR3J95eOBG8oSAOTQM3+Sdk97AJC0LUl0+/2xpXBwefIm4CLgzoj4mzGmbRh65q9ibgUOlLS/pK1JytJVLetcBbwjPUvgCGDD7JBIBeTJX5X1zJ+kJcAUcFJE/FsBaRxUnrwdkNYnpGetbA1UJcjpmb+I2D8i9kvbucuB/9wtAJh9U+X/gF2B64G70/+7pK/vDVzTZv0jqdbZAT3zRzLT9V+B1SS//v+06HQPMW+vIen2Wg3cnv4dU3Tah5W/9PmlwFqSyWZrgBVFp71Lno4hOUPjXuCs9LXTgdPTxwLOT5d/B5goOs1Dzt+e6T56HFifPt6p6HQPMX8fA9Zlytp00WkeYt7+BLgjzdc3gNcUneZh5q9l3YvJcXaArxhoZmbWUHUZDjAzM7M+OQgwMzNrKAcBZmZmDeUgwMzMrKEcBJiZmTWUgwAzyyW9K9ntkr4r6XOStktf31PSZyTdK+l7kq6R9JJ02T9LWq8K3bXTrEkcBJhZXj+PiEMj4hDgaeD09MIrVwA3RsSLI+Jg4H3AHul7/ho4qZjkmlkvDgLMbBBfAw4AXg88ExHP37AkIm6PiK+lj68HnigmiWbWi4MAM+uLpC1J7jP/HeAQ4LZiU2Rmg3IQYGZ5bZveqnoamCG5n4OZVVhl7iJoZoX7eUQcmn1B0h3AWwtKj5nNk3sCzGw+bgBeIOnU2RckvVLS6wpMk5nl5CDAzAYWyR3I3gwclZ4ieAdwNul9ziV9Dfgc8AZJayT9h8ISa2ab8V0EzczMGso9AWZmZg3lIMDMzKyhHASYmZk1lIMAMzOzhnIQYGZm1lAOAszMzBrKQYCZmVlDOQgwMzNrqP8PPXKD8ML1B0UAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.decomposition import KernelPCA\n",
"\n",
"scikit_kpca = KernelPCA(n_components=2, kernel='rbf', gamma=15)\n",
"X_skernpca = scikit_kpca.fit_transform(X)\n",
"\n",
"plt.figure(figsize=(8,6))\n",
"plt.scatter(X_skernpca[y==0, 0], X_skernpca[y==0, 1], color='red', alpha=0.5)\n",
"plt.scatter(X_skernpca[y==1, 0], X_skernpca[y==1, 1], color='blue', alpha=0.5)\n",
"\n",
"plt.text(-0.48, 0.35, 'gamma = 15', fontsize=12)\n",
"plt.title('First 2 principal components after RBF Kernel PCA via scikit-learn')\n",
"plt.xlabel('PC1')\n",
"plt.ylabel('PC2')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5. Kernel PCA with Radial Basis Function (RBF) Kernel and One Principal Components##"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"scikit_kpca = KernelPCA(n_components=1, kernel='rbf', gamma=15)\n",
"X_skernpca = scikit_kpca.fit_transform(X)\n",
"\n",
"plt.figure(figsize=(8,6))\n",
"plt.scatter(X_skernpca[y==0, 0], np.zeros((50,1)), color='red', alpha=0.5)\n",
"plt.scatter(X_skernpca[y==1, 0], np.zeros((50,1)), color='blue', alpha=0.5)\n",
"plt.text(-0.48, 0.007, 'gamma = 15', fontsize=12)\n",
"plt.title('First principal component after RBF Kernel PCA')\n",
"plt.xlabel('PC1')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}