最大熵实现(MEGAM)

同样是使用NLTK来实现,NLTK的安装之前博文有说过在此不再赘述。

http://www.cnblogs.com/mansiisnam/p/5301892.html

之前在网上找了很多实现最大熵+LBFGS的资料,也看了大牛自己写代码实现出来的博客。但是本人的基础薄弱难以对大牛的代码进行修改以达到自己的预期,所以就想着使用工具包实现。windows 使用NLTK的MEGAM比较麻烦,博主之前找了很多资料没有实现有兴趣的可以看这个链接(http://www.cnblogs.com/createMoMo/archive/2013/05/15/3079290.html)

博主使用的linux 实现的方法特别简单

只要在你项目中根目录加上megam.opt这个文件,如图

 

这个文件在官网有下载但是官网给出的是32位的。如果你是64位的则需要通过OCaml 将其编译成64位。然后在代码上添加

nltk.config_megam('./megam.opt')这一句即可。整个程序即可运行。附上32 和64位megam.opt 和data文件下载链接:

megam:http://files.cnblogs.com/files/mansiisnam/MEGAM.zip

上述文件经测试在unbantu 和centos 7.0 64 上可用。

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

代码如下:python 2.7

import sys;
import scipy;
import nltk;
from nltk.classify import MaxentClassifier
nltk.config_megam('./megam.opt')
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 , " "
    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" % pdist.prob('x'), "%6.15f" %  pdist.prob('y') , 
    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');
    test_maxent('MEGAM');
    sys.exit(0);

 

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

最大熵法是一种用于解决分类和回归问题的统计学习方法。其核心思想是,给定一些已知的约束条件下,模型的预测结果应具有最大的不确定性,即最大熵。 在Matlab中实现最大熵法,可以按照以下步骤进行: 1. 收集数据集:首先,需要收集一些带有标签的训练数据,这些数据包含了待分类或回归的特征以及相应的分类或回归结果。 2. 特征提取:根据实际问题,从原始数据中提取与分类或回归相关的特征。特征提取方法可以根据数据集的特点和问题的要求来选择。 3. 构建约束:根据已知的约束条件,将问题转化为数学模型最大熵法中,约束条件通常以各种期望值的形式给出。 4. 设计优化算法:根据最大熵模型的特点,选择适合最大熵法的优化算法,例如梯度下降法或拟牛顿法等。 5. 训练最大熵模型:使用收集到的训练数据和设计的优化算法,通过最小化损失函数来训练最大熵模型。损失函数通常采用对数似然函数。 6. 模型评估:使用测试数据集对训练好的最大熵模型进行评估,通常使用准确率、精度、召回率等指标来度量模型的性能。 7. 预测与应用:使用训练好的最大熵模型对新的输入样本进行预测或回归。 在Matlab中,可以使用现有的统计学习工具箱(如Classification Learner)或其他开源的机器学习库(如libsvm、scikit-learn等)来实现最大熵法。根据具体的问题和数据集特点,选择合适的工具和算法,灵活应用最大熵法解决实际问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值