{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "ename": "ModuleNotFoundError", "evalue": "No module named 'keras'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mkeras\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mskimage\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtransform\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'keras'" ] } ], "source": [ "import keras\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from skimage import transform" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Данные:\n", "Будем работать с датасетом [FashionMNIST](https://github.com/zalandoresearch/fashion-mnist). " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "ename": "ModuleNotFoundError", "evalue": "No module named 'keras'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mkeras\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatasets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mfashion_mnist\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_test\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfashion_mnist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'keras'" ] } ], "source": [ "from keras.datasets import fashion_mnist\n", "\n", "(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": false }, "outputs": [ { "ename": "NameError", "evalue": "name 'plt' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m28\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m28\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'plt' is not defined" ] } ], "source": [ "plt.imshow(X_train[0].reshape([28,28]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задание:\n", "Будем решать задачу классификации на 10 классов. Каждый класс соответствует одному из типов одежды. Исходная размерность признакового пространства: `784`, каждый пиксель является признаком. Будем снижать размерность признакового пространства с помощью метода главных компонент (`PCA`). Ваша задача оценить качество решенения задачи классификации по метрике `accuracy` в зависимости от числа главных компонент. Также оцените дисперсию функции качества в зависимости от числа главных компонент.\n", "\n", "Нарисуйте график зависимости функции качества и ее дисперсии от числа главных компонент." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from sklearn.decomposition import PCA\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import accuracy_score\n", "from sklearn.metrics import mean_squared_error" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'np' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mpca\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mPCA\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_components\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mused_indices\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchoice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m10000\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreplace\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mX_train_lowdim\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpca\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mused_indices\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m784\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mlr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mLogisticRegression\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mlr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train_lowdim\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mused_indices\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'np' is not defined" ] } ], "source": [ "pca = PCA(n_components=3)\n", "used_idx = np.random.choice(np.arange(X_train.shape[0]), 10000, replace=False)\n", "X_train_lowdim = pca.fit_transform(X_train[used_idx].reshape([-1, 784]))\n", "lr = LogisticRegression()\n", "lr.fit(X_train_lowdim, y_train[used_idx])\n", "accuracy_score(y_test, lr.predict(pca.transform(X_test.reshape([-1, 784]))))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Используйте следующую сетку числа главных компонент: `[3, 5, 7, 12, 18, 25, 33, 40, 48, 55]`. Для ускорения сходимости можете семплировать подвыборки из `X_train`. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "dim = 784\n", "\n", "def step(comp):\n", " pca = PCA(n_components=comp)\n", " used_idx = np.random.choice(np.arange(X_train.shape[0]), 10000, replace=False)\n", " X_train_lowdim = pca.fit_transform(X_train[used_idx].reshape([-1, dim]))\n", " lr = LogisticRegression()\n", " lr.fit(X_train_lowdim, y_train[used_idx])\n", " return lr.predict(pca.transform(X_test.reshape([-1, dim])))\n", " \n", " \n", "def get_accuracy(comp):\n", " acc = []\n", " for i in range(10):\n", " acc.append(accuracy_score(y_test, step(comp)))\n", " return np.mean(acc), np.var(acc)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": false }, "outputs": [ { "ename": "NameError", "evalue": "name 'y_test' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mcomp\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mmain_comps\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mmean\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_accuracy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcomp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0maccuracy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mvariances\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mget_accuracy\u001b[0;34m(comp)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0maccuracy\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0maccuracy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maccuracy_score\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcomp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maccuracy\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maccuracy\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'y_test' is not defined" ] } ], "source": [ "main_comps = [3, 5, 7, 12, 18, 25, 33, 40, 48, 55]\n", "acc = []\n", "var = []\n", "\n", "for comp in main_comps:\n", " mean, var = get_accuracy(comp)\n", " acc.append(mean)\n", " var.append(var)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from matplotlib import pylab as plt\n", "plt.rcParams['font.family'] = 'serif'\n", "plt.rcParams['font.serif'] = 'FreeSerif'\n", "plt.rcParams['lines.linewidth'] = 2\n", "plt.rcParams['lines.markersize'] = 12\n", "plt.rcParams['xtick.labelsize'] = 24\n", "plt.rcParams['ytick.labelsize'] = 24\n", "plt.rcParams['legend.fontsize'] = 24\n", "plt.rcParams['axes.titlesize'] = 36\n", "plt.rcParams['axes.labelsize'] = 24" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "x and y must have same first dimension, but have shapes (10,) and (0,)", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m7\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmain_comps\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maccuracy\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgrid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxlabel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Number of PCA components\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36mplot\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 3356\u001b[0m mplDeprecation)\n\u001b[1;32m 3357\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3358\u001b[0;31m \u001b[0mret\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3359\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3360\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hold\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwashold\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/matplotlib/__init__.py\u001b[0m in \u001b[0;36minner\u001b[0;34m(ax, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1853\u001b[0m \u001b[0;34m\"the Matplotlib list!)\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mlabel_namer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1854\u001b[0m RuntimeWarning, stacklevel=2)\n\u001b[0;32m-> 1855\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1856\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1857\u001b[0m inner.__doc__ = _add_data_doc(inner.__doc__,\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_axes.py\u001b[0m in \u001b[0;36mplot\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1525\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcbook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnormalize_kwargs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_alias_map\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1526\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1527\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mline\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_lines\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1528\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_line\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mline\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1529\u001b[0m \u001b[0mlines\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mline\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36m_grab_next_args\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 404\u001b[0m \u001b[0mthis\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 405\u001b[0m \u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 406\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mseg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_plot_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mthis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 407\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mseg\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 408\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36m_plot_args\u001b[0;34m(self, tup, kwargs)\u001b[0m\n\u001b[1;32m 381\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mindex_of\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 382\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 383\u001b[0;31m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_xy_from_xy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 384\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 385\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcommand\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'plot'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36m_xy_from_xy\u001b[0;34m(self, x, y)\u001b[0m\n\u001b[1;32m 240\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 241\u001b[0m raise ValueError(\"x and y must have same first dimension, but \"\n\u001b[0;32m--> 242\u001b[0;31m \"have shapes {} and {}\".format(x.shape, y.shape))\n\u001b[0m\u001b[1;32m 243\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m2\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 244\u001b[0m raise ValueError(\"x and y can be no greater than 2-D, but have \"\n", "\u001b[0;31mValueError\u001b[0m: x and y must have same first dimension, but have shapes (10,) and (0,)" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/sergei/anaconda3/lib/python3.6/site-packages/matplotlib/font_manager.py:1328: UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans\n", " (prop.get_family(), self.defaultFamily[fontext]))\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.figure(figsize=(10,7))\n", "plt.plot(main_comps, acc)\n", "plt.grid()\n", "plt.xlabel(\"Number of PCA components\")\n", "plt.ylabel(\"Accuracy metric\")\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "plt.figure(figsize=(10,7))\n", "plt.plot(main_comps, var)\n", "plt.grid()\n", "plt.xlabel(\"Number of PCA components\")\n", "plt.ylabel(\"Variance of accuracy metric\")\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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }