aboutsummaryrefslogtreecommitdiff
path: root/kmean.py
blob: 4e9d03e70a5591a76910109db0f000ea7875c188 (plain)
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
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import sys
import random
import os
import json
import scipy.io
from random import randint
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neighbors import DistanceMetric
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
import argparse
import numpy as np
from numpy import genfromtxt
from numpy import linalg as LA
from timeit import default_timer as timer
from scipy.spatial.distance import cdist
from rerank import re_ranking

def create_kmean_clusters(feature_vectors, labels, gallery_idx, camId):
    for i in range(gallery_idx.size):
        cam = camId[gallery_idx[i]] - 1
        gallery[cam].append(feature_vectors[gallery_idx[i]])
        gallerylab[cam].append(labels[gallery_idx[i]])
            
    
    train = np.array(gallery)
    tlabel = np.array(gallerylab)

    for i in range(2):
        km_train_data[i] =  KMeans(n_clusters=int(np.max(labels)),random_state=0).fit(train[i])
        km_labels[i] = np.zeros(int(np.max(labels))) # clusters size
        km_idx[i] = km_train_data[i].labels_

        for j in range(np.max(labels)):
            class_vote = np.zeros(np.max(labels))
            for q in range(km_idx[i].size):
                if km_idx[i][q]==j:
                    class_vote[int(tlabel[i][q])-1] += 1
            km_labels[i][j] = np.argmax(class_vote) + 1
        
    #MERGE CLUSTERS
    cl = []
    cllab = []
    clustercam[0] = np.ones(km_labels_1.size)
    clustercam[1] = np.add(np.ones(km_labels_2.size), 1)
    for j in range(2):
        for j in range(km_labels_1.size):
            cl.append(km_train_data[i].cluster_centers_[j])
            cllab.append(km_labels[i][j])

    train_data = np.array(cl)
    train_label = np.array(cllab)
    train_cam = np.concatenate(clustercam, axis=1)
    return train_data, train_label, train_cam