朴素贝叶斯法(二)——Python实现篇

简介

笔者将自己编写的分类器代码封装在naive_bayes.py中,详见原理篇,也可在github下载源码。

scikit-learn包中提供了三种常用的朴素贝叶斯算法:
下文实验中用的是高斯朴素贝叶斯,主要应用于数值型特征;
另外两种为多项式朴素贝叶斯、伯努利朴素贝叶斯,主要应用于文本分类。
关于朴素贝叶斯在文本分类的应用,可阅读参考
手写完成朴素贝叶斯分类器进行文本分类
使用sklearn自带的朴素贝叶斯分类器进行文本分类

from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
from sklearn.naive_bayes import BernoulliNB

例4.1

详见原理篇

import naive_bayes as na
import numpy as np
path=r'E:\PYproject\data\eg4.1.xlsx'
data=na.load_excel(path)
data=np.array(data)
X_data=data[:,:-1]
y_data=data[:,-1]
x=np.array([2,'S'])

#调用自己编写的库
clf=na.naiveBayes(lambda_=1)
clf.fit(X_data,y_data)
result1=clf.predict(x)
print('result1: ',result1)

#调用sklearn库
from sklearn.naive_bayes import GaussianNB
clf2=GaussianNB()
clf2.fit(X_data,y_data)
result2=clf2.predict(x)
print('result2: ',result2)

结果展示
在这里插入图片描述

调用笔者自己编写的库可正确输出结果 ,而调用sklearn库中的朴素贝叶斯算法报错TypeError。
sklearn库中的高斯朴素贝叶斯算法只能对数值型数据进行处理,不能处理字符型数据。

例4.1——修改训练数据

import numpy as np
data = np.array([[1, 0, -1], [1, 1, -1], [1, 1, 1], [1, 0, 1],
                     [1, 0, -1], [2, 0, -1], [2, 1, -1], [2, 1, 1],
                     [2, 2, 1], [2, 2, 1], [3, 2, 1], [3, 1, 1],
                     [3, 1, 1], [3, 2, 1], [3, 2, -1]])
X_data=data[:,:-1]
y_data=data[:,-1]
x=np.array([2,0])

#调用自己编写的库
import naive_bayes as na
clf1=na.naiveBayes(lambda_=1)
clf1.fit(X_data,y_data)
result1=clf1.predict(x)
print('result1: ',result1)

#调用sklearn库
from sklearn.naive_bayes import GaussianNB
clf2=GaussianNB()
clf2.fit(X_data,y_data)
result2=clf2.predict(x.reshape(1,-1))
print('result2: ',result2)

结果展示
在这里插入图片描述
X ( 2 ) X^{(2)} X(2)的字符型数据换成数值型数据后,二者都可输出正确结果。

iris数据集

from sklearn import datasets
from sklearn.model_selection import train_test_split
iris=datasets.load_iris()
X_data=iris.data
y_data=iris.target
X_train,X_test,y_train,y_test=train_test_split(X_data,y_data,test_size=0.3)#测试集占总数据集的30%


#调用自己编写的库
import naive_bayes as na
clf1=na.naiveBayes(lambda_=1)
clf1.fit(X_data,y_data)
result1=clf1.predict(X_test)
print('result1: ',result1)

#调用sklearn库
from sklearn.naive_bayes import GaussianNB
clf2=GaussianNB()
clf2.fit(X_train,y_train)
result2=clf2.predict(X_test)
print('result2: ',result2)

#计算预测准确率
count1=0
for left,right in zip(result1,y_test):
    if left==right:
        count1+=1
print('accuracy1: ',count1/len(y_test))

count2=0
for left,right in zip(result2,y_test):
    if left==right:
        count2+=1
print('accuracy2: ',count2/len(y_test))

结果展示
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
朴素贝叶斯原理: 朴素贝叶斯是一种基于贝叶斯定理和特征条件独立假设的分类算。其基本思想是对于给定的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个类别的概率最大,就认为此待分类项属于哪个类别。具体来说,朴素贝叶斯假设每个特征与其他特征之间相互独立,即每个特征都独立地对分类结果产生影响。在实际应用中,朴素贝叶斯常用于文本分类、垃圾邮件过滤等领域。 Python实现Python中有多个库可以实现朴素贝叶斯,其中比较常用的是scikit-learn库。下面是一个简单的示例代码,用于展示如何使用scikit-learn库实现朴素贝叶斯进行文本分类: ```python from sklearn.naive_bayes import MultinomialNB from sklearn.feature_extraction.text import CountVectorizer # 构建训练数据 train_data = ['this is a good book', 'this is a bad book', 'good day', 'bad day'] train_labels = ['positive', 'negative', 'positive', 'negative'] # 构建特征提取器 vectorizer = CountVectorizer() # 将文本转换为特征向量 train_features = vectorizer.fit_transform(train_data) # 构建朴素贝叶斯分类器 clf = MultinomialNB() # 训练分类器 clf.fit(train_features, train_labels) # 构建测试数据 test_data = ['good book', 'bad book', 'happy day'] test_features = vectorizer.transform(test_data) # 进行预测 predicted_labels = clf.predict(test_features) # 输出预测结果 print(predicted_labels) # 输出:['positive' 'negative' 'positive'] ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值