哦,那可不是普通的兔子。

caerbannog的Python项目详细描述


卡尔班诺兔

Well, that’s no ordinary rabbit - that’s the most foul, cruel, and bad-tempered rodent you ever set eyes on!

—Tim the Enchanter

该模块是vowpal wabbit机器学习系统的高级接口。目前它依赖于 wabbit_wappa模块用于较低级别的交互,但努力提供更高级别的面向对象接口。

目前有三种兔子可以从Caerbanlog导入:

兔子
您的标准兔子实例。默认情况下,使用stdin/stdout的管道运行vowPal wabbit
活动兔子
使用TCP套接字在活动学习模式下运行VowPal Wabbit
离线兔子
初始值设定项需要参数fp,该参数是一个具有'wt'模式的打开文件。 输入到teach的输入将写入此文件以进行脱机处理。

电影评论感想-与Caerbannog一起进行主动学习演示

在此处导入相关模块。我们用活动兔子 在线学习

fromcaerbannogimportActiveRabbit,Examplefromitertoolsimportisliceimportrandomimportnltkfromnltk.corpusimportmovie_reviews

创造一只活跃的兔子,活跃的圆润度为0.01

rabbit=ActiveRabbit(loss_function='logistic',active_mellowness=0.01)rabbit.start()

从nltk电影评论语料库中加载文档(注意,您需要 首先通过nltk.download()下载这些文件。对于每个文档,创建一个元组 (文档字,类别)其中类别是“pos”或“neg”,并且 文档单词是来自标记器的单词列表。

documents=[(list(movie_reviews.words(fileid)),category)forcategoryinmovie_reviews.categories()forfileidinmovie_reviews.fileids(category)]random.shuffle(documents)len(documents)
2000

特征提取函数。首先过滤掉所有 非字母数字。然后让“w”名称空间包含所有单词 在复习中,“n”由2-4个单词组成。

defdocument_features(document_words):document_words=list(filter(str.isalnum,document_words))example=Example()example['w'].add_features(set(document_words))ngrams=set()forjinrange(2,5):ngrams.update('_'.join(i)foriinnltk.ngrams(document_words,j))example['n'].add_features(ngrams)returnexample

Wabbit希望logistic二进制的标签为-1和1 分类器

defconvert_sent(sent):return{'pos':1,'neg':-1}[sent]

转换情感值并提取特征。

examples=[(convert_sent(sent),document_features(doc))for(doc,sent)indocuments]

培训1500个第一个示例,并保留其余示例 验证

teach,test=examples[:1500],examples[1500:]

设定过滤器。我们要求对每个例子进行预测;如果 重要的是我们“标记”这个例子并教给 分类器。我们重复分类40次,以确保 分类器已经足够调整权重了。

taught=0predicted=0labelled=set()foriinrange(10):forsent,exinteach:predicted+=1ifrabbit.predict(example=ex).importance>=1:rabbit.teach(label=sent,example=ex)taught+=1labelled.add(ex)print("Predicted {}, taught {} (ratio {}). {} unique inputs labelled".format(predicted,taught,taught/predicted,len(labelled)))
Predicted 15000, taught 1057 (ratio 0.07046666666666666). 1042 unique inputs labelled

使用测试集进行测试。对于每个正确标记的示例,增加 计数器

correct=0forsent,exintest:prediction=rabbit.predict(example=ex)ifprediction.label==sent:correct+=1print("{} inputs predicted. {} correct; ratio {}".format(len(test),correct,correct/len(test)))
500 inputs predicted. 418 correct; ratio 0.836

许可证

麻省理工学院执照。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用“Wed,01 Jul 2015 17:32:41 EDT”解析字符串   java Storm apache升级(1.0.0到2.0.0)   java类驻留在不同的目录中,而不是包指定的目录。为什么?   将Java中的图像缩放到非常小的维度   java如何通过子文档从自定义方面访问ElasticSearch parentdoc字段   java如何在RationalSoftwareArchitect中使用findbugs?   Java中的事件提升处理   java值被添加到arrayList的所有索引中,而不是在“”时添加到最后一个索引中。正在使用arraylist的add()方法   JFrame中的java JPanel派生类   java如何用循环和异步方法模拟类   java Android阻止可绘制背景超出视图范围   为客户排序Java阵列   java Apache poi如何将工作表设置为枚举位置值属性?   java Rhino在使用自定义类参数调用javascript函数时出错   java格式化日期从年月日到年月日   spring如何修复java。lang.illegalargumentexception在此特定场景中是否尝试创建具有null实体的合并事件?   java如何创建更好的对象