HTTP返回码中301与302的区别

阅读更多


支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本 、非线性高维模式识别 中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小 原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(或称泛化能力)。SVM理论的学习,请参考jasper的博客 。


    LIBSVM 是台湾大学林智仁(Chih-Jen Lin)博士等开发设计的一个操作简单、易于使用、快速有效的通用 SVM 软件包,可以解决分类问题(包括 C−SVC 、ν−SVC ), 回归问题(包括 ε − SVR 、v− SVR )  以及分布估计(one − class − SVM ) 等问题,提供了线性、多项式、径向基和 S 形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。LIBSVM 是一个开源的软件包,。他不仅提供了 LIBSVM 的 C++语言的算法源代码,还提供了 Python、Java、R、MATLAB、Perl、Ruby、LabVIEW以及 C#.net 等各种语言的接口,可以方便的在 Windows 或 UNIX 平台下使用,也便于科研工作者根据自己的需要进行改进(譬如设计使用符合自己特定问题需要的核函数等)。


    文本分类,大致分为如下几件事情:样本 ,分词 ,特征提取 ,向量计算 ,分类训练 ,测试和调试 。


 


1.样本选择


搜狗语料 http://www.sogou.com/labs/dl/c.html ,下精简版吧,如果实验用用,这足够了,你要下107M的也可以。当然,你也可以自己找语料,不过麻烦点而已,把各大门户网站的对应频道下的文章都爬下来。


 


2.分词


Bamboo分词,这是基于CRF++的分词模块,既然是研究统计学习,分词也得用基于统计的不是,如果还是用一字典来分词,那就太out啦。


http://code.google.com/p/nlpbamboo/wiki/GettingStarted 。安装完毕bamboo,还要下载训练好的模型(这个模型是基于人民日报1月语料)


http://code.google.com/p/nlpbamboo/downloads/list ,下载index.tar.bz2, 解压到/opt/bamboo/index下。


因为咱主要目的是研究分类,不是分词,就不要去搞分词的训练了,如果想训练可以看我的另外一篇博客:CRF++中文分词指南 。


可以试试:/opt/bamboo/bin/bamboo -p crf_seg filename,如果成功证明装好了。


    稍微注意以下,搜狗的词库是gb2312的,所以,请转为utf8,再分词,这是python写的函数:输入一个文件名,转为utf8,再分词,分词文件以.seg为后缀。





  1. def seg(fn):  

  2.     if not os.path.isfile(fn+'.utf8'):  

  3.     cmd = 'iconv -f gb2312 -t utf8 -c %s > %s.utf8' %(fn,fn)  

  4.     print cmd  

  5.     os.system(cmd)  

  6.     cmd = '/opt/bamboo/bin/bamboo -p crf_seg %s.utf8 > %s.seg' % (fn,fn)  

  7.     print cmd  

  8.     os.system(cmd)   



 


分词结果如下:


一 家 刚刚 成立 两 年 的 网络 支付 公司 , 它 的 目标 是 成为 市值 100亿 美元 的 上市 公司 。
这家 公司 叫做 快 钱 , 说 这 句 话 的 是 快钱 的 CEO 关 国光 。 他 之前 曾 任 网易 的 高级 副 总裁 , 负责 过 网易 的 上市 工作 。 对于 为什么 选择 第三 方 支付 作为 创业 方向 , 他 曾经 对 媒体 这样 说 : “ 我 能 看到 这个 胡同 对面 是 什么 , 别人 只能 看到 这个 胡同 。 ” 自信 与 狂妄 只 有 一 步 之 遥 ―― 这 几乎 是 所有 创业者 的 共同 特征 , 是 自信 还是 狂妄 也许 需要 留待 时间 来 考证 。


 


3.特征提取


    svm不是在高维模式识别具有优势吗,咋还要特征提取呢,把所有词都当成特征不就行了吗?对于词库来说,十几万的词是很常见的,把对类别区分度(GDP,CPI,股票对经济类的区分度就高,其他一些高频词,如我们,大家,一起等就没有区分度)高的词挑选出来,一来可以减少计算量,二来应该是可以提高分类效果。


     据说,开方检验(CHI)信息增益(IG)对于挑选特征好,我选择的是CHI。两者的概念,请google。


    首先统计词在文档中的次数


 





  1. #ingore some term  

  2. def ingore(s):  

  3.     return s == 'nbsp' or s == ' ' or s == ' ' or s == '/t' or s == '/n' /  

  4.            or s == ',' or s == '。' or s == '!' or s == '、' or s == '―'/  

  5.            or s == '?'  or s == '@' or s == ':' /  

  6.            or s == '#' or s == '%'  or s == '&' /  

  7.            or s == '(' or s == ')' or s == '《' or s == '》' /  

  8.            or s == '[' or s == ']' or s == '{' or s == '}' /  

  9.            or s == '*' or s == ',' or s == '.'  or s == '&' /  

  10.            or s == '!' or s == '?' or s == ':' or s == ';'/  

  11.            or s == '-' or s == '&'/  

  12.            or s == '<' or s == '>' or s == '(' or s == ')' /  

  13.            or s == '[' or s == ']' or s == '{' or s == '}'    

  14.      

  15. #term times  

  16. def getterm(fn):  

  17.     fnobj = open(fn,'r')  

  18.     data = fnobj.read()  

  19.     fnobj.close()  

  20.     arr = data.split(' ')  

  21.     docterm = dict()  

  22.     for a in arr:     

  23.     a = a.strip(' /n/t')  

  24.     if not ingore(a) and len( a.decode('utf-8')) >=2:  

  25.         times = docterm.get(a)  

  26.         if times:  

  27.         docterm[a] = times + 1  

  28.         else:  

  29.         docterm[a] = 1        

  30.     return docte  

  31. #cls_term:cls,term,artcount  

  32. #term_cls:term,cls,artcount  

  33. def stat(cls,fn,cls_term,term_cls):  

  34.     docterm = getterm(fn)  

  35.     termdi = cls_term.get(cls)  

  36.     if not termdi:  

  37.     termdi  = dict()  

  38.     cls_term[cls] = termdi  

  39.     #term,times  

  40.     for t in docterm.iterkeys():  

  41.     artcount = termdi.get(t)  

  42.     if not artcount:  

  43.         artcount = 0      

  44.     termdi[k] = artcount + 1  

  45.     clsdi = term_cls.get(t)  

  46.     if not clsdi:  

  47.         clsdi = {}  

  48.         term_cls[k] = clsdi  

  49.     artcount = clsdi.get(cls)  

  50.     if not artcount:  

你可能感兴趣的:(HTTP返回码中301与302的区别)