基于概率论的分类方法:朴素贝叶斯
首先从一个最简单的概率分类器开始,然后给出一些假设来来学习朴素贝叶斯分类器。称为“朴素”是因为整个形式化过程只做最原始、最简单的假设。充分利用Python的文本处理能力将文档切分成词向量,然后利用词向量对文档进行分类。
理论基础
算法的优缺点:
- 优点:在数据缺少的情况下仍然有效,可以处理多类别问题。(在乎的是概率,不在乎个体的好坏)
- 缺点:对于输入数据的准备方式比较敏感。
- 使用的数据类型:标称型数据。
算法的前提:我们会选择高概率对应的类别,这就是贝叶斯决策理论的核心。
这里的概率解释属于贝叶斯概率理论的范畴,该理论非常流行且效果良好。贝叶斯概率引入了先验知识和逻辑推理来处理不确定命题。另一种概率解释称为频数概率,它只从数据本身获得结论,并不考虑逻辑推理和先验知识。
条件概率
对于这个概率的解释就是,如果袋子中有10球(6黑4红),第二次摸出黑色的概率。这个就是要知道第一次摸出的是什么球,然后在进行计算,这就是所谓的条件概率。这个概率可以记做:P(第二次摸出黑色|第一次摸出黑色)。这里我们可以计算出概率为5/9。
条件概率的计算公式为:P(第二次摸出黑色|第一次摸出黑色)=P(第二次摸出黑色&第一次摸出黑色)/P(第一次摸出黑色)
另一种有效计算条件概率的方法称为贝叶斯准则。贝叶斯准则告诉我们如何交换条件概率中的条件和结果,如果已知p(x|c),求p(c|x)的公式如下:
使用条件条件概率来分类
给定某个由x,y表示的数据点,那么该数据点来自类别的判断条件如下:
- 如果
,那么属于类别c1;
- 如果
,那么属于类别c2;
使用贝叶斯准则,可以通过已知的三个概率值来计算未知的概率值。
使用Python进行文本分类
具体的例子就不具体写了,这里就是从里面提出来的几个思路好好学习一番,解决问题的思路应该是极其活跃才行,否则都是扯淡。
一、可以将p(x,y|c)写成p(w|c),这就是将数据向量化。这里应该可以将向量的运算应用到计算上。对于这个问题,我们可以考虑到数据的向量化处理,数据的集合化处理,逻辑运算处理,几何处理等等。
二、在分类中计算p(w0|1)o(w1|1)......p(wn|1),如果其中有一个值为0的话,那么整个乘积的值为0,为降低这种影响,可以将所有词的出现次数初始化为1,并将分母初始化2.
三、上面的问题还存在下溢出的问题,就是整个乘积下来数值很小,就不好处理了!最好的解决方法就是对乘积取自然对数。在代数中有,于是通过求对数可以避免下溢出的问题,或者浮点数舍入导致的错误。这其实是数字放大的思想,乘积转成加法的处理方法。
四、我的想法是,还是组合因素的影响,是否可以找到不同组合因素的线性关系或者某种关系。
五、数据量足够大的情况,如何排除干扰因素的影响,这很容易导致概率为0.
六、选取得关键词,这些关键词怎么确定,朴素贝叶斯最大的缺点是不能发现该过滤的关键词。另外是否可以通过集合的交集运算的方式进行关键词的查找,这才是我们需要进一步深入考虑的问题。朴素贝叶斯可以解决未知问题,但前提是已知问题。
过滤垃圾邮件
一、找关键词:文本如何切分、短语的识别、近义词,谐音词、近义词、音译词、相似的词、可能的词、词的变种等等。
二、去掉一些常用的单次:比如长度小于3的,一般都不是关键词,常用的一些词也需要过滤,否则就很有可能误杀,不过这种词都有一个特征就是,不管文章的分类,这些词出现的概率应该是相当的。
总结
不管哪种算法使用,我们都要好好考虑自己的算法是否是合规的,这样便于后面的学习和优化算法,终极算法获取存在,但是我觉得专门化的算法也是必须的。这个就要对算法进行架构分析,某些部分一定是可变的。终极算法也许也是一种架构算法。不管怎么说,具体问题具体分析才是。