def train(self, maxiter=1000): self._initparams() for i in range(0, maxiter): print("Iter:%d..." % i) self._lastw = self._w[:] # 保存上一轮权值 self._model_ep() # 更新每个特征的权值 for i, w in enumerate(self._w): # 参考公式(19) self._w[i] += 1.0 / self._C * math.log( self._ep_[i] / self._ep[i]) print(self._w) # 检查是否收敛 if self._convergence(): break def predict(self, input): X = input.strip().split("\t") prob = self._pyx(X) return prob if __name__ == "__main__": maxent = MaxEnt() maxent.load_data('data/data.txt') maxent.train() print(maxent.predict("sunny\thot\thigh\tFALSE")) print(maxent.predict("overcast\thot\thigh\tFALSE")) print(maxent.predict("sunny\tcool\thigh\tTRUE")) sys.exit(0)