机器学习--第一章贝叶斯定理及其应用

贝叶斯统计都是以条件概率,联合概率为基础的,所以我们从概率,条件概率,联合概率开始,然后到贝叶斯定理,最后讲一个贝叶斯的应用--垃圾邮件的过滤

概率:事件发生的可能性,比如抛一枚硬币,正面向上的可能性有50%,掷色子点数为6的可能性为1/6。我们用符号表示为P(A)

条件概率:满足某些条件下事件发生的可能性,比如求一个人在买了裤子的前提下再买衣服的概率,我们用符号表示为P(B|A),即事件A发生下B发生的概率

联合概率:多个事件同时发生的可能性,比如抛硬币两次都朝上的概率P(AB) = P(A)P(B),前提是事件是相互独立的互不影响,如果不独立则联合概率为P(AB) = P(A)P(B|A)

当P(B) = P(B|A)时表示事件是相互独立的。

贝叶斯定理

利用联合概率我们可以计算出条件概率,比如知道了P(AB)和P(A)我们想知道事件A发生的前提下B发生的概率则P(B|A) = P(AB) / P(A),可如果我们想计算P(A|B)的概率呢?

不巧的是P(A|B)并不等于P(B|A)。

我们从联合概率知道概率乘积的顺序可以交换即P(AB) = P(BA),然后将两个概率展开P(A)P(B|A) = P(B)P(A|B),我们可以清楚的看到我们想要的P(A|B)就在其中

P(A|B) = P(B|A)P(A) / P(B),这就是贝叶斯定理。

P(A)就是先验概率,我们在计算前假设的某个概率,比如抛硬币正面向上的概率为50%

P(B|A)就是后验概率,这是我们看到数据的后计算得到的

P(A|B)就是先验概率和后验概率计算得到的,称似然度

P(B) 在任何情况下该事件发生的概率,称标准化常量 P(B) = P(B1)P(B1|A1) + P(B2)P(B2|A2).....

贝叶斯估计

用极大似然估计可能会出现所要估计的概率值为0的情况,这会影响到后验概率的计算结果,使得分类有偏差。我们使用贝叶斯估计,即添加一个λ修正参数

贝叶斯公式 P(B|A) = (P(AB) + λ) / (P(A) + Sλ)  λ >= 0 S表示随机变量各个取值的频数

垃圾邮件的过滤

垃圾邮件就是包含了某些词语,我们只有找到这些词,并计算出在这些词语出现的前提下是垃圾邮件的概率和不是垃圾邮件的概率,比较概率大小即

p(垃圾邮件 | w1,w2,w3,w4,w5...) 和 p(非垃圾邮件 | w1,w2,w3,w4,w5...)的大小。无法直接知道这个条件概率,所以贝叶斯又上场了,先写出联合概率,然后展开得

p(垃圾邮件 | w1,w2,w3,w4,w5...)p(w1,w2,w3,w4,w5...) = p(w1,w2,w3,w4,w5...| 垃圾邮件) p(垃圾邮件),再化简得

p(垃圾邮件 | w1,w2,w3,w4,w5...) = p(w1,w2,w3,w4,w5...| 垃圾邮件) p(垃圾邮件) / p(w1,w2,w3,w4,w5...)

p(非垃圾邮件 | w1,w2,w3,w4,w5...) = p(w1,w2,w3,w4,w5...| 非垃圾邮件) p(非垃圾邮件) / p(w1,w2,w3,w4,w5...)

p(垃圾邮件) 就是先验概率0.5, p(w1,w2,w3,w4,w5...| 垃圾邮件) 就是后验概率,是根据所给数据计算的,因为两个概率都除以了p(w1,w2,w3,w4,w5...),所以消去最终得到以下式子:

p(垃圾邮件 | w1,w2,w3,w4,w5...) = p(w1,w2,w3,w4,w5...| 垃圾邮件) p(垃圾邮件)

p(非垃圾邮件 | w1,w2,w3,w4,w5...) = p(w1,w2,w3,w4,w5...| 非垃圾邮件) p(非垃圾邮件)

import numpy as np
import re

pattern = re.compile(r‘\w+‘)

class bayes(object):

    def __init__(self,wordList):
        self.wordsList = wordList
        self.hamCnt = 0
        self.spamCnt = 0
        self.pham = np.ones(len(self.wordsList))
        self.pspan = np.ones(len(self.wordsList))
        self.phamWordCnt = 2
        self.pspanWordCnt = 2

    def word_to_vector(self, word):
        tempVector = np.zeros(len(self.wordsList))
        for line in pattern.findall(word):
            if line in self.wordsList:
                tempVector[self.wordsList.index(line)] += 1.0
        return tempVector

    def Set_tran_data(self, word, Flag):
        Vector = self.word_to_vector(word.strip())
        if Flag:
            self.pham += Vector
            self.phamWordCnt += sum(Vector)
            self.hamCnt += 1.0
        else:
            self.pspan += Vector
            self.pspanWordCnt += sum(Vector)
            self.spamCnt += 1.0

    def classifiy(self, word):
        Vector = self.word_to_vector(word)

        pA = self.hamCnt / (self.hamCnt + self.spamCnt)
        pB = self.spamCnt / (self.hamCnt + self.spamCnt)

        pAnum = sum(np.log(self.pham / self.phamWordCnt)*Vector)
        pBnum = sum(np.log(self.pspan / self.pspanWordCnt)*Vector)

        if np.log(pA) + pAnum > np.log(pB) + pBnum:
            return 1
        else:
            return -1

if __name__ == "__main__":
    hamlist = [item for i in range(1, 20) for item in open(r‘C:\Users\Administrator\Desktop\machinelearninginaction\Ch04\email\ham\%s.txt‘% i, ‘r‘).readlines() ]
    spamlist = [item for i in range(1, 20) for item in open(r‘C:\Users\Administrator\Desktop\machinelearninginaction\Ch04\email\spam\%s.txt‘% i, ‘r‘).readlines()]
    wordList1 = [word for line in hamlist for word in pattern.findall(line) if len(word) > 2]
    wordList2 = [word for line in spamlist for word in pattern.findall(line) if len(word) > 2]
    wordList1.extend(wordList2)
    temp = bayes(list(set(wordList1)))

    tranhamlist = [open(r‘C:\Users\Administrator\Desktop\machinelearninginaction\Ch04\email\ham\%s.txt‘% i, ‘r‘).read()  for i in range(1, 20)]
    transpamlist =  [open(r‘C:\Users\Administrator\Desktop\machinelearninginaction\Ch04\email\spam\%s.txt‘% i, ‘r‘).read()  for i in range(1, 20)]
    for line in tranhamlist:
        temp.Set_tran_data(line, True)

    for line in transpamlist:
        temp.Set_tran_data(line, False)

    testlist =  [open(r‘C:\Users\Administrator\Desktop\machinelearninginaction\Ch04\email\ham\%s.txt‘% i, ‘r‘).read()  for i in range(21, 26)]  

    for line in testlist:
        print temp.classifiy(line)

数据是机器学习实战第4章

时间: 2024-08-03 16:05:10

机器学习--第一章贝叶斯定理及其应用的相关文章

Andrew Ng机器学习第一章——初识机器学习

机器学习的定义 计算机程序从经验E中学习,解决某一任务T.进行某一性能度量P,通过P测定在T上的表现因E而提高. 简而言之:程序通过多次执行之后获得学习经验,利用这些经验可以使得程序的输出结果更为理想,就是机器学习. 主要的两类机器学习算法 监督学习和无监督学习 监督学习 定义:对于数据集中的每个样本,我们想要算法预测得出正确的答案.例如预测房子的价格.肿瘤良性或者恶性 回归问题:预测连续值的输出(房子的价格) 分类问题:预测离散值的输出(肿瘤的性质良或恶) 无监督学习 定义:给定的数据集,找可

Andrew Ng机器学习第一章——单变量线性回归

监督学习算法工作流程 h代表假设函数,h是一个引导x得到y的函数 如何表示h函数是监督学习的关键问题 线性回归:h函数是一个线性函数 代价函数 在线性回归问题中,常常需要解决最小化问题.代价函数常用平方误差函数来表示 代价函数就是用于找到最优解的目的函数,这也是代价函数的作用 ps:尽可能简化问题去理解一些抽象概念,如单一的参数变化等等 可以利用代价函数去寻找你拟合效果最好的假设函数的参数 当参数很多时,利用图表来寻找最小代价函数就变得比较复杂,故引出梯度下降法. 梯度下降法最小化任意代价函数J

第一章:机器学习基础

第一部分:分类 本书前两部分主要探讨监督学习(supervisedieaming).在监督学习的过程中,我们只需要给定输入样本集,机器就可以从中推演出指定目标变量的可能结果.监督学习相对比较简单,机器只需从输入数据中预测合适的模型,并从中计算出目标变量的结果.      监督学习一般使用两种类型的目标变量:标称型和数值型.标称型目标变量的结果只在有限目标集中取值,如真与假.动物分类集合{爬行类.鱼类.哺乳类.两栖类.植物.真菌};数值型目标变量则可以从无限的数值集合中取值,如0.100.42.0

《机器学习》读书笔记-第一章 引言

<Machine Learning>,作者Tom Mitchell,卡内基梅隆大学. 第一章 引言 1.1 学习问题的标准描述: 机器学习的定义: 如果一个计算机程序针对某类任务T的用P衡量的性能根据经验E来自我完善, 那么我们称这个计算机程序在从E中学习,针对某类任务T,它的性能用P来衡量. 例子: 对于学习下西洋跳棋的计算机程序,它可以通过和自己下棋获取经验: 它的任务是参与西洋跳棋对弈: 它的性能用它赢棋的能力来衡量. 学习问题的三个特征: 任务的种类, 衡量性能提高的标准, 经验的来源

机器学习总结之第一章绪论

机器学习总结之第一章绪论 http://www.cnblogs.com/kuotian/p/6141728.html 1.2基本术语 特征向量:即示例,反映事件或对象在某方面的性质.例如,西瓜的色泽,敲声. 属性:例如 青绿 乌黑 清脆. 数据集:例如(色泽=青绿,根蒂=蜷缩,敲声=浊响),(色泽=浅白,根蒂=硬挺,敲声=清脆),(色泽=乌黑,根蒂=稍蜷,敲声=沉闷)-- 例如,D = {X1,X2,--,Xm}表示包含m个示例的数据集. Xi = (xi1:xi2:--:xid)每个示例有d个

《机器学习》西瓜书 第一章 绪论

机器学习绪论 基本术语 基础 模型:泛指从数据中学得的结果 数据集 data set:一组记录的集合 示例 instance/样本 sample:关于一个事件或对象的描述 属性 attribute/特征 feature:反映事件或对象在某方面的表现或性质的事项 属性值 attribute value:属性上的取值 属性空间 attribute space/样本空间 sample space:属性张成的空间即 \(n\) 个特征描述出的 \(n\) 维空间 特征向量 feature vector:

第一章 特征工程-------------《百面机器学习》

今天打算看看<百面机器学习>,打好基础,方便日后找工作,同时也是打发最近无聊的心情(闲下来就喜欢多想导致心情terrible). 第一章    特征工程 第一节  特征归一化 Q1:为什么需要对数值的特征做归一化? A1:对数据类型的特征作归一化可以将所有的特征都统一到一个大致相同的数值区间内.避免因量纲的不同带来的影响. 最常用的方法有:1)线性函数归一化.即 对原始数据进行线性变换,使结果映射到[0,1]的范围,实现对原始数据的等比缩放. 2)零均值归一化.将原始数据映射到均值为0,标准差

2017.06.29 数据挖掘概念知识第一章

第一章1.数据仓库技术:1.数据清理 2.数据集成 3.联机分析处理2.数据挖掘(知识发现)过程P5详见图 1.数据清理 2.数据集成 3.数据选择 4.数据变换 5.数据挖掘 6.模式评估 7.知识表示3.大数据的特点: 1.量大 2.种类多 3.处理速度快 4价值密度低 5.复杂性4.类与概念描述方法过程: 1.数据特征化 2.数据区分 3.数据特征化和区分5.分类如何提供导出的模型: 导出的模型可以多种形式表示:分类规则.决策树.数学公式或神经网络6.一个模型是有趣的: 1.易于被人理解

《Machine Learning》(第一章)序章

关键词:机器学习,基本术语,假设空间,归纳偏好,机器学习用途 一.机器学习概述 机器学习是一门从数据中,经过计算得到模型(Model)的一种过程,得到的模型不仅能反应出训练数据集中所蕴含的规律,并且能够运用在训练集之外的数据上.而机器学习研究的方向,就是解决:“我们为了得到这种模型,应该采用何种算法” 的问题. 如果说,训练集是我们的生活中的 “经验”,那么模型就是我们的 “经验性解决方法” ,训练集外的数据就是生活中的 “新问题” . 二.基本术语 在解释基本术语的同时,我们用生活中的例子 “