Exemple #1
0
    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)