最大熵实现(GIS+IIS)

代码中使用了NLTK库 NLTK安装教程如下:

http://www.hankcs.com/nlp/window-7-64%E4%BD%8D-python-2-7-nltk-%E5%AE%89%E8%A3%85.html

训练数据:

 http://files.cnblogs.com/files/mansiisnam/data.zip

代码:

import sys;
from nltk.classify import MaxentClassifier
def load_data(filename):
    for line in open(filename, mode='r'):
        sample = line.strip().split("\t"); 
        y = sample[0];        
        reason1={'outlook':sample[1],'temperature':sample[2],'humidity':sample[3],'windy':sample[4]};
        if(y=='no'):
            train.append((reason1,'x'));
        elif(y=='yes'):
            train.append((reason1,'y')) ;                                               
def print_maxent_test_header():
    print(' '*11+''.join(['      test[%s]  ' % i
                           for i in range(len(test))]))
    print(' '*11+'     p(x)  p(y)'*len(test))
    print('-'*(11+15*len(test)))
def test_maxent(algorithm):
    print('%11s' % algorithm, end=' ')
    try:
        classifier = MaxentClassifier.train(
                         train, algorithm, trace=0, max_iter=1000) 
    except Exception as e:
        print('Error: %r' % e)
        return

    for featureset in test:
        pdist = classifier.prob_classify(featureset)
        print('%8.15f %6.15f' % (pdist.prob('x'),  pdist.prob('y')), end=' ')
    print()   
if __name__ == '__main__' :
    train=[];
    load_data('data.txt');
    test1={'outlook':'sunny','temperature':'hot','humidity':'high','windy':'FALSE'};
    test2={'outlook':'overcast','temperature':'hot','humidity':'high','windy':'FALSE'};
    test3={'outlook':'sunny','temperature':'cool','humidity':'high','windy':'TRUE'};
    test=[];
    test.append(test1);
    test.append(test2);
    test.append(test3);
    print_maxent_test_header(); 
    test_maxent('GIS');
    test_maxent('IIS');
    sys.exit(0);

其中trace参数为整型,值越高提供的输出信息越多。

结果:

 

转载于:https://www.cnblogs.com/mansiisnam/p/5301892.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值