首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
26 篇文章
1
机器学习(二十五) ——adaboost算法与实现
2
机器学习(二十四) ——从图像处理谈机器学习项目流程
3
机器学习(二十三) —— 大数据机器学习(随机梯度下降与map reduce)
4
机器学习(二十二) ——推荐系统基础理论
5
机器学习(二十一) ——高斯密度估计实现异常检测
6
机器学习(二十) ——PCA实现样本特征降维
7
机器学习(十九) ——K-均值算法理论
8
机器学习(十八) ——SVM实战
9
机器学习(十七) ——SVM进一步认识
10
机器学习(十六) ——SVM理论基础
11
机器学习(十五) ——logistic回归实践
12
机器学习(十四) ——朴素贝叶斯实践
13
机器学习(十四) ——朴素贝叶斯实现分类器
14
机器学习(十三) ——交叉验证、查准率与召回率
15
机器学习(十二) ——神经网络代价函数、反向传播、梯度检验、随机初始化
16
机器学习(十一) ——神经网络基础
17
机器学习(十) ——使用决策树进行预测(离散特征值)
18
​ 机器学习(九) ——构建决策树(离散特征值)
19
机器学习(八) ——过拟合与正则化
20
机器学习(七) ——logistic回归
21
机器学习(六) ——线性回归的多变量、特征缩放、标准方程法
22
机器学习(五) ——k-近邻算法进一步探究
23
机器学习(四) ——梯度下降算法解释以及求解θ
24
机器学习(三) ——k-近邻算法基础
25
机器学习(二) ——线性回归、代价函数与梯度下降基础
26
机器学习(一)——机器学习概述

机器学习(十四) ——朴素贝叶斯实现分类器

机器学习(十四)——朴素贝叶斯实现分类器

(原创内容,转载请注明来源,谢谢)

一、概述

朴素贝叶斯,在机器学习中,是另一种思想,属于概率思想。不过其还是在已知结果进行分类,因此也属于监督学习中的分类算法。

朴素贝叶斯的思想是,根据特征计算出每种分类结果的概率,取概率最大的结果作为对最终结果的预测。

“朴素”的含义是包含了两个假设,一是假定所有特征都同等重要,二是假定每个特征之间独立,即一个特征的值的变化完全不会影响另一个特征的值。

“贝叶斯”是一种概率思想,其引入了先验概率和逻辑推理;与其对应的是“频数概率”,其只从数据本身获取概率,不考虑先验。简单来说,贝叶斯的概率是一种条件概率,即在发生某件事为前提下,另一件事发送的概率。

公式如下:p(ci|x,y)=p(x,y|ci)*p(ci)/p(x,y)。其中的x,y可以拓展到n维,表示的是要求在特征x、y的情况下,ci的概率,可以通过求出ci发生情况下是x、y特征值的概率、ci本身的概率、x、y特征值的概率,再通过上面的公式求出ci。然后,再比较ci,将最大的结果对应的i,作为最终的分类结果。

本文的文本分类,都是英文文本分类,中文由于其词汇构成的复杂,分词比较复杂,暂时没有考虑。

二、文本分类

1、需求

现在需要一个工具,来判断一些词语中,是否存在侮辱性词汇。假定已经将段落拆分成单词数组,并告知哪些词汇是侮辱性词汇,需要构造一个学习器,其可以学习上面的内容,并且在新输入的内容中,进行判断和反馈。

2、样本数据

样本数据包含一些句子,以及该句子是否为侮辱性句子的矩阵。

3、数据处理

要使系统能够“学习”到样本数据,需要先读取里面的句子,对词语进行去重。

4、数据转成向量

有两种方式,一种是仅考虑是否发生(即值只有0和1),称为词集模型;另一种是不仅考虑是否发生,还考虑发送次数,称为词带模型。

初始值都设置成0,后面发生1次,则记录为1,标记这个词语的类别不一样。

对于多分类、判断前几名或最后几名等情况,则必须使用词带模型,因为其记录了发生次数,信息量更多。

5、朴素贝叶斯训练函数

这个函数很重要,是朴素贝叶斯的核心。其就是根据p(ci|x,y)=p(x,y| ci)*p(ci)/p(x,y)公式,计算出每个分类可能性的概率。

做法是,遍历已知的分类结果,同时遍历原先的文本段落的句子,其是一一对应的。遍历到的分类结果如果是1,表示这个文档中有1个侮辱性词汇,则概率是侮辱性内容的分子会对应的加1,否则会加到概率是0的部分。

这里结果取对数,是防止结果太小被四舍五入成0。另外初始值都设置成1,是防止如果有些没有发生的值,那么在矩阵除法的时候会除以0。

6、朴素贝叶斯分类函数

将输入的分类向量的每个元素对应值,和p1对应元素位置相乘,再求和,再将结果加入到这个类别对应的一个整体的概率上。注意到的是,这里的加是log的加。log A + log B = log A*B,log A – log B = logA/B

由上面的分类可知,p1Vec=log(p1Num/p1Denom),这个进行sum后,相当于log(p1Num1*p1Num2..*p1Numn/(p1Denom1*p1Denom2…*p1Denomn)),其再和log(pClass1)相加后,即log的内部再乘以pClass1。这样公式正好凑成p(x,y|ci)*p(ci)/p(x,y)。

7、测试效果与运行结果

三、小结

1、朴素贝叶斯的概念和代码逻辑,相对于knn、决策树等,都要简单得多,核心即理解概率的公式,以及朴素贝叶斯的简化概念的思想。

2、对于概率求解,要注意到这里是取了对数情况下的计算,因此才会出现相加的情况,其本质上还是乘法。取对数并不会影响最终的判断结果,因为函数的增减和其对数的增减趋势是一样的,而这里只需要比较两个情况哪种概率大,并不需要一个概率的绝对值。

——written by linhxx 2018.01.13

下一篇
举报
领券