机器学习--模型分类--贝叶斯

朴素贝叶斯的“朴素”,并不是简单的意思,而是指样本的特征之间是相互独立的。在所有的机器学习分类算法中, 朴素贝叶斯和其他绝大部分分类算法都不同,其他分类算法基本都是判别方法,即直接学习出特征输出Y和特征向 量X之间的关系,要么是决策函数Y=f(X),要么是条件分布P(Y|X),但是朴素贝叶斯却是生成方法,也就是直接找 出特征输出Y和特征向量X之间的联合分布P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)得出。
朴素贝叶斯的优点在于:1,有稳定的分类效率,2,对小规模数据表现很好,能处理多分类任务,适合增量式训 练,尤其是数据量超出内存时,可以一批一批的去增量训练。3,对缺失数据不太敏感,算法比较简单,常用于文 本分类。
但朴素贝叶斯的缺点是:1,朴素贝叶斯算法有一个重要的使用前提:样本的特征属性之间是相互独立的,这使得 朴素贝叶斯算法在满足这一条件的数据集上效果非常好,而不满足独立性条件的数据集上,效果欠佳。理论上,朴 素贝叶斯模型与其他分类方法相比,有最小的误差率,但是这一结果仅限于满足独立性条件的数据集上。在实际应 用中,属性之间不太可能完全独立,特别是在特征属性个数非常多,且属性之间相关性较大时,朴素贝叶斯分类效 果不太好。2,需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候 会由于假设的先验模型的原因导致预测效果不佳。3,由于通过先验和数据来决定后验的概率从而决定分类,所以 分类决策存在一定的错误率。

1.准备数据集

-------------------------------------输---------出-------------------------------
class Num: 4, class: [0, 1, 2, 3]
--------------------------------------------完------------------------------------
上面从txt文件中加载了数据集,可以看出,该数据集含有400个样本,被平均分成4个不同类别(0,1,2,3)。下面将 这不同类别的数据集绘制到散点图中,以观察每个类别的大概聚集位置。

import numpy as np

import pandas as pd

from matplotlib import pyplot as plt

%matplotlib inline

# 准备数据集 data_path=‘./010-data_multivar.csv‘

df=pd.read_csv(data_path,header=None)

# print(df.head()) # print(df.info()) # 查看数据信息,确保没有错误

dataset_X,dataset_y=df.iloc[:,:-1],df.iloc[:,-1] # 拆分为X(所有行,除最后一列)和Y(所有行,最后一 列)

# print(‘-‘*100)

dataset_X=dataset_X.values

dataset_y=dataset_y.values

# print(dataset_X.shape) # (400, 2)

# print(dataset_y.shape) # (400,)

classes=list(set(dataset_y))

print(‘class Num: {}, class: {}‘.format(len(classes), classes)) # 上面检查加载没有问题,一共有四个不同类别,类别名称为:0,1,2,3

2.数据可视化

# 数据集可视化
def visual_2D_dataset(dataset_X,dataset_y):
‘‘‘将二维数据集dataset_X和对应的类别dataset_y显示在散点图中‘‘‘
assert dataset_X.shape[1]==2,‘only support dataset with 2 features‘
plt.figure()
classes=list(set(dataset_y))
markers=[‘.‘,‘,‘,‘o‘,‘v‘,‘^‘,‘<‘,‘>‘,‘1‘,‘2‘,‘3‘,‘4‘,‘8‘
,‘s‘,‘p‘,‘*‘,‘h‘,‘H‘,‘+‘,‘x‘,‘D‘,‘d‘,‘|‘]
colors=[‘b‘,‘c‘,‘g‘,‘k‘,‘m‘,‘w‘,‘r‘,‘y‘]
for class_id in classes:
one_class=np.array([feature for (feature,label) in
zip(dataset_X,dataset_y) if label==class_id])
plt.scatter(one_class[:,0],one_class[:,1],marker=np.random.choice(markers,1)[0],
c=np.random.choice(colors,1)[0],label=‘class_‘+str(class_id))
plt.legend()

visual_2D_dataset(dataset_X,dataset_y)

3.构建高斯分布贝叶斯

from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
gaussian= GaussianNB()
#预测
gaussian.fit(dataset_X,dataset_y)
y_pre_gauss = gaussian.predict(dataset_X)
# print(y_pre_gauss)
#判断预测结果和真实值的匹配数量
correct_count= (dataset_y == y_pre_gauss).sum()
print(correct_count)
#调用绘图函数
plot_classifier(gaussian,dataset_X,dataset_y)
# plot_classifier(gaussian,dataset_X,y_pre_gauss)

4.多项式朴素贝叶斯

from sklearn.naive_bayes import MultinomialNB
#范围缩放
from sklearn.preprocessing import MinMaxScaler
scalar = MinMaxScaler(feature_range=(10,20))
dataset_X1 = scalar.fit_transform(dataset_X)
# print(dataset_X)
#要求所有的特征必须是非负数,负责无法训练
mul_nb=MultinomialNB()
mul_nb.fit(dataset_X1,dataset_y)
# print(np.c_[dataset_X,dataset_y])
# print(np.r_[dataset_X,dataset_y.reshape(-1,2)])
#row 列向合并,col 列
y_pre = mul_nb.predict([[18.79528986,13.46307385]])
print(y_pre)
#np.c_[]行合并 np.r_[] 列合并
plot_classifier(mul_nb,dataset_X1,dataset_y)

4.伯努利贝叶斯

from sklearn.naive_bayes import BernoulliNB

ber_nb = BernoulliNB()
ber_nb.fit(dataset_X,dataset_y)
y_pre = ber_nb.predict(dataset_X)
# print(y_pre)
plot_classifier(ber_nb,dataset_X,dataset_y)

5.打印混淆矩阵

# 使用sklearn 模块计算混淆矩阵
from sklearn.metrics import confusion_matrix
print(dataset_y.shape)
print(y_pre_gauss.shape)
confusion_mat = confusion_matrix(dataset_y, y_pre_gauss)
# print(confusion_mat) #看看混淆矩阵长啥样

6.绘制混合矩阵的图形

from matplotlib import pyplot as plt
%matplotlib inline
import numpy as np # 可视化混淆矩阵
import itertools

def plot_confusion_matrix(confusion_mat):

‘‘‘将混淆矩阵画图并显示出来‘‘‘
plt.imshow(confusion_mat, interpolation=‘nearest‘, cmap=plt.cm.Blues)
plt.title(‘Confusion matrix‘)
plt.colorbar()
tick_marks = np.arange(confusion_mat.shape[0])
plt.xticks(tick_marks, tick_marks)
plt.yticks(tick_marks, tick_marks)
thresh = confusion_mat.max()
for i, j in itertools.product(range(confusion_mat.shape[0]), range(confusion_mat.shape[1])): plt.text(j, i, confusion_mat[i, j], horizontalalignment="center", color="white" if confusion_mat[i, j] > thresh else "black")

plt.tight_layout()
plt.ylabel(‘True label‘)
plt.xlabel(‘Predicted label‘)
plt.show()
plot_confusion_matrix(confusion_mat)

原文地址:https://www.cnblogs.com/liang715200/p/10682635.html

时间: 2024-09-30 11:07:10

机器学习--模型分类--贝叶斯的相关文章

概率图模型:贝叶斯网络与朴素贝叶斯网络

http://blog.csdn.net/pipisorry/article/details/51471222 贝叶斯与频率派思想 频率派思想 长久以来,人们对一件事情发生或不发生,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大.而且事情发生或不发生的概率虽然未知,但最起码是一个确定的值. 比如如果问那时的人们一个问题:"有一个袋子,里面装着若干个白球和黑球,请问从袋子中取得白球的概率是多少?"他们会立马告诉你,取出白球的概率就是

[机器学习&amp;数据挖掘]朴素贝叶斯数学原理

1.准备: (1)先验概率:根据以往经验和分析得到的概率,也就是通常的概率,在全概率公式中表现是“由因求果”的果 (2)后验概率:指在得到“结果”的信息后重新修正的概率,通常为条件概率(但条件概率不全是后验概率),在贝叶斯公式中表现为“执果求因”的因 例如:加工一批零件,甲加工60%,乙加工40%,甲有0.1的概率加工出次品,乙有0.15的概率加工出次品,求一个零件是不是次品的概率即为先验概率,已经得知一个零件是次品,求此零件是甲或乙加工的概率是后验概率 (3)全概率公式:设E为随机试验,B1,

机器学习之朴素贝叶斯

一 .朴素贝叶斯算法概述  前面我们讲过KNN分类算法和决策树分类算法,两者最终都是预测出实例的确定的分类结果,但是,有时候分类器会产生错误结果:本章要学的朴素贝叶斯分类算法则是给出一个最优的猜测结果,同时给出猜测的概率估计值. 朴素贝叶斯对一个测试样本分类时,通过比较p(y=0|x)和p(y=1|x)来进行决策.这里注意涉及两个重点,一个是贝叶斯公式:p(y=1|x)=p(x|y=1)p(y=1)p(x)p(y=1|x)=p(x|y=1)p(y=1)p(x),其中x是一个多维向量,x=(x1,

机器学习之朴素贝叶斯分类器

朴素贝叶斯分类器 (naive bayes classifier, NBC) 是一种常见且简单有效的贝叶斯分类算法.对已知类别,朴素贝叶斯分类器在估计类条件概率时假设特征之间条件独立.这样的假设,可以使得在有限的训练样本下,原本难以计算的联合概率 \(P(X_1, X_2, \cdots, X_n | Y)\) 转化为每个类别条件概率的乘积.尤其是在特征很多时,就显得更加简便. 条件独立性 给定 X, Y 条件独立,则有: \[ P(X,Y|Z)=P(X|Z)\times P(Y|Z) \] 有

概率图模型:贝叶斯网络

http://blog.csdn.net/pipisorry/article/details/51461997 贝叶斯网络图模型的表示 为了理解有向图对于描述概率分布的作用,首先考虑三个变量 a, b, c 上的一个任意的联合分布 p(a, b, c) .注意,现阶段我们不需要对这些变量做出任何更多的假设,例如它们是离散的还是连续的.实际上,图模型的一个强大的方面是,一个具体的图可以描述一大类概率分布.通过使用概率的乘积规则(1.11),我们可以将联合概率分布写成下面的形式. p(a, b, c

机器学习 Python实现 贝叶斯算法

[['my','dog','has','flea','problems','help','please'],    0 ['maybe','not','take','him','to','dog','park','stupid'],  1 ['my','dalmation','is','so','cute','I','love','him'],          0 ['stop','posting','stupid','worthless','garbage'],          1 ['m

机器学习算法-朴素贝叶斯Python实现

引文:前面提到的K最近邻算法和决策树算法,数据实例最终被明确的划分到某个分类中,下面介绍一种不能完全确定数据实例应该划分到哪个类别,或者说只能给数据实例属于给定分类的概率. 基于贝叶斯决策理论的分类方法之朴素贝叶斯 优点:在数据较少的情况下仍然有效,可以处理多类别问题 缺点:对于输入数据的准备方式较为敏感 适用数据类型:标称型数据. 朴素贝叶斯的一般过程 收集数据:可以使用任何方式 准备数据:需要数据型或是布尔型数据 分类数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好 训练算法:计

机器学习之朴素贝叶斯算法

1 贝叶斯定理的引入 概率论中的经典条件概率公式: 公式的理解为,P(X ,Y)= P(Y,X)<=> P(X | Y)P(Y)= P(Y | X)P (X),即 X 和 Y 同时发生的概率与 Y 和 X 同时发生的概率一样. 2 朴素贝叶斯定理 朴素贝叶斯的经典应用是对垃圾邮件的过滤,是对文本格式的数据进行处理,因此这里以此为背景讲解朴素贝叶斯定理.设D 是训练样本和相关联的类标号的集合,其中训练样本的属性集为          X { X1,X2, ... , Xn }, 共有n 个属性:

吴裕雄--天生自然python机器学习:朴素贝叶斯算法

分类器有时会产生错误结果,这时可以要求分类器给出一个最优的类别猜测结果,同 时给出这个猜测的概率估计值. 概率论是许多机器学习算法的基础 在计算 特征值取某个值的概率时涉及了一些概率知识,在那里我们先统计特征在数据集中取某个特定值 的次数,然后除以数据集的实例总数,就得到了特征取该值的概率. 首先从一个最简单的概率分类器开始,然后给 出一些假设来学习朴素贝叶斯分类器.我们称之为“朴素”,是因为整个形式化过程只做最原始.最简单的假设. 基于贝叶斯决策理论的分类方法 朴素贝叶斯是贝叶斯决策理论的一部