aboutsummaryrefslogtreecommitdiff
path: root/Assignment 2/ex22.py
blob: 34877525921d611e2ca6703db9383216c103963e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# -*- coding: utf-8 -*-
"""
Created on Sun Oct 11 09:28:15 2015

@author: Camil Staps (s4498062)

Run with Python 2.7
"""

import itertools
import matplotlib.pyplot as plt
import matplotlib.pylab as plab
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import scipy.io

# 2.2.1
zipd = scipy.io.loadmat('./Data/zipdata.mat')
traindata = zipd['traindata']
testdata = zipd['testdata']

data = traindata[:,1:]
classes = traindata[:,0]
temp = [(d, c) for d, c in zip(data, classes) if c < 2]
[data, classes] = [np.array(t) for t in zip(*temp)]

mean = data.mean(0)

# First visualisation
for i in range(10):
    plt.subplot(2, 5, i)
    image = plab.reshape(data[i,:], (16, 16))
    plt.imshow(image, extent=(0, 16, 0, 16), cmap=plab.cm.gray_r)
    plt.axis('off')
plt.show()

# PCA
Y = data - np.ones((len(data), 1)) * mean
U, S, Vt = np.linalg.svd(Y, full_matrices=False)
V = Vt.T
Z = np.dot(Y, V[:,0:4])

W = np.dot(Z[:10], V[:,0:4].T) + mean
for i in range(10):
    plt.subplot(2, 5, i)
    image = plab.reshape(W[i,:], (16, 16))
    plt.imshow(image, extent=(0, 16, 0, 16), cmap=plab.cm.gray_r)
    plt.axis('off')
plt.show()

Y0 = [d for c, d in zip(classes, Y) if c == 0]
Y1 = [d for c, d in zip(classes, Y) if c == 1]
plt.figure(figsize=(16,16))
for i, j in itertools.product(*[range(4), range(4)]):
    plt.subplot(4, 4, 4 * i + j + 1)
    
    Z1 = np.dot(Y0, V[:,i:i + 1])
    Z2 = np.dot(Y0, V[:,j:j + 1])
    plt.scatter(Z1, Z2, color='r', marker='.', s=1, label='0')
    Z1 = np.dot(Y1, V[:,i:i + 1])
    Z2 = np.dot(Y1, V[:,j:j + 1])
    plt.scatter(Z1, Z2, color='b', marker='.', s=1, label='1')
    
    plt.ylabel('PC' + str(i))
    plt.xlabel('PC' + str(j))
    plt.gca().axes.get_xaxis().set_ticks([])
    plt.gca().axes.get_yaxis().set_ticks([])
plt.legend(bbox_to_anchor=(1.05, 1), loc=2)
plt.show()

fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(111, projection='3d')
Z1 = np.dot(Y0, V[:,0:1])
Z2 = np.dot(Y0, V[:,1:2])
Z3 = np.dot(Y0, V[:,2:3])
ax.scatter(Z1, Z2, Z3, color='r', marker='.', s=10, label='0')
Z1 = np.dot(Y1, V[:,0:1])
Z2 = np.dot(Y1, V[:,1:2])
Z3 = np.dot(Y1, V[:,2:3])
ax.scatter(Z1, Z2, Z3, color='b', marker='.', s=10, label='1')
ax.set_xlabel('PC1')
ax.set_ylabel('PC2')
ax.set_zlabel('PC3')
ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])
plt.legend(bbox_to_anchor=(1.05, 1), loc=2)
plt.show()