Hola, me ha parecido algo tedioso el proceso del fit siento que me pierdo entre tanto for, pero lo que hice fue comentar casi todas las lineas para saber por qué se hicieron. Si a alguien le sirve aquí dejo el código de fit
# como tal al entrenar andamos calculando las probabilidades para
# hacer las predicciones. Dichas quedan alojadas en los diccionarios
# creo que en el de log_classPriorProb y el de wordConditionalCounts
# que va en un formato CLASS:{WORD: NUMBER} asi es por la prob
# condicional de que tan probables son los dos juntos
def fit(self, data, clases):
n = len(data) # longitud de datos de entrenamiento
self.unique_clases = set(clases) # identificar cuantas clases unicas hay
# con la finalidad de una clasificación multiclase
self.vocab = set()
self.classCount = {} # C(c)
self.log_classPriorProb = {} # log(P(c))
self.wordConditionalCounts = {} # C(w|c)
# CONTEO DE CLASES
for c in clases:
if c in self.classCount.keys(): # buscamos la clase si ya existe
self.classCount[c] += 1 # si si le agregamos una
else:
self.classCount[c] = 1
# CALCULO DE PROBABILIDADES P(c)
for c in self.classCount.keys():
# la probabilidad de la clase es la cantidad de veces que sale
# entre la longitud del corpus
self.log_classPriorProb[c] = math.log(self.classCount[c]/n)
# ya que iteramos cada clase hay que aprovechar para hacer el
# el calculo de los conteos
self.wordConditionalCounts[c] = {}
# CALCULO DE LOS CONTEOS C(w|c)
for text, c in zip(data, clases): # ITERANDO TODO EL CORPUS
# contamos las palabras del texto iterado
counts = self.word_counts(self.tokenize(text))
# iteramos cada palabra del texto
for word, count in count.items(): # ITERANDO LOS CONTEOS (PALABRA, CLASE)
# si la palabra no esta en el vocab la agregamos
if word not in self.vocab:
self.vocab.add(word)
# si la palabra no esta en los conteos
if word not in seld.wordConditionalCounts[c]:
# primero creamos el elemento, CLASS:{WORD: NUMBER}
self.wordConditionalCounts[c][word] = 0.0
# en el for sumamos los conteos
self.wordConditionalCounts[c][word] += count
# CLASS:{WORD: NUMBER} asi es por la prob condicional de que
# tan probables son los dos juntos
Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.