朴素贝叶斯算法python_朴素贝叶斯算法python实现

朴素贝叶斯是一种十分简单的分类算法,称其朴素是因为其思想基础的简单性,就文本分类而言,他认为词袋中的两两词之间的关系是相互独立的,即一个对象的特征向量中的每个维度都是互相独立的。这是朴素贝叶斯理论的思想基础。

朴素贝叶斯分类的正式定义:

设x={}为一个待分类项,而每个a为x的一个特征属性

有类别集合C={}

计算P(|x),P(|x),…,P(|x)

如果P(|x)=max{ P(|x),P(|x),…,P(|x)},则x

那么关键就是如何计算第三步中的各个条件概率,我们可以这样计算:

找到一个已知分类的待分类项集合,即训练集

统计得到在各类别下各个特征属性的条件概率估计,即:

P(),P(),…,P()

P(),P(),…,P()

P(),P(),…,P()

如果各个特征属性是条件独立的(或者假设他们之间是相互独立的),根据贝叶斯定理,有如下推导:

因为分母对于所有类别为常数,只要将分子最大化即可,又因为各特征属性是条件独立的,所以有:

根据上述分析,朴素贝叶斯分类的流程可以表示如下:

训练数据生成样本集:TF-IDF

对每个类别计算P()

对每个特征属性计算所有划分的条件概率

对每个类别计算P(x|)P()

以P(x|)P()的最大项作为x的所属类别

朴素贝叶斯的算法实现

首先创建一个Nbayes_pre.py文件来编写导入的数据和朴素贝叶斯类的代码

#高斯朴素贝耶斯

import numpy as np

from sklearn.model_selection import train_test_split

import pandas as pd

from sklearn.naive_bayes import GaussianNB

from sklearn.naive_bayes import BernoulliNB #伯努利分布

from sklearn.naive_bayes import MultinomialNB

from sklearn.neighbors import KNeighborsClassifier

'''''

clf = GaussianNB().fit(X, Y)

clf_pf = GaussianNB().partial_fit(X, Y, np.unique(Y))

##伯努利分布

clf = BernoulliNB()

clf.fit(train_data, train_target)

BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)

#多项式分布

from sklearn.naive_bayes import MultinomialNB

clf = MultinomialNB().fit(x_train, y_train)

'''

def getdatafromcsv():

data=pd.read_csv('iris .csv')

cols=['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']

train_target=data['Species']

train_data=data[cols]

return train_data,train_target

"""

#第一个为身高,第二个值为体重(kg),第三个为性别,1为男,2为女

x_train = [[160, 60, 1], [155, 80, 1], [178, 53, 2], [158, 53, 2], [166, 45, 2], [170, 50, 2], [156, 56, 2],

[166, 50, 1], [175, 55, 1], [188, 68, 1], [159, 41, 2], [166, 70, 1], [175, 85, 1], [188, 98, 1],

[159, 61, 2]]

#1为胖,0为瘦

y_train = [1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1]

x_test = [[166, 45, 2], [172, 52, 1], [156, 60, 1], [150, 70, 2],[166,60,1]]

"""

train_data,train_target=getdatafromcsv()

x_train,x_test,y_train,y_test=train_test_split(train_data,train_target,test_size=0.1)

def predcitbyts(train_data,train_target,test_data):

clf = GaussianNB().fit(train_data,train_target)

predict=clf.predict(test_data)

print("高斯贝耶斯结果:",predict)

clf_pf = GaussianNB().partial_fit(train_data, train_target, np.unique(train_target))

predict1=clf_pf.predict(test_data)

print("高斯贝耶斯结果partial_fit:",predict1)

def predictknn(train_data,train_target,test_data):

knn = KNeighborsClassifier()

knn.fit(train_data, train_target)

iris_y_predict = knn.predict(test_data)

print("KNN结果:",iris_y_predict)

def Bernoulli(train_data,train_target,test_data):

clf = BernoulliNB()

clf.fit(train_data, train_target)

BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)

predict=clf.predict(test_data)

print(predict)

#多项式

def Multinomial(train_data,train_target,test_data):

clf = MultinomialNB().fit(x_train, y_train)

predict=clf.predict(test_data)

print(predict)

Multinomial(x_train,y_train,x_test)

print(y_test)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
朴素贝叶斯算法是一种基于概率统计的分类算法,它的核心思想是利用贝叶斯定理计算出每个类别的后验概率,然后选择具有最大后验概率的类别作为分类结果。在这个过程中,朴素贝叶斯假设每个特征之间相互独立,也就是说,每个特征对于分类的贡献是独立的。 在Python中,我们可以使用scikit-learn库来实现朴素贝叶斯算法。具体步骤如下: 1.准备数据:将数据集划分为训练集和测试集。 2.训练模型:使用训练集来训练朴素贝叶斯模型。 3.测试模型:使用测试集来测试模型的准确率。 下面是一个简单的朴素贝叶斯分类器的实现示例: ``` from sklearn.naive_bayes import GaussianNB from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载数据集 iris = load_iris() # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0) # 创建朴素贝叶斯分类器对象 gnb = GaussianNB() # 训练模型 gnb.fit(X_train, y_train) # 预测测试集的结果 y_pred = gnb.predict(X_test) # 计算准确率 accuracy = sum(y_pred == y_test) / len(y_test) print("准确率:", accuracy) ``` 这里使用了iris数据集作为示例数据集进行分类。首先,我们使用`train_test_split`函数将数据集划分为训练集和测试集,然后创建一个`GaussianNB`对象,训练模型并使用测试集来测试模型的准确率。最后,我们计算出准确率并将其打印出来。 完整的代码可以在以下链接中找到: https://github.com/Light-City/NaiveBayesClassifier-Python/blob/master/NaiveBayesClassifier.py
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值