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))

"""
Explanation: 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:
End of explanation
"""


%%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)



"""
Explanation: 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
End of explanation
"""


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'))

"""
Explanation: Serializamos Kmeans
End of explanation
"""


