Python3 贝叶斯分类
# -*- coding: utf-8 -*-
"""
Created on Tue Jan 16 20:11:07 2018 @author: markli
"""
import numpy as np;
import pandas as pd; """
贝叶斯分类
训练数据格式
X = [x1,x2,...xm]; m*n
xi = [xi1,xi2,...xin].T
Y = [y1,y2,...ym];1*m
""" class Bayes:
def __init__(self,lamda,region):
"""
lamda 贝叶斯修正参数
region 特征属性取值域,类标签取值域
例如两个特征取值范围分别为,A1=[1,2,3],A2=['S','M','L']
类标签取值:C=[1,-1],region=[A1,A2,C]
"""
self.lamda = lamda;
#存放类标签域
self.Y = region[-1];
#存放特征取值域
self.X = region[:-1]; #存放先验概率 P(Y = Ck)
self.PrioPro = np.zeros((1,len(region[-1]))); #存放条件概率 P(Xj = ajl | Y = Ck)
self.ConditionalPro = [];
for i in range(len(region)-1):
cp = np.zeros((len(region[-1]),len(region[i])));
self.ConditionalPro.append(cp); def fit(self,TrainData):
"""
计算先验概率和条件概率,建立模型
TrainData 为二维数组
TrainData 列的顺序与region中特征属性顺序一致
TrainData 最后一列为类别
"""
N = len(TrainData);
K = len(self.Y);
TrainData = TrainData.astype(np.str); NumofCk = pd.value_counts(TrainData[:,-1], sort=True); #Series 类型
CountOfCk = [NumofCk[ck] for ck in self.Y]; #list类型
self.PrioPro = [(ck+self.lamda) / (N + K * self.lamda) for ck in CountOfCk]; j=0;
for ck in self.Y:
#选出类别为Ck的数据
DataofCk = TrainData[np.where(TrainData[:,-1]==ck)];
n = len(DataofCk);
#选出第i个特征的数据
for i in range(len(self.X)):
DataofCkandXi = DataofCk[:,i];
Numofaj = pd.value_counts(DataofCkandXi,sort=True); #为第i个特征的每个特征值计数
Countofaj = [Numofaj[aj] for aj in self.X[i]];
S = len(self.X[i]);
self.ConditionalPro[i][j] = [(aj+self.lamda) / (n+S * self.lamda) for aj in Countofaj];
j = j+1; def predict(self,TestData):
"""
预测实例,为其分类
测试数据没有类别列,其余数据格式与训练数据格式一致
"""
predictY = [];
for i in range(len(TestData)):
x = TestData[i];
y = self.GetLable(x);
predictY.append(y);
return predictY; def GetLable(self,x):
"""
输入一个测试实例x ,输出使其后验概率最大的类别y
"""
pro = [];
n = len(x);
for j in range(len(self.Y)):
p = 1;
for i in range(n):
feature = self.ConditionalPro[i];
fi = self.X[i] #获得第i个特征的值域
index = fi.index(x[i]);
p = p * feature[j][index]; p = p * self.PrioPro[j];
pro.append(p); y = self.Y[np.argmax(pro)]; return y;
测试代码
# -*- coding: utf-8 -*-
"""
Created on Wed Jan 17 15:29:14 2018 @author: markli
""" import numpy as np;
import pandas as pd;
from BayesClass import Bayes A1 = ['','',''];
A2 = ['S','M','L'];
C = ['','-1']; Data = np.array([[1,'S',-1],[1,'M',-1],[1,'M',1],[1,'S',1],[1,'S',-1],
[2,'S',-1],[2,'M',-1],[2,'M',1],[2,'L',1],[2,'L',1],
[3,'L',1],[3,'M',1],[3,'M',1],[3,'L',1],[3,'L',-1]]);
test = np.array([[2,'S']]);
B = Bayes(0,[A1,A2,C]);
B.fit(Data);
y = B.predict(test);
print(y);
Python3 贝叶斯分类的更多相关文章
- 利用朴素贝叶斯分类算法对搜狐新闻进行分类(python)
数据来源 https://www.sogou.com/labs/resource/cs.php介绍:来自搜狐新闻2012年6月—7月期间国内,国际,体育,社会,娱乐等18个频道的新闻数据,提供URL ...
- 机器学习之路: python 朴素贝叶斯分类器 MultinomialNB 预测新闻类别
使用python3 学习朴素贝叶斯分类api 设计到字符串提取特征向量 欢迎来到我的git下载源代码: https://github.com/linyi0604/MachineLearning fro ...
- python3 threading初体验
python3中thread模块已被废弃,不能在使用thread模块,为了兼容性,python3将thread命名为_thread.python3中我们可以使用threading进行代替. threa ...
- Python3中的字符串函数学习总结
这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...
- Mac-OSX的Python3.5虚拟环境下安装Opencv
Mac-OSX的Python3.5虚拟环境下安装Opencv 1 关键词 关键词:Mac,OSX,Python3.5,Virtualenv,Opencv 2 概述 本文是一篇 环境搭建 的基础 ...
- Ubuntu部署python3.5的开发和运行环境
Ubuntu部署python3.5的开发和运行环境 1 概述 由于最近项目全部由python2.x转向 python3.x(使用目前最新的 python3.5.1) ,之前的云主机的的默认python ...
- Python3 登陆网页并保持cookie
网页登陆 网页登陆的原理都是,保持一个sessionid在cookie然后,根据sessionid在服务端找到cookie进行用户识别 python实现 由于python的简单以及丰富的类库是开发网络 ...
- 阿里云 SDK python3支持
最近的一个项目需要操作阿里云的RDS,项目使用python3,让人惊讶的是官方的SDK竟然只支持python2 在阿里云现有SDK上改了改,文件的修改只涉及aliyun/api/base.py,详见h ...
- python3爬取1024图片
这两年python特别火,火到博客园现在也是隔三差五的出现一些python的文章.各种开源软件.各种爬虫算法纷纷开路,作为互联网行业的IT狗自然看的我也是心痒痒,于是趁着这个雾霾横行的周末瞅了两眼,作 ...
随机推荐
- Java 使用 Enum 实现单例模式
在这篇文章中介绍了单例模式有五种写法:懒汉.饿汉.双重检验锁.静态内部类.枚举.如果涉及到反序列化创建对象时推荐使用枚举的方式来实现单例,因为Enum能防止反序列化时重新创建新的对象.本文介绍 Enu ...
- C++中this指针
原文 . this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自 ...
- centos内存自动清理脚本及限制tomcat内存占用
使用crontab定时每天自动清理系统内存 00 00 * * * /root/Cached.sh [root@localhost ~]# cat Cachec.sh #! /bin/bash# ca ...
- 在ASP.Net中两种利用CSS实现多界面的方法
通过使页面动态加载不同CSS实现多界面(类型于csdn的blog): 方法一: <%@page language="C#"%><%@import namespac ...
- 产品排序(2015 年北大自招夏令营) (与栈相关的区间DP)
题面: \(solution:\) 又是一道\(DP\)的好题啊!状态并不明显,需要仔细分析,而且还结合了栈的特性! 做这一类题,只要出题人有点理想,一定会在栈的性质上做点文章,所以我们尽量围绕栈的性 ...
- CSS float浅析
写在开篇: 浮动属性的设计初衷,只是为了实现文本环绕效果! 时刻牢记这一点,才能正确使用浮动. 由于浮动元素脱离文档流,它后面的块级元素会忽略它的存在,占据它原本的位置,但是这个块级元素中的内联元素, ...
- Javascript - Vue - 请求
本地增删查的一个例子 <div id="box"> <div class="panel panel-primary"> ...
- 【工具】用命令行与Python使用YARA规则
1.前言 YARA是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具,使用YARA可以基于文本或二进制模式创建恶意软件家族描述与匹配信息.现在已经被多家公司所运用于自身的产品. 2.YAR ...
- Flask页面模板化代码片段
文中展示了Flask官网的Tutorial示例中用到的模板化代码片段,以备查阅. base.html: {% block title %}{% endblock %} {% if g.user %} ...
- 查看library的依赖树
今天一同事问我如何解决包依赖重复的问题,我告诉他你可以用exclude,provide,compileOnly等关键字,他问我如何查找某个库依赖了什么,我说有一个插件,愣是想了好久没想起什么名字来,搜 ...