机器学习——朴素贝叶斯算法Python实现

简介

这里参考《统计学习方法》李航编进行学习总结。详细算法介绍参见书籍,这里只说明关键内容。
这里写图片描述
这里写图片描述

条件独立下:p{X=x|Y=y}=p{X1=x1|Y=y} * p{X2=x2|Y=y} *...* p{Xn=xn|Y=y}

这里写图片描述

(4.4)等价于p{Y=ck|X=x}= p{X=x|Y=ck}*p{Y=ck} / p{X=x}
所以对不同的Y=ck,分母都是一样的,最后(4.7)比较选出最大概率时可以忽略分母,仅比较分子。
而分子为p{Y=ck} * p{X1=x1|Y=ck}* p{X2=x2|Y=ck}*…*p{Xn=xn|Y=ck}

所以(4.7)的公式即为
max(p{Y=ck}* p{X1=x1|Y=ck} * p{X2=x2|Y=ck}*…*p{Xn=xn|Y=ck}) (k=1,2,…) 并返回对应的ck。

因此模型只需要训练出(生成)所有的 p{Y=ck} 和 p{Xi=xij|Y=ck}就可以利用(4.7)进行分类了.
(注:这里的xij表示第i个特征的第j个取值。)

案例:

下面通过一个实例来实现这个算法。
项目数据下载及说明,如下链接:
http://archive.ics.uci.edu/ml/datasets/Car+Evaluation
请自行下载数据,以及了解数据的相关内容。

数据样例:

Class Values:
unacc, acc, good, vgood

Attributes:
buying: vhigh, high, med, low.
maint: vhigh, high, med, low.
doors: 2, 3, 4, 5more.
persons: 2, 4, more.
lug_boot: small, med, big.
safety: low, med, high.

样本:

vhigh,vhigh,2,2,small,low,unacc
vhigh,vhigh,2,2,small,med,unacc
vhigh,vhigh,2,2,small,high,unacc
vhigh,vhigh,2,2,med,low,unacc
vhigh,vhigh,2,2,med,med,unacc
vhigh,vhigh,2,2,med,high,unacc
,,,

先读取数据:

import numpy as np

#从文档中读取数据,每条数据转成列表的形式
def readData(path):
    dataList = []
    with open(path,'r') as f:
        dataSet = f.readlines()

    for d in dataSet:
        d = d[:-1]
        d = d.split(',')
        print(d)
        dataList.append(d)

    return dataList

然后利用这些数据生成所有的 p{Y=ck} 和 p{Xi=xij|Y=ck}。

#为方便代码处理,先做属性映射
#分类值映射
Cls = {
  'unacc':0, 'acc':1, 'good':2, 'vgood':3}   
#特征值映射,共6个特征值,每个特征表示为X[i],X[i][xiv]表示特征Xi的取值。
X = [{
  'vhigh':0, 'high':1, 'med':2, 'low':3},
         {
  
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值