2. Crear vocabulario

En un principio partiremos de las características de HoG para crear nuestro vocabulario, aunque se podría hacer con cualquier otras.

Importamos las características:


In [1]:
import pickle

path = '../../rsc/obj/'

X_train_path = path + 'X_train.sav'

train_features = pickle.load(open(X_train_path, 'rb'))

# import pickle # Módulo para serializar
# import numpy as np

# path = '..//..//rsc//obj//BoW_features//'

# for i in (15000,30000,45000,53688):
#     daisy_features_path = path + 'BoW_features'+ str(i) +'.sav'
#     if i == 15000:
#         train_features = pickle.load(open(daisy_features_path, 'rb'))
#     set_to_add = pickle.load(open(daisy_features_path, 'rb'))
#     train_features = np.vstack((train_features,set_to_add))

B. Construcción del vocabulario mediante un algoritmo de clustering

La razón por la que utilizamos un algoritmo de clustering es para la agrupación de dichas palabras en un determinado número de grupos. De manera que estos grupos de palabras resulten en patrones visuales que aporten mayor información al clasificador y, por lo tanto, nos permitan llevar a cabo una clasificación más eficiente.

Vamos a proceder a entrenar dos variantes de algoritmos de clustering :

  • KMeans
  • MiniBatchKMeans

In [ ]:
%%time
from sklearn.cluster import MiniBatchKMeans as MiniKMeans
import warnings
warnings.filterwarnings("ignore")

# Se inicializa el algoritmo de Kmeans indicando el número de clusters
mini_kmeans = MiniKMeans(500)
#se construye el clusterr con todas las características del conjunto de entramiento
mini_kmeans.fit(train_features)

Serializamos Kmeans


In [ ]:
import pickle # Módulo para serializar

path = '../../rsc/obj/'

mini_kmeans_path = path + 'mini_kmeans.sav'

pickle.dump(mini_kmeans, open(mini_kmeans_path, 'wb'))