naive bayes & knn

1、朴素贝叶斯方法,首先要明确是用于分类任务。

在机器学习中,但凡遇到分类问题,所有的方法都关注两部分,即:待分类输入向量的特征和训练向量集中的每个类别的特征。

变量不过就是,特征数的多少,类别的多少,训练样本的多少。

朴素贝叶斯方法在处理这个问题时,采用的思路是概率化的,即每一个输入向量既可能属于类别1,也可能属于类别2,持开放性态度,但是必须选择的话,选择概率更大的那个类别。

拿文本分类来说,这个问题中的特征,就是所有词语,不重复的所有词语。样本呢,就是所有文档,类别呢,可以是垃圾邮件、正常邮件,也可以是任何的人为可分的类别。

所以自然而然的,我们脑海中应该形成一个类似于dataframe的表,其实也就是文档-词矩阵,每一行可以代表每一分文档,每一列都是不重复的词语。每个位置上的值可以表示该词在该文档中出现几次。这样就形成了一个训练集。

现在朴素贝叶斯方法要求的就是,这个著名公式中的等号左边部分。

而等号左边部分的意义,实质上就是,我拿到了一篇文档,里面出现了这么多词,在这个条件下,我这篇文档归为类别1的概率是多少?归为类别2的概率是多少?

然后求解方式就很直观了,分母部分的p(w)是可以不求的,只需要求出分子的乘积。p(ci)也是相对容易的,只需要统计出所有训练集中每个类别的出现概率就好。难点在于p(w|ci),其中w是一个向量。这里需要用到朴素贝叶斯方法的第一个重要假设,就是各个特征之间相互独立。这样就可以把这项展开成一个连乘的形式,只需要统计每个词在该类别中出现的概率,然后连乘就得到结果。

另外一个小问题是具体计算过程中有可能会由于某项概率过小,四舍五入为0导致连乘积为0,因此需要laplace smoothing,默认每个词初始的出现次数都为1,求去条件概率的分母初始值为2。这叫做条件概率的贝叶斯估计。

还有一个问题也出现在计算机实际程序当中,叫做下溢出。出现原因也是因为连乘的每个概率值过于小的原因,这时候可以用取对数的办法,因为我们最终比较的是属于两个类别概率值的大小,依据对数函数的单调性性质,依然可以保证结果的准确性。

在实际程序逻辑中要注意,需要先对训练集中所有词汇的类别概率求取出来,得到两个类别概率向量以及一个先验概率,再将测试集中出现的词汇构造词集向量,直接进行向量相乘即可。

2、knn(最近邻方法)

knn应用类型也是分类问题。不过它的决策规则并不是朴素贝叶斯中的概率思路,而是最常规的投票模式(即少数服从多数)。

knn方法中的核心部分是如何判断和测试向量最近邻的训练向量们。最常见的是欧式距离,其余的像曼哈顿距离,Minkowski距离也可以使用。从这里就可以看出在进行knn方法的时候,需要将训练集的特征表达全部换成数字的形式。

其余的就很好理解了,通过sort,选出最近邻的k个训练向量,然后进行投票,选出类别占比最多的那个类别作测试向量的类别。

有两个问题,一是k的选择,既不能过大,又不能过小。过小容易把噪声点误判为正常点,俗称过拟合;过大意味着整体模型变的简单,学习的近似误差会增大。极端情况是k=N,那么无论输入实例是什么,都将简单地预测为训练集中占比最多的类别。k一般适宜取一个较小的数值。

二是knn的计算量问题。knn的一个缺点就是计算量太大,为了提高计算效率,引入了一种新的数据结构,叫做kd树。kd-tree的平均搜索复杂度可以达到O(log(N)),当训练实例数远远大于空间维数时,效率很高。关于如何搜索,可以查看李航《统计学习方法》p44。

时间: 2024-11-07 14:33:39

naive bayes & knn的相关文章

朴素贝叶斯(naive bayes)

#coding=utf-8 #Naive Bayes #Calculate the Prob. of class:clsdef P(data,cls_val,cls_name="class"): cnt = 0.0 for e in data: if e[cls_name] == cls_val: cnt += 1 return cnt/len(data) #Calculate the Prob(attr|cls)def PT(data,cls_val,attr_name,attr_v

朴素贝叶斯(Naive Bayes)及Python实现

朴素贝叶斯(Naive Bayes)及Python实现 http://www.cnblogs.com/sumai 1.模型 在GDA 中,我们要求特征向量 x 是连续实数向量.如果 x 是离散值的话,可以考虑采用朴素贝叶斯的分类方法. 以垃圾邮件分类为例子,采用最简单的特征描述方法,首先找一部英语词典,将里面的单词全部列出来.然后将每封邮件表示成一个向量,向量中每一维都是字典中的一个词的 0/1值,1 表示该词在邮件中出现,0 表示未出现. 比如一封邮件中出现了“ a”和“ buy”,没有出现“

数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes

贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种,各自是:Naive Bayes.TAN.BAN和GBN. 贝叶斯网络是一个带有概率凝视的有向无环图,图中的每个结点均表示一个随机变量,图中两结点 间若存在着一条弧,则表示这两结点相相应的随机变量是概率相依的,反之则说明这两个随机变量是条件独立的.网络中随意一个结点X 均有一个对应的条件概率表(Con

6 Easy Steps to Learn Naive Bayes Algorithm (with code in Python)

6 Easy Steps to Learn Naive Bayes Algorithm (with code in Python) Introduction Here’s a situation you’ve got into: You are working on a classification problem and you have generated your set of hypothesis, created features and discussed the importanc

朴素贝叶斯分类器的应用 Naive Bayes classifier

一.病人分类的例子 让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难. 某个医院早上收了六个门诊病人,如下表. 症状 职业 疾病 打喷嚏 护士 感冒  打喷嚏 农夫 过敏  头痛 建筑工人 脑震荡  头痛 建筑工人 感冒  打喷嚏 教师 感冒  头痛 教师 脑震荡 现在又来了第七个病人,是一个打喷嚏的建筑工人.请问他患上感冒的概率有多大? 根据贝叶斯定理: P(A|B) = P(B|A) P(A) / P(B) 可得 P(感冒|打喷嚏x建筑工人)  = P(打喷嚏x建筑工人|感冒)

Microsoft Naive Bayes 算法——三国人物身份划分

Microsoft朴素贝叶斯是SSAS中最简单的算法,通常用作理解数据基本分组的起点.这类处理的一般特征就是分类.这个算法之所以称为“朴素”,是因为所有属性的重要性是一样的,没有谁比谁更高.贝叶斯之名则源于Thomas Bayes,他想出了一种运用算术(可能性)原则来理解数据的方法.对此算法的另一个理解就是:所有属性都是独立的,互不相关.从字面来看,该算法只是计算所有属性之间的关联.虽然该算法既可用于预测也可用于分组,但最常用于模型构建的早期阶段,更常用于分组而不是预测某个具体的值.通过要将所有

PGM学习之三 朴素贝叶斯分类器(Naive Bayes Classifier)

介绍朴素贝叶斯分类器的文章已经很多了.本文的目的是通过基本概念和微小实例的复述,巩固对于朴素贝叶斯分类器的理解. 一 朴素贝叶斯分类器基础回顾 朴素贝叶斯分类器基于贝叶斯定义,特别适用于输入数据维数较高的情况.虽然朴素贝叶斯分类器很简单,但是它确经常比一些复杂的方法表现还好. 为了简单阐述贝叶斯分类的基本原理,我们使用上图所示的例子来说明.作为先验,我们知道一个球要么是红球要么是绿球.我们的任务是当有新的输入(New Cases)时,我们给出新输入的物体的类别(红或者绿).这是贝叶斯分类器的典型

Naive Bayes理论与实践

Naive Bayes: 简单有效的常用分类算法,典型用途:垃圾邮件分类 假设:给定目标值时属性之间相互条件独立 同样,先验概率的贝叶斯估计是 优点: 1. 无监督学习的一种,实现简单,没有迭代,学习效率高,在大样本量下会有较好的表现. 2. 对分类器的学习情况有着比较简单的解释,可以简单的通过查询学习时计算的一些概率值来了解其分类原理. 缺点: 1. 假设太强——假设特征条件独立,在输入向量的特征条件有关联的场景下并不适用. #################################W

朴素贝叶斯算法(Naive Bayes)

朴素贝叶斯算法(Naive Bayes) 阅读目录 一.病人分类的例子 二.朴素贝叶斯分类器的公式 三.账号分类的例子 四.性别分类的例子 生活中很多场合需要用到分类,比如新闻分类.病人分类等等. 本文介绍朴素贝叶斯分类器(Naive Bayes classifier),它是一种简单有效的常用分类算法. 回到顶部 一.病人分类的例子 让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难. 某个医院早上收了六个门诊病人,如下表. 症状 职业 疾病 打喷嚏 护士 感冒  打喷嚏 农夫 过敏