没有合适的资源?快使用搜索试试~ 我知道了~
简介k近邻(KNN)是一种基本分类与回归方法。其思路如下:给一个训练数据集和一个新的实例,在训练数据集中找出与这个新实例最近的 个训练实例,然后统计最近的 个训
资源详情
资源评论
资源推荐
机器学习算法总结2
6.朴素贝叶斯
参考文章:
《统计学习方法》
机器学习常见算法个人总结(面试用)
朴素贝叶斯理论推导与三种常见模型
朴素贝叶斯的三个常用模型:高斯、多项式、伯努利
简介
朴素贝叶斯是基于贝叶斯定理与特征条件独立假设的分类方法。
贝叶斯定理是基于条件概率来计算的,条件概率是在已知事件B发生的前提下,求解事件A发生的概率,即
,而贝叶斯定理则可以通过 来求解 :
其中分母 可以根据全概率公式分解为:
而特征条件独立假设是指假设各个维度的特征 互相独立,则条件概率可以转化为:
朴素贝叶斯分类器可表示为:
而由于对上述公式中分母的值都是一样的,所以可以忽略分母部分,即可以表示为:
这里 是先验概率,而 则是后验概率,朴素贝叶斯的目标就是最大化后验概率,这等价于期望风险最小
化。
参数估计
极大似然估计
朴素贝叶斯的学习意味着估计 和 ,可以通过极大似然估计来估计相应的概率。
如上图所示,分别是 和 的极大似然估计。
当求解完上述两个概率,就可以对测试样本使用朴素贝叶斯分类算法来预测其所属于的类别,简单总结的算法流程
如下所示:
贝叶斯估计/多项式模型
用极大似然估计可能会出现所要估计的概率值为0的情况,这会影响到后验概率的计算,使分类产生偏差。解决
这个问题的办法是使用贝叶斯估计,也被称为多项式模型。
当特征是离散的时候,使用多项式模型。多项式模型在计算先验概率 和条件概率 时,会做一些平
滑处理,具体公式为:
是总的样本个数, 是总的类别个数, 是类别为 的样本个数, 是平滑值。
是类别为 的样本个数, 是特征的维数, 是类别为 的样本中,第 维特征的值是 的样本个数,
是平滑值。
当 时,称作Laplace平滑,当 时,称作Lidstone平滑, 时不做平滑。
如果不做平滑,当某一维特征的值 没在训练样本中出现过时,会导致 ,从而导致后验概率为0。加上
平滑就可以克服这个问题。
高斯模型
当特征是连续变量的时候,运用多项式模型会导致很多 (不做平滑的情况下),即使做平滑,所得到
的条件概率也难以描述真实情况,所以处理连续变量,应该采用高斯模型。
高斯模型是假设每一维特征都服从高斯分布(正态分布):
表示类别为 的样本中,第 维特征的均值;
表示类别为 的样本中,第 维特征的方差。
伯努利模型
与多项式模型一样,伯努利模型适用于离散特征的情况,所不同的是,伯努利模型中每个特征的取值只能是1和
0(以文本分类为例,某个单词在文档中出现过,则其特征值为1,否则为0).
伯努利模型中,条件概率 的计算方式是:
当特征值 为1时, ;
当特征值 为0时, ;
工作流程
1.准备阶段
确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本。
2.训练阶段
计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计
3.应用阶段
使用分类器进行分类,输入是分类器和待分类样本,输出是样本属于的分类类别
属性特征
1.特征为离散值时直接统计即可(表示统计概率)
2.特征为连续值的时候假定特征符合高斯分布,则有
与逻辑回归的不同
1.NaiveBayes是一个生成模型,在计算P(y|x)之前,先要从训练数据中计算P(x|y)和P(y)的概率,从而利用贝
叶斯公式计算P(y|x)。
LogisticRegression是一个判别模型,它通过在训练数据集上最大化判别函数P(y|x)学习得到,不需要知道
P(x|y)和P(y)。
2.NaiveBayes是建立在条件独立假设基础之上的,设特征X含有n个特征属性(X1,X2,...Xn),那么在给定
Y的情况下,X1,X2,...Xn是条件独立的。
LogisticRegression的限制则要宽松很多,如果数据满足条件独立假设,LogisticRegression能够取得非常好
的效果;当数据不满足条件独立假设时,LogisticRegression仍然能够通过调整参数让模型最大化的符合数据
的分布,从而训练得到在现有数据集下的一个最优模型。
3.当数据集比较小的时候,应该选用NaiveBayes,为了能够取得很好的效果,数据的需求量为O(logn)
当数据集比较大的时候,应该选用LogisticRegression,为了能够取得很好的效果,数据的需求量为O(n)
与逻辑回归的相同
多项式模型如下:
>>>fromsklearnimportdatasets
>>>iris=datasets.load_iris()
>>>iris.feature_names#四个特征的名字
['sepallength(cm)','sepalwidth(cm)','petallength(cm)','petalwidth(cm)']
>>>iris.data
array([[5.1,3.5,1.4,0.2],
[4.9,3.,1.4,0.2],
[4.7,3.2,1.3,0.2],
[4.6,3.1,1.5,0.2],
[5.,3.6,1.4,0.2],
[5.4,3.9,1.7,0.4],
[4.6,3.4,1.4,0.3],
[5.,3.4,1.5,0.2],
......
[6.5,3.,5.2,2.],
[6.2,3.4,5.4,2.3],
[5.9,3.,5.1,1.8]])#类型是numpy.array
>>>iris.data.size
600#共600/4=150个样本
>>>iris.target_names
array(['setosa','versicolor','virginica'],
dtype='|S10')
>>>iris.target
array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.....,0,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,......,2,2,2,2,2,2,2,2,2,2,2,2])
>>>iris.target.size
150
>>>fromsklearn.naive_bayesimportGaussianNB
>>>clf=GaussianNB()
>>>clf.fit(iris.data,iris.target)
>>>clf.predict(iris.data[0])
array([0])#预测正确
>>>clf.predict(iris.data[149])
array([2])#预测正确
>>>data=numpy.array([6,4,6,2])
>>>clf.predict(data)
array([2])#预测结果很合理
>>>importnumpyasnp
>>>X=np.random.randint(5,size=(6,100))
>>>y=np.array([1,2,3,4,5,6])
>>>fromsklearn.naive_bayesimportMultinomialNB
>>>clf=MultinomialNB()
>>>clf.fit(X,y)
MultinomialNB(alpha=1.0,class_prior=None,fit_prior=True)
>>>print(clf.predict(X[2]))
[3]
剩余23页未读,继续阅读
无声远望
- 粉丝: 52
- 资源: 298
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0