【数据挖掘】分类之Naïve Bayes(转载)

【数据挖掘】分类之Na?ve Bayes

1.算法简介

朴素贝叶斯(Naive Bayes)是监督学习的一种常用算法,易于实现,没有迭代,并有坚实的数学理论(即贝叶斯定理)作为支撑。

本文以拼写检查作为例子,讲解Naive Bayes分类器是如何实现的。对于用户输入的一个单词(words),拼写检查试图推断出最有可能的那个正确单词(correct)。当然,输入的单词有可能本身就是正确的。比如,输入的单词thew,用户有可能是想输入the,也有可能是想输入thaw。为了解决这个问题,Naive Bayes分类器采用了后验概率P(c|w)来解决这个问题。P(c|w)表示在发生了w的情况下推断出c的概率。为了找出最有可能c,应找出有最大值的P(c|w),即求解问题

argmaxc P(c|w)

根据贝叶斯定理,

P(c|w)=P(w|c) P(c) / P(w)

对于任意的c,P(w)均相等,问题等价与

argmaxc P(w|c) P(c)

P(w|c)表示的是用户输入w而是想输入c的概率。为了得到P(c),我们可以从文本库中统计c出现的频率。但是,P(w|c)似乎计算起来不那么容易。Norvig [1]中给出了一个简化计算办法:

(1)如果w拼写正确并且出现在文本库中,返回w;

(2)如果(1)没发生,计算与w的编辑距离为1的所有候选c,选出文本库中出现频率最高者;

(3)如果(1)(2)均没发生,计算与w的编辑距离为2的所有候选c,选出文本库中出现频率最高者;

(4)如果(1)(2)(3)均没发生,返回w。

一个单词通过删除、交换、更改、插入四个操作中一种,变换成另一个单词,这两个单词之间的编辑距离为1。

import re, collections  

def words(text): return re.findall(‘[a-z]+‘, text.lower())   

def train(features):
    model=collections.defaultdict(lambda: 1)
    for f in features:
        model[f] += 1
    return model  

NWORDS = train(words(file(‘big.txt‘).read()))  

alphabet = ‘abcdefghijklmnopqrstuvwxyz‘  

def edits1(word):
    splits=[(word[:i], word[i:]) for i in range(len(word) + 1)]
    deletes=[a + b[1:] for a, b in splits if b]
    transposes=[a + b[1] + b[0] + b[2:] for a, b in splits if len(b)>1]
    replaces=[a + c + b[1:] for a, b in splits for c in alphabet if b]
    inserts=[a + c + b  for a, b in splits for c in alphabet]
    return set(deletes + transposes + replaces + inserts)  

def known_edits2(word):
    return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)  

def known(words): return set(w for w in words if w in NWORDS)  

def correct(word):
    candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]
    return max(candidates, key=NWORDS.get)  

2.Referrence

[1] Peter Norvig, How to Write a Spelling Corrector.

[2] 阮一峰, 贝叶斯推断及其互联网应用(三):拼写检查.

时间: 2024-08-25 19:32:46

【数据挖掘】分类之Naïve Bayes(转载)的相关文章

【数据挖掘】分类之Naïve Bayes

1.算法简介 朴素贝叶斯(Naive Bayes)是无监督学习的一种常用算法,易于实现,没有迭代,并有坚实的数学理论(即贝叶斯定理)作为支撑. 本文以拼写检查作为例子,讲解Naive Bayes分类器是如何实现的.对于用户输入的一个单词(words),拼写检查试图推断出最有可能的那个正确单词(correct).当然,输入的单词有可能本身就是正确的.比如,输入的单词thew,用户有可能是想输入the,也有可能是想输入thaw.为了解决这个问题,Naive Bayes分类器采用了后验概率P(c|w)

Python数据挖掘—分类—决策树

概念 决策树(Decision Tree):它通过对训练样本的学习,并建立分类规则,然后依据分类,对新样本数据进行分类预测,属于有监督学习 优点:决策树易于理解和实现,决策树可处理数值型和非数值型数据 步骤 导入数据,确定虚拟变量的列,然后遍历这些列,将这些类的数据转换为分类型数据,再通过get_dummies()方法获取虚拟变量 1 import pandas 2 3 data=pandas.read_csv( 4 "C:\\Users\\Jw\\Desktop\\python_work\\P

数据挖掘分类--判别式模型 ----支持向量机

支持向量机是一种非常流行的监督学习的算法  简称SVM  针对线性和非线性的数据 它是利用一种非线性转换,将原始训练数据映射到高维空间上. 目前已经在手写数字识别 对象识别 说话人识别  以及基准时间序列预测检验等方面得到了广泛的应用 SVM的目标是寻求一个超平面,  关心的是让离超平面最近的点能够具有最大的间距. 通过几何边缘和函数边缘的关系改写分类模式函数,最终进一步改写成一个典型的二次规划问题,,求解之后,可以通过拉格朗日公式将最大边缘超平面改写成决策边界... SVM是一个相对比较新的概

阅读论文《基于神经网络的数据挖掘分类算法比较和分析研究》 安徽大学 工程硕士:常凯 (二)数据集的介绍

数据集的介绍 1."鲍鱼年龄"数据集(Abalone Data Set).是通过预测鲍鱼环,也就是鲍鱼的年轮,来推断鲍鱼寿命.该数据集来自于UCI(University of California,Irvine,UCI)提出的用于机器学习的数据库. 共有八个属性分别是:性别.长度.直径等 具体的属性的介绍 方法一:利用BP 方法使用ELM 方法三:使用SVM 我:通过Xmind函数发现其实对一种新的方法而言函数都是集成可以直接用的,我们要做的就是知道每个函数的具体的意义,以及知道大致的

数据挖掘分类算法--KNN

实验中使用的数据依然是UCI上的Iris,实验中分别有样本数据和测试使用的数据,分别如下: 样本数据是分别算则iris中三类数据各30个: 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa 4.6,3.1,1.5,0.2,Iris-setosa 5.0,3.6,1.4,0.2,Iris-setosa 5.4,3.9,1.7,0.4,Iris-setosa 4.6,3.4,1.4,

Python数据挖掘—分类—SVM

概念: 支持向量机(Support Vector Machine) SVM属于一般化线性分类器,这类分类器的特点是他们能够同时最小化经验误差和最大化几何边缘区,因此支持向量机也被称为最大边缘区分类器. 原文地址:https://www.cnblogs.com/U940634/p/9746371.html

4.朴素贝叶斯法

朴素贝叶斯(naive Bayes) 法是基于贝叶斯定理与特征条件独立假设的分类方法.对于给定的训练数据集, 首先基于特征条件独立假设学习输入/输出的联合概率分布: 然后基于此模型, 对给定的输入x, 利用贝叶斯定理求出后验概率最大的输出y. 朴素贝叶斯法实现简单, 学习与预测的效率都很高, 是一种常用的方法. 1. 朴素贝叶斯法的学习与分类基本方法训练数据集: 由X和Y的联合概率分布P(X,Y)独立同分布产生朴素贝叶斯通过训练数据集学习联合概率分布P(X,Y) ,      即先验概率分布:

数据挖掘中分类算法小结

数据挖掘中分类算法小结 数据仓库,数据库或者其它信息库中隐藏着许多可以为商业.科研等活动的决策提供所需要的知识.分类与预测是两种数据分析形式,它们可以用来抽取能够描述重要数据集合或预测未来数据趋势的模型.分类方法(Classification)用于预测数据对象的离散类别(Categorical Label);预测方法(Prediction )用于预测数据对象的连续取值. 分类技术在很多领域都有应用,例如可以通过客户分类构造一个分类模型来对银行贷款进行风险评估;当前的市场营销中很重要的一个特点是强

用 WEKA 进行数据挖掘 ——第一章:简介

1.简介数据挖掘.机器学习这些字眼,在一些人看来,是门槛很高的东西.诚然,如果做算法实现甚至算法优化,确实需要很多背景知识.但事实是,绝大多数数据挖掘工程师,不需要去做算法层面的东西.他们的精力,集中在特征提取,算法选择和参数调优上.那么,一个可以方便地提供这些功能的工具,便是十分必要的了.而weka,便是数据挖掘工具中的佼佼者.Weka的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费的,非商业化的,基于JAVA环境下