<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Bag of Words
Bag of Words obtiene las características de una imagen, es decir, las formas, texturas, etc., como palabras [1]. Así, se describe la imagen en función de la frecuencia de cada una de estas palabras o características.
En este notebook entrenaremos un clasificador con la técnica Bag of Words. Lo cual se compone, brevemente explicado, de los siguientes pasos
Step1:  1. Cargamos el conjunto de entrenamiento
La manera en la que cargamos el conjunto de entrenamiento podemos observarlo en el Jupyter Notebook 1_Train_Set_Load.
2. Crear vocabulario
La manera en la que creamos el voacabulario podemos observarlo en el Jupyter Notebook 2A_Daisy_Features y 2B_Clustering.
Step2:  3. Obtención de Bag of Words
Step3:  Entrenamiento de un clasificador
<ASSISTANT_TASK:>
Python Code:
%matplotlib inline 
import numpy as np
import matplotlib.pyplot as plt
Explanation: Bag of Words
Bag of Words obtiene las características de una imagen, es decir, las formas, texturas, etc., como palabras [1]. Así, se describe la imagen en función de la frecuencia de cada una de estas palabras o características.
En este notebook entrenaremos un clasificador con la técnica Bag of Words. Lo cual se compone, brevemente explicado, de los siguientes pasos:
Crear el conjunto de entrenamiento.
Crear vocabulario.
Extracción de características.
Construcción del vocabulario mediante Clustering
Entrenar el clasificador.
End of explanation
path = '../rsc/obj/'
mini_kmeans_path = path + 'mini_kmeans.sav'
mini_kmeans = pickle.load(open(mini_kmeans_path, 'rb'))
Explanation: 1. Cargamos el conjunto de entrenamiento
La manera en la que cargamos el conjunto de entrenamiento podemos observarlo en el Jupyter Notebook 1_Train_Set_Load.
2. Crear vocabulario
La manera en la que creamos el voacabulario podemos observarlo en el Jupyter Notebook 2A_Daisy_Features y 2B_Clustering.
End of explanation
trainInstances = []
for imgFeatures in train_features:
    # extrae pertenencias a cluster
    pertenencias = mini_kmeans.predict(imgFeatures)
    # extrae histograma
    bovw_representation, _ = np.histogram(pertenencias, bins=500, range=(0,499))
    # añade al conjunto de entrenamiento final
    trainInstances.append(bovw_representation)
trainInstances = np.array(trainInstances)
Explanation: 3. Obtención de Bag of Words
End of explanation
from sklearn import svm
classifier = svm.SVC(kernel='linear', C=0.01)
y_pred = classifier.fit(trainInstances, y_train)
import pickle # Módulo para serializar
path = '../rsc/obj/'
svm_BoW_path = path + 'svm_BoW.sav'
pickle.dump(classifier, open(svm_BoW_path, 'wb'))
Explanation: Entrenamiento de un clasificador
End of explanation
<END_TASK>