朴素贝叶斯 Python
来源:互联网 发布:psv如何重构数据库 编辑:程序博客网 时间:2024/06/18 08:19
朴素贝叶斯分类
1. 预处理:OneHotEncoder(sklearn)
2. 特征属性的条件概率分母默认设置为1
#coding=utf-8from numpy import *class NaiveBayesClassifier(object): def __init__(self): self.dataMat = list() self.labelMat = list() self.pLabel1 = 0 self.p0Vec = list() self.p1Vec = list() def loadDataSet(self): self.dataset = mat([ ['overcast', 'hot', 'high', 'FALSE', 'yes'], ['rainy', 'mild', 'high', 'FALSE', 'yes'], ['rainy', 'cool', 'normal', 'FALSE', 'yes'], ['overcast', 'cool', 'normal', 'TRUE', 'yes'], ['sunny', 'cool', 'normal', 'FALSE', 'yes'], ['rainy', 'mild', 'normal', 'FALSE', 'yes'], ['sunny', 'mild', 'normal', 'TRUE', 'yes'], ['overcast', 'mild', 'high', 'TRUE', 'yes'], ['overcast', 'hot', 'normal', 'FALSE', 'yes'], ['sunny', 'hot', 'high', 'FALSE', 'no'], ['sunny', 'hot', 'high', 'TRUE', 'no'], ['rainy', 'cool', 'normal', 'TRUE', 'no'], ['sunny', 'mild', 'high', 'FALSE', 'no'], ['rainy', 'mild', 'high', 'TRUE', 'no']]) self.transform() self.OneHotEncoder() self.dataMat = self.dataset[:, 0:-1] self.labelMat = self.dataset[:, -1] def transform(self): m, n = shape(self.dataset) for i in range(n): types = [] for j in self.dataset[:, i]: types.append(j[0, 0]) type = list(set(types)) type.sort() for index in range(len(type)): self.dataset[:, i][self.dataset[:, i] == type[index]] = index self.type = type def OneHotEncoder(self): from sklearn import preprocessing self.enc = preprocessing.OneHotEncoder() self.enc.fit(self.dataset) self.dataset = mat(self.enc.transform(self.dataset).toarray()) def train(self): dataNum, featureNum = shape(self.dataMat) self.pLabel1 = sum(self.labelMat) / float(dataNum) p0Num = zeros((1, featureNum)) p1Num = zeros((1, featureNum)) p0Denom = 1.0 p1Denom = 1.0 for i in range(dataNum): if self.labelMat[i] == 1: p1Num += self.dataMat[i] p1Denom += 1 else: p0Num += self.dataMat[i] p0Denom += 1 self.p0Vec = p0Num / p0Denom self.p1Vec = p1Num / p1Denom def classify(self, data): p = multiply(data, self.p1Vec) p1 = 1 for i in nonzero(p)[1]: p1 *= p[0, i] p1 *= self.pLabel1 p = multiply(data, self.p0Vec) p0 = 1 for i in nonzero(p)[1]: p0 *= p[0, i] p0 *= (1.0 - self.pLabel1) if p1 > p0: # return self.type[1] return 1 else: # return self.type[0] return 0 def test(self): self.loadDataSet() self.train() sum = 0.0 m, n = shape(self.dataMat) for i in arange(m): sum += self.classify(self.dataMat[i, :] == self.labelMat[i, 0]) print("正确率:",sum/m)if __name__ == '__main__': NB = NaiveBayesClassifier() NB.test()
实验结果:
正确率: 0.7857142857142857
0 0
- 朴素贝叶斯python实现
- 朴素贝叶斯 Python
- Python实现朴素贝叶斯
- 朴素贝叶斯 python
- 朴素贝叶斯&&Python实现
- Python实现朴素贝叶斯
- 朴素贝叶斯python实现
- 朴素贝叶斯 python 实现
- 朴素贝叶斯随笔-python
- python 朴素贝叶斯
- 朴素贝叶斯算法Python实现
- 朴素贝叶斯(Python实现)
- 朴素贝叶斯算法--python实现
- Python实现朴素贝叶斯(NB)
- 朴素贝叶斯分类Python演示
- 机器学习:朴素贝叶斯--python
- python朴素贝叶斯实现-2
- python 朴素贝叶斯简单实现
- Array
- boost导常使用
- javascript闭包和闭包的几种写法及用途
- android中常用的弹出提示框
- H3C IMC MSSQL数据库的密文的解密过程
- 朴素贝叶斯 Python
- 文件读取
- 面向对象分析和设计(OOA/D)
- PHP函数utf8转gb2312编码
- 转一篇eoe论坛上sfshine大神的文章--AndroidHal底层! ConsumerIrService分析
- 记录重装Win7的心路历程
- Jquery学习之旅之添加元素
- C++输出全排列递归算法详细解释
- new 对象加括号和不加括号的区别