{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "PCA" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%load_ext autoreload\n", "%autoreload 2\n", "%pylab inline\n", "%aimport numpy\n", "np=numpy\n", "import time\n", "import matplotlib.cm as cm" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "raw", "metadata": {}, "source": [ "Compl\u00e9tez tout d'abord les fonctions 'backward' et 'forward' de la classe PCA." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class PCA(object):\n", " \n", " def __init__(self, data):\n", " \n", " # Centrer les donn\u00e9es\n", " self.offset = np.mean(data, axis=0)\n", " self.c_data = data - self.offset\n", " \n", " # Calculer la matrice de covariance\n", " self.cov = (1./len(self.c_data)) * np.dot(self.c_data.T, self.c_data)\n", " \n", " # Calculer les valeurs et vecteurs propres \n", " eigval, eigvec = np.linalg.eigh(self.cov) # Chaque colonne de eigvec est un vecteur propre\n", " \n", " # Ordonner les vecteurs propres\n", " order = np.argsort(-eigval)\n", " self.eigval = eigval[order]\n", " self.eigvec = eigvec[:,order]\n", "\n", " def backward(self, data=None, M=None, is_centered=True):\n", " # \u00c0 partir de donn\u00e9es X, calculez Z\n", " # M : Nombre de vecteurs propres utilis\u00e9s\n", " # is_centered : Est-ce que les donn\u00e9es sont d\u00e9j\u00e0 centr\u00e9es ou non\n", " if data == None:\n", " data = self.c_data\n", " if M == None:\n", " M = len(self.c_data)\n", " # TODO WRITEME\n", " \n", " def forward(self, data=None, M=None, is_centered=True):\n", " # Reconstruisez les donn\u00e9es X\n", " if data == None:\n", " data = self.c_data\n", " if M == None:\n", " M = len(self.c_data)\n", " # TODO WRITEME\n" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "raw", "metadata": {}, "source": [ "Visualiser maintenant 'Iris', disponible sur le site web du cours." ] }, { "cell_type": "code", "collapsed": false, "input": [ "iris = np.loadtxt('iris.txt')\n", "data = iris[:,:4]\n", "labels = iris[:,4]" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "# Visualisation\n", "# TODO WRITEME\n", "\n", "pylab.scatter(?, ?, c = labels, marker = '.', s=50)" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "raw", "metadata": {}, "source": [ "On va maintenant regarder des sous-ensembles de 2 (ou plus) classes de mini_mnist (entra\u00eenement)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "train_x = np.loadtxt(\"train_images.txt\", delimiter=\",\")\n", "train_y = np.loadtxt(\"train_labels.txt\", delimiter=\",\").argmax(1)" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "which_classes = [0, 1] # On utilise seulement les classes 0 et 1, pas mini-mnist au complet\n", "ehich_indices = np.nonzero(np.in1d(train_y, which_classes))\n", "mnist_data = train_x[which_indices]\n", "mnist_labels = train_y[which_indices]" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "# Visualisation\n", "# TODO WRITEME\n", "# Vous pouver aussi utiliser d'autres classes que 0 et 1." ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "raw", "metadata": {}, "source": [ "Maintenant, on va utiliser toutes les classes de mini-mnist. Affichez une image." ] }, { "cell_type": "code", "collapsed": false, "input": [ "pylab.imshow(train_x[0].reshape(28,28), cmap=cm.gray)" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "raw", "metadata": {}, "source": [ "En variant le nombre de vecteurs propres utilis\u00e9s, reconstruisez la m\u00eame image,\n", "sans oublier de d\u00e9centrer les donn\u00e9es.\n", "Combien en faut-il environ pour reconna\u00eetre le chiffre?\n", "Essayez pour plusieurs images." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# TODO WRITEME" ], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }