博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一、实现贝叶斯算法
阅读量:5950 次
发布时间:2019-06-19

本文共 2055 字,大约阅读时间需要 6 分钟。

import numpy as npfrom sklearn import datasetsfrom sklearn.naive_bayes import GaussianNBfrom sklearn.cross_validation import train_test_split iris = datasets.load_iris()train_X,test_X, train_y, test_y = train_test_split(iris.data,                                                     iris.target,                                                     test_size = 0.2,                                                     random_state = 0)  model = GaussianNB()model.fit(train_X,train_y)predicted= model.predict(test_X)print "test accuracy %g" %np.mean(predicted == test_y) #以上是利用sklearn包调用的数据集和贝叶斯模型, #以下是自己写出来的贝叶斯模型 #代码较为简单,没有太多注释,命名有点乱,请见谅, #conduct by myselfimport pandas as pdimport mathdf = pd.DataFrame(train_X)df['label'] = train_yP_Y = []theater = []for i in range(3):    py = float(np.sum(train_y ==i))/train_y.size    P_Y.append(py)    label= df[df.label == i]    X_theater = []    for j in range(4):        a = label[j].mean()        b = label[j].std()        X_theater.append([a,b])    theater.append(X_theater) #### distrubtion of gaussinadef gaussina(x,the1,the2):    prob = np.exp(-(x - the1) ** 2 /(2* the2 **2))/(math.sqrt(2*math.pi)*the2)    return prob    predicted_1 = []for i in test_X:    predprob = 0.0    pred = -1    for j in range(3):        P = 1        for n in range(4):            P = P*gaussina(i[n],theater[j][n][0],theater[j][n][1])        m = P_Y[j]*P        if(P_Y[j]*P>predprob):            predprob = P_Y[j]*P            pred = j    predicted_1.append(pred)print "test accuracy by myself%g" %np.mean(predicted_1 == test_y) 在此总结一下贝叶斯算法的注意事项和优缺点: 工作流程
  1. 准备阶段
    确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本。
  2. 训练阶段
    计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计
  3. 应用阶段
    使用分类器进行分类,输入是分类器和待分类样本,输出是样本属于的分类类别
属性特征
  1. 特征为离散值时直接统计即可(表示统计概率)
  2. 特征为连续值的时候假定特征符合高斯分布:g(x,n,u)
    那么p(ak|yi)=g(xk,ni,ui)
Laplace校准(拉普拉斯校验) 当某个类别下某个特征划分没有出现时,会有P(a|y)=0,就是导致分类器质量降低,所以此时引入Laplace校验,就是对没类别下所有划分的计数加1。 遇到特征之间不独立问题 参考改进的贝叶斯网络,使用DAG来进行概率图的描述 优缺点 优点: 对小规模的数据表现很好,适合多分类任务,适合增量式训练。 缺点: 对输入数据的表达形式很敏感(离散、连续,值极大极小之类的)。
 

 

转载于:https://www.cnblogs.com/han1ning1/p/6693596.html

你可能感兴趣的文章
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>
jenkins权限管理,实现不同用户组显示对应视图views中不同的jobs
查看>>
我的友情链接
查看>>
CentOS定时同步系统时间
查看>>
批量删除用户--Shell脚本
查看>>
如何辨别android开发包的安全性
查看>>
Eclipse Java @Override 报错
查看>>
交换机之间的VLAN通信(trunk)
查看>>
heartbeat-gui
查看>>
关于一阶逻辑中实例化的可满足性问题
查看>>
cut命令用法讲解
查看>>
我的第一篇日志。
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
企业实战:mysql5.6数据库备份、恢复脚本
查看>>
CentOS7安装mysql
查看>>
RMB數字轉換中文
查看>>
基于rhel7.2的Zabbix平台搭建和部署(二)
查看>>
Html5本地存储和本地数据库
查看>>